2013-11-10 6 views
0

Я пытаюсь написать функцию Python, которая определяет, находится ли пара географических точек в радиусе 5 метров друг от друга. У меня есть пара координат вроде: 13.09073, -86.3560933 и 13.09237, -86.3576067. Я пробовал использовать функцию Haversine, но я не уверен, что получаю правильное значение.Различия между двумя точками

Эта функция до сих пор:

from math import sin, cos, pow, atan2, sqrt 


def haversine(pos1, pos2): 
    lat1 = float(pos1['lat']) 
    long1 = float(pos1['long']) 
    lat2 = float(pos2['lat']) 
    long2 = float(pos2['long']) 
    d_lat = (lat2 - lat1) 
    d_long = (long2 - long1) 

    a = pow(
     sin(d_lat/2), 2) + cos(lat1) * cos(lat2) * pow(sin(d_long/2), 2) 
    c = 2 * atan2(sqrt(a), sqrt(1 - a)) 
    km = 6367 * c 
    print 'km %f' % km 
    print 'mts %f' % (km * 1000) 


print haversine(
    {'lat': 0.0, 'long': 0.0}, {'lat': 0.0, 'long': 0.0000007852992}) 

Это странное число должно быть «5 метров» расстояния. Я удаляю функцию преобразования degree_to_rad, так как я думаю, что мой формат уже находится на радианах.

+3

Давайте посмотрим код! – dabillox

+1

Если вы не уверены, что получаете правильное значение, отправьте примеры или код. –

+0

Возможный дубликат [Как рассчитать расстояние между двумя точками долготы широты?] (Http://stackoverflow.com/questions/27928/how-do-i-calculate-distance-between-two-latitude-longitude-points) – oefe

ответ

2

Вы не сможете проверить «5 метров в координатах», так как разница в значениях lat/lon для расстояний 5 м будет меняться в зависимости от положения на поверхности сферы.

Вы можете попробовать протестировать свой выход по значениям от an existing script. Было бы не очень удобно, если бы латы и лотки хранились в радианах, я бы определенно это проверял.

Там, кажется, не будет ничего неладно с расчетами, но вы, вероятно, значит:

return km 

в конце функции haversine, так что print haversine(...) фактический делает что-то значимое.

+0

Какой формат использует Google Maps для своих ссылок ?. Это тестовая ссылка: https://www.google.com/maps/preview#!data=!1m4!1m3!1d1796!2d-84.0997365!3d9.9330108!2m1!1e3&fid=7. Я вижу -84.0997365 и 9.9330108. Они по степеням? – chachan

+0

Это определенно градусы. – ratatoskr

+0

Хорошо, я добавлю преобразование degree_to_rad обратно в функцию. Спасибо! – chachan

Смежные вопросы