2013-06-16 7 views
0

Я прочитал this question и реализовал принятый ответ в Python (см. Ниже). Он работает в принципе, но результаты постоянно примерно на 30% выше, чем ожидалось (Чешская Республика) - это ожидаемая точность этого алгоритма?Как вычислить расстояние двух географических координат?

Для проверки алгоритма я использовал BoundingBox, чтобы получить рамку с известным диагональным расстоянием (здание, два города) и использовать выходные координаты в качестве входных данных для «моего» алгоритма.

Где проблема?

  • моя реализация?
  • Сам алгоритм?
  • Python?
  • тестирование?

Моя реализация:

R= 6371 #km 
dLat = math.radians(lat2-lat1) 
dLon = math.radians(lon2-lon1) 
lat1 = math.radians(lat1) 
lat2 = math.radians(lat2) 

a= math.sin(dLat/2)*math.sin(dLat/2) + math.sin(dLon/2) * math.sin(dLon/2) * math.cos(lat1) * math.cos(lat2) 
c= 2 * math.atan2(math.sqrt(a), math.sqrt(1-a)) 
d = R * c; 
return d 
+0

Почему вы опубликовали новый вопрос? http://stackoverflow.com/questions/17134437/how-to-calculate-distance-between-two-geographic-coordinates –

+0

@AshwiniChaudhary Это должно было быть единственное. Первый из них был отправлен ошибочно нажатой клавишей, когда он еще не был написан. – Lukas

+0

Вы всегда можете отредактировать свой вопрос - или удалить его, как вы это сделали. Вы даже можете удалить вопрос, пока вы исправляете преждевременную публикацию, а затем удаляете его. (По крайней мере, я полагаю, вы можете, вы можете сделать это для ответов наверняка.) –

ответ

3

Нет, алгоритм не должен иметь погрешность этой величины. Ссылка указывает, что вы можете ожидать около 0.3% ошибки.

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

Вот некоторые тестирования данные из site with the distance between and coordinates of Prague and Brno в десятичном формате градусов:

lat_prague, long_prague = 50.0833, 14.4667 
lat_brno, long_brno = 49.2000, 16.6333 
expected_km = 184.21 

Вот результаты тестирования:

>>> def calc(lat1,lon1, lat2,lon2): 
# ... your code ... 

>>> calc(lat_prague,long_prague,lat_brno,long_brno) 
184.34019283649852 
>>> calc(lat_prague,long_prague,lat_brno,long_brno)/expected_km 
1.0007067631317437 

Грубое предположение: для мест в Чехии, ошибка вы Получается, что в правильном порядке величина смещения превышает смещение широты и долготы:

>>> calc(long_prague,lat_prague,long_brno,lat_brno) 
258.8286271447481 
>>> calc(long_prague,lat_prague,long_brno,lat_brno)/expected_km 
1.405073704710646 

Это, по-видимому, known confusion. Координата, заданная только как пара чисел, является неоднозначной (например: и BoundingBox, и ссылка для используемого расстояния (long, lat), а алгоритм использует порядок lat, long). Когда вы сталкиваетесь с двусмысленным форматом с незнакомым источником данных без официальной спецификации, вам просто нужно проверить работоспособность. Сайты, подобные Wikipedia, расскажут вам однозначно, что Прага находится в «50 ° 05'N 14 ° 25'E», то есть очень грубо, примерно на 50 градусов по широте (с севера на юг) и на 14 градусов долготы (с востока на запад).

+0

Действительно, порядок координат был смешанным. – Lukas