DistanceFromLocation производит очень большое (неправильное) расстояние - PullRequest
0 голосов
/ 14 декабря 2010

Мне было труднее всего выяснить, почему distanceFromLocation не вычисляет правильное расстояние для двух CLLocations. Вычисленный результат - это число, ПУТЬ большее, чем фактическое расстояние, но эти два местоположения являются действительными.

Прежде всего, вот две локации:

МЕСТО 1: <+44.56697840, -69,55759810> +/- 0,00 м (скорость -1,00 м / с / курс -1,00) @ 2010-12-13 21:12:03 -0500
РАСПОЛОЖЕНИЕ 2: <+44,31400400, -69,79157000> +/- 0,00 м (скорость -1,00 м / с / курс -1,00) @ 2010-12-13 21:12:03 -0500

А вот код, где объявляются Location1 и Location2. Я проверил, что это правильные значения, но я все еще не могу понять это

CLLocation *newLocation = [[CLLocation alloc] 
    initWithLatitude:[latitude doubleValue] 
    longitude:[longitude doubleValue]];
    // CURRENT LOCATION (OR SEARCHED LOCATION)

double dLat = 0;
int tmpDistance = 0;
id returnId = nil;

id tmp = [featuredResults objectAtIndex:i];
CLLocation *newLocation2 = [[CLLocation alloc] 
    initWithLatitude:[[tmp valueForKey:@"lat"] doubleValue]  
    longitude:[[tmp valueForKey:@"lng"] doubleValue]];

dLat = [newLocation distanceFromLocation:newLocation2];

Значение, которое я получаю для dLat, равно 330707027, что неверно. Кто-нибудь знает, где я могу пойти не так? Спасибо!

1 Ответ

0 голосов
/ 14 декабря 2010

Этот тестовый код, основанный на указанном в вопросе, дает около 33 669 метров:

CLLocation *newLocation = [[CLLocation alloc] 
    initWithLatitude:44.56697840 longitude:-69.55759810];

CLLocation *newLocation2 = [[CLLocation alloc] 
    initWithLatitude:44.31400400 longitude:-69.79157000];

double dLat = [newLocation distanceFromLocation:newLocation2];

NSLog(@"distance = %f meters", dLat);

[newLocation release];
[newLocation2 release];

Выход:

расстояние = 33669,002406 метров

Возможно, вы регистрируете dLat, используя что-то отличное от %f?

...