CLLocation distanceFromLocation - PullRequest
       31

CLLocation distanceFromLocation

4 голосов
/ 04 марта 2011

Я использую CLLocation для определения расстояния от текущего местоположения пользователя и аннотации. Однако я просто хотел знать, будет ли это правильно. В настоящее время я использую iPhone Simulator для этого и, согласно MKMapView, iPhone Simulator находится здесь:

Lat: 0 Long: -1067024384

Позиция аннотации:

workingCoordinate.latitude = 40.763856;
workingCoordinate.longitude = -73.973034;

Однако, если вы посмотрите на Google Maps, вы узнаете, как близко эти расстояния, но так далеко друг от друга, согласно CLLocation. Я использую следующий код для определения расстояния между ними.

CLLocation *loc = [[CLLocation alloc] initWithLatitude:annotation.coordinate.latitude longitude:annotation.coordinate.longitude];
CLLocation *loc2 = [[CLLocation alloc] initWithLatitude:self.mapView.userLocation.coordinate.latitude longitude:self.mapView.userLocation.coordinate.longitude];
CLLocationDistance dist = [loc distanceFromLocation:loc2];
int distance = dist
NSLog(@"%i", distance);

Дистанция NSLogged составляет 12769908. Я считаю, что это неверно, и поэтому должна быть проблема с моим кодом.

Если есть, пожалуйста, укажите на это!

Ответы [ 2 ]

9 голосов
/ 05 марта 2011

У вас есть две вредные привычки.

  1. Вы не должны зависеть от симулятора в ситуациях, когда требуется статус аппаратного цензора.Особенно, если вы хотите правильный тест .
  2. Вы неправильно обрабатываете типов .Таким образом, вы не можете проверить значения правильно.Какова долгота -1067024384?Значение долготы - градусы.Это означает, что допустимый диапазон ограничен -90,0 ~ +90,0 по определению долготы.

Ваше значение долготы находится вне диапазона.Это означает один из них.Вы напечатали значение неправильно или реальное значение было неверным.Симулятор может напечатать неверное значение.Или вы напечатали значение с неправильным методом.Вы должны попробовать:

Тест на реальном устройстве с реальными аппаратными цензорами.

Если после этого плохой результат продолжается,

Обзор ALL кода вашего приложения.Специально для печати, обработки ценностей.Убедитесь, что вы используете правильные типы и кастинги в> каждой ситуации.Поскольку вы, возможно, выполняли глючную операцию где-то привычно .

А также, я рекомендую проверить все промежуточные значения, как это.

CLLocationCoordinate2D annocoord = annotation.coordinate;
CLLocationCoordinate2D usercoord = self.mapView.userLocation.coordinate;

NSLog(@"ANNO  = %f, %f", annocoord.latitude, annocoord.longitude);
NSLog(@"USER = %f, %f", usercoord.latitude, usercoord.longitude);

CLLocation *loc = [[CLLocation alloc] initWithLatitude:annotation.coordinate.latitude longitude:annotation.coordinate.longitude];
CLLocation *loc2 = [[CLLocation alloc] initWithLatitude:self.mapView.userLocation.coordinate.latitude longitude:self.mapView.userLocation.coordinate.longitude];

NSLog(@"LOC  = %f, %f", loc.coordinate.latitude,  loc.coordinate.longitude);
NSLog(@"LOC2 = %f, %f", loc2.coordinate.latitude, loc2.coordinate.longitude);

CLLocationDistance dist = [loc distanceFromLocation:loc2];

NSLog(@"DIST: %f", dist); // Wrong formatting may show wrong value!
1 голос
/ 04 марта 2011

Попробуйте @ "% f" и не используйте его таким образом.

В CLLocation.h

typedef double CLLocationDistance;
...