distanceFromLocation возвращает огромное значение, не перемещая малейший бит - PullRequest
0 голосов
/ 06 декабря 2011

Я пытаюсь вызвать функцию, если пройденное расстояние с момента последней проверки> 30 м.Основываясь на описании класса CLLocationDistance, возвращаемое значение находится в м.

Я использую этот код:

[locationManager startUpdatingLocation];
if (!startingLocation)
    startingLocation = locationManager.location;
//   NSLog(@"Latitude:%f Longitude:%f", startingLocation.coordinate.latitude, startingLocation.coordinate.longitude);

    updatedLocation = locationManager.location;
CLLocationDistance distance = [updatedLocation distanceFromLocation:startingLocation];
if (distance > 30) {
    NSLog(@"%f",distance);
    NSLog(@"Latitude:%f Longitude:%f", updatedLocation.coordinate.latitude, updatedLocation.coordinate.longitude);
    [self stop];

Вывод на консоль с NSLog возвращает 7946754.993111, и я даже не трогал телефон,Любые предложения приветствуются!

Ответы [ 2 ]

2 голосов
/ 06 декабря 2011

8000 км между двумя точками? Бьюсь об заклад, первая точка - 0, 0, а оттуда ты на расстоянии около 8000 км, верно?

В любом случае обязательно используйте только действительные местоположения, проверив, чтобы горизонтальная точность была> = 0, прежде чем использовать координаты местоположения. Неверные местоположения имеют отрицательную точность по горизонтали.

Кроме того, вам, вероятно, следует отбросить все кэшированные местоположения, проверив возраст данных местоположения и не использовать их, если их возраст превышает несколько секунд.

См. Пример кода здесь , который выполняет эти проверки.

Еще одна вещь, на которую следует обратить внимание, это то, что вы можете получить местоположения, которые показывают ложное движение из-за изменений в точности. Подробнее см. в этом ответе .

0 голосов
/ 06 декабря 2011

Возможно ли, что, поскольку вы звоните startUpdatingLocation, затем получаете это местоположение, а затем сразу же запрашиваете обновление, которое все еще пытается выяснить, где именно оно находится, отсюда и большое движение.

Попробуйте вызвать startUpdatingLocation из другого метода, затем реализуйте метод делегата из CLLocationManager locationManager:didUpdateToLocation:fromLocation, чтобы получить движение.

...