Wie Abstand zwischen zwei Orten berechnen? Gibt es einen Service zur Verfügung von Google Maps für iphone?

StackOverflow https://stackoverflow.com/questions/1643138

  •  10-07-2019
  •  | 
  •  

Frage

Ich möchte Anlage setzen Entfernung zwischen zwei Orten durch den Benutzer ausgewählt angezeigt werden soll.

Gibt es eine Beispielquellcode / Dienst zu tun, so zur Verfügung?

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Die Corelocation-Framework bietet die Möglichkeit, den Abstand zu trainieren, in Metern zwischen zwei Punkten:

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

Sie können ein CLLocation Objekt mit Breiten- und Längen initialisieren:

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

Andere Tipps

Wenn Sie zwei CLLocation Objekte haben, können Sie einfach tun:

[location1 getDistanceFrom:location2];

Doch das ist nur Punkt-zu-Punkt. Wenn Sie den Abstand über einen bestimmten Weg wollen, na ja, das ist eine ganz andere Kessel der Fische.

Dies ist eine Aufgabe für CLLocation Rahmen. Bei bekannten Koordinaten von zwei Punkten Sie erstellen können (wenn Sie nicht haben sie bereits) 2 CLLocation Objekte und finden Sie einen Abstand zwischen ihnen mit

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

Methode.

Ich bin nicht mit iPhone Entwicklung vertraut, aber hier ist der C # -Code, den Abstand zwischen zwei Punkten zur Berechnung der Haversine Formel:

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

}

Die MeasurementUnit ist definiert als:

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

Es hängt davon ab, welche Art von Unterschied Sie wollen zwischen den beiden Punkten haben. Auf der Karte glaube ich Ihnen die Luftstrecke nicht wollen. Dann sollten Sie überprüfen, http://iosboilerplate.com/

Wenn Sie immer noch wollen die Luftstrecke benutzen, verwenden Kernort.

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

Gibt den Abstand (in Metern) vom Standort des Empfängers an die angegebenen Position. (Auslaufend in IOS 3.2. Verwenden Sie die distanceFromLocation:

- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top