2009-10-29 6 views

Odpowiedz

12

CoreLocation Framework zapewnia możliwość wypracować dystans w metrach, pomiędzy dwoma punktami:

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

można zainicjować CLLocation obiekt o szerokości i długości geograficznej:

- (id)initWithLatitude:(CLLocationDegrees)latitude longitude:(CLLocationDegrees)longitude 
+0

Dzięki ... jej? pomocne – Rambo

2

To jest zadanie dla struktury CLLocation. O znanych współrzędnych o 2 punkty można utworzyć (jeśli nie mają one już) 2 obiekty CLLocation i znaleźć odległość między nimi za pomocą

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

metody.

3

Jeśli masz dwa obiekty CLLocation, można po prostu zrobić:

[location1 getDistanceFrom:location2]; 

Jednak, to tylko punkt-punkt. Jeśli chcesz mieć odległość na konkretnej trasie, cóż, to cały inny czajnik.

2

nie jestem znajomy z rozwojem iPhone'a, ale tutaj jest kod C# do obliczania odległości między dwoma punktami za pomocą formuły Haversine:

/// <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; 

} 

MeasurementUnit jest zdefiniowany jako:

/// <summary> 
/// Measurement units 
/// </summary> 
public enum MeasurementUnit 
{ 
    Miles, 
    Kilometers 
} 
+0

Dzięki vbocan za twoją odpowiedź – Rambo

0

To zależy od tego, jaki rodzaj różnicą, że chcesz mieć między obu punktach. Na mapie myślę, że nie chcesz odległości powietrznej. Następnie sprawdź: http://iosboilerplate.com/

Jeśli nadal chcesz korzystać z odległości powietrza, użyj lokalizacji głównej.

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

Zwraca odległość (w metrach) od położenia odbiornika do określonej lokalizacji. (Przestarzałe w iOS 3.2 Użyj się distanceFromLocation.

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