Como calcular distância entre dois lugares? Existe algum serviço disponibilizado pelo Google Map para o iphone?
Pergunta
Eu quero colocar a facilidade para a distância de visualização entre dois locais selecionados pelo usuário.
Existe algum código / serviço fonte de amostra disponível para fazê-lo?
Agradecemos antecipadamente.
Solução
- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location
Você pode inicializar um objeto CLLocation
com a latitude e longitude:
- (id)initWithLatitude:(CLLocationDegrees)latitude longitude:(CLLocationDegrees)longitude
Outras dicas
Se você tem dois objetos CLLocation, você pode apenas fazer:
[location1 getDistanceFrom:location2];
No entanto, isso é apenas ponto-a-ponto. Se você quiser a distância sobre uma rota específica, bem, isso é toda uma outra chaleira de peixes.
Esta é uma tarefa para o quadro CLLocation. Com coordenadas conhecidas de 2 pontos você pode criar (se você não tiver já) 2 objetos CLLocation e encontrar uma distância entre eles usando
- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location
método.
Eu não estou familiarizado com o desenvolvimento do iPhone, mas aqui está o código C # para calcular a distância entre dois pontos usando a fórmula 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;
}
O MeasurementUnit é definido como:
/// <summary>
/// Measurement units
/// </summary>
public enum MeasurementUnit
{
Miles,
Kilometers
}
Depende de qual tipo de diferença que você quer ter o entre os dois pontos. No mapa eu acho que você não quer a distância do ar. Então você deve verificar http://iosboilerplate.com/
Se você ainda quer usar a distância do ar, use Core Location.
- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location
Retorna a distância (em metros) da localização do receptor para o local especificado. (Reprovado na iOS 3.2. Uso o distanceFromLocation:
- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location