Come calcolare la distanza tra due luoghi? Esiste un servizio disponibile da Google Map per iPhone?

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

  •  10-07-2019
  •  | 
  •  

Domanda

Voglio mettere la funzione per visualizzare la distanza tra due posti selezionati dall'utente.

È disponibile un codice / servizio di esempio per farlo?

Grazie in anticipo.

È stato utile?

Soluzione

Il CoreLocation Framework offre la possibilità di calcolare la distanza, in metri, tra due punti:

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

Puoi inizializzare un oggetto CLLocation con latitudine e longitudine:

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

Altri suggerimenti

Se hai due oggetti CLLocation, puoi semplicemente fare:

[location1 getDistanceFrom:location2];

Tuttavia, è solo punto-punto. Se vuoi la distanza su un percorso specifico, beh, questo è un altro altro bollitore di pesce.

Questa è un'attività per il framework CLLocation. Con le coordinate note di 2 punti puoi creare (se non li hai già) 2 oggetti CLLocation e trovare una distanza tra loro usando

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

metodo.

Non ho familiarità con lo sviluppo di iPhone, ma ecco il codice C # per calcolare la distanza tra due punti usando la formula 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;

}

La MeasurementUnit è definita come:

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

Dipende dal tipo di differenza che vuoi avere tra entrambi i punti. Sulla mappa penso che non vuoi la distanza aerea. Quindi dovresti controllare http://iosboilerplate.com/

Se vuoi ancora usare la distanza aerea, usa Core Location.

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

Restituisce la distanza (in metri) dalla posizione del ricevitore alla posizione specificata. (Obsoleto in iOS 3.2. Uso the distanceFromLocation:

- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top