Как рассчитать расстояние между двумя местами? Есть ли какая-либо услуга, предоставляемая Google Map для iphone? - PullRequest
6 голосов
/ 29 октября 2009

Я хочу выставить объект для отображения расстояния между двумя выбранными пользователем местами.

Существует ли какой-либо пример исходного кода / службы, доступной для этого?

Заранее спасибо.

Ответы [ 6 ]

12 голосов
/ 29 октября 2009

CoreLocation Framework предоставляет возможность определять расстояние в метрах между двумя точками:

- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location

Вы можете инициализировать CLLocation объект с широтой и долготой:

- (id)initWithLatitude:(CLLocationDegrees)latitude longitude:(CLLocationDegrees)longitude
3 голосов
/ 29 октября 2009

Если у вас есть два объекта CLLocation, вы можете просто сделать:

[location1 getDistanceFrom:location2];

Однако, это просто точка-точка. Если вы хотите расстояние по определенному маршруту, ну, это совсем другой котелок рыбы.

2 голосов
/ 29 октября 2009

Я не знаком с разработкой для iPhone, но вот код C # для вычисления расстояния между двумя точками по формуле Хаверсайна:

/// <summary>
/// Computes the distance beween two points
/// </summary>
/// <param name="P1_Latitude">Latitude of first point (in radians).</param>
/// <param name="P1_Longitude">Longitude of first point(in radians).</param>
/// <param name="P2_Latitude">Latitude of second point (in radians).</param>
/// <param name="P2_Longitude">Longitude of second point (in radians).</param>
protected double ComputeDistance(double P1_Longitude, double P1_Latitude, double P2_Longitude, double P2_Latitude, MeasurementUnit unit)
{            
    double dLon = P1_Longitude - P2_Longitude;
    double dLat = P1_Latitude - P2_Latitude;

    double a = Math.Pow(Math.Sin(dLat / 2.0), 2) +
            Math.Cos(P1_Latitude) *
            Math.Cos(P2_Latitude) *
            Math.Pow(Math.Sin(dLon / 2.0), 2.0);

    double c = 2 * Math.Asin(Math.Min(1.0, Math.Sqrt(a)));
    double d = (unit == MeasurementUnit.Miles ? 3956 : 6367) * c;
    return d;

}

Единица измерения определяется как:

/// <summary>
/// Measurement units
/// </summary>
public enum MeasurementUnit
{
    Miles,
    Kilometers
}
2 голосов
/ 29 октября 2009

Это задача для фреймворка CLLocation. С известными координатами в 2 точки вы можете создать (если у вас их еще нет) 2 объекта CLLocation и найти расстояние между ними, используя

- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location

способ.

0 голосов
/ 25 ноября 2013
- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location

Возвращает расстояние (в метрах) от местоположения получателя до указанного местоположения. (Устаревший в iOS 3.2. Использование расстояние от расположения:

- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location
0 голосов
/ 17 ноября 2011

Это зависит от того, какую разницу вы хотите иметь между обеими точками. На карте я думаю, что вы не хотите, чтобы расстояние воздуха. Тогда вы должны проверить http://iosboilerplate.com/

Если вы все еще хотите использовать воздушное расстояние, используйте Core Location.

...