¿Cómo calcular la distancia entre dos lugares? ¿Hay algún servicio disponible en Google Map para iphone?

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

  •  10-07-2019
  •  | 
  •  

Pregunta

Quiero poner la facilidad para mostrar la distancia entre dos lugares seleccionados por el usuario.

¿Hay algún código fuente / servicio de muestra disponible para hacerlo?

Gracias de antemano.

¿Fue útil?

Solución

El CoreLocation Framework proporciona la capacidad de calcular la distancia, en metros, entre dos puntos:

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

Puede inicializar un objeto CLLocation con latitud y longitud:

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

Otros consejos

Si tiene dos objetos CLLocation, simplemente puede hacer:

[location1 getDistanceFrom:location2];

Sin embargo, eso es solo punto a punto. Si desea la distancia sobre una ruta específica, bueno, esa es otra caldera de pescado.

Esta es una tarea para el marco CLLocation. Con coordenadas conocidas de 2 puntos, puede crear (si aún no los tiene) 2 objetos CLLocation y encontrar una distancia entre ellos usando

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

método.

No estoy familiarizado con el desarrollo de iPhone, pero aquí está el código C # para calcular la distancia entre dos puntos usando la fórmula de 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 Unidad de medida se define como:

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

Depende del tipo de diferencia que quieras tener entre ambos puntos. En el mapa creo que no quieres la distancia aérea. Entonces debe verificar http://iosboilerplate.com/

Si todavía quieres usar la distancia aérea, usa la Ubicación Central.

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

Devuelve la distancia (en metros) desde la ubicación del receptor a la ubicación especificada. (Desaprobado en iOS 3.2. Uso the distanceFromLocation:

- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top