Почему манхэттенское расстояние с формулой гаверсинуса для геолокации неточно? [Питон]

Я хочу вычислить «MANHATTAN DISTANCE», также называемую «CITY BLOCK DISTANCE» среди пар координат с LAT, LNG.

После этого сообщения Манхэттенское расстояние для двух геолокаций я вычислил расстояние, используя формулу гаверсинуса:

source = (45.070060, 7.663708)
target = (45.068250, 7.663492)

введите здесь описание изображения

Это мой расчет:

    from math import radians, sin, asin, sqrt, atan2

    # convert decimal degrees to radians
    lat1, lon1, lat2, lon2 = map(radians, [source[0], source[1], target[0], target[1]])

    #haversine formula for delta_lat
    dlat = lat2 - lat1
    a = sin(dlat / 2) ** 2
    c = 2 * atan2(sqrt(a), sqrt(1-a)))
    r = 6371
    lat_d = c * r

    # haversine formula for delta_lon
    dlon = lon2 - lon1
    a = sin(dlon / 2) ** 2
    c = 2 * atan2(sqrt(a), sqrt(1-a))
    r = 6371
    lon_d = c * r


    print lat_d + lon_d

Проблема в том, что мой результат 225 м, а Google Maps говорит 270 м.

Попытка снова вычислить расстояние между

source = (45.070060, 7.663708)
target = (45.072800, 7.665540)

введите здесь описание изображения

результат, который я получил, составляет 508 м, в то время как Google Maps говорит о 350 м.

Буду признателен, если кто-нибудь поможет мне понять, что здесь не так и как улучшить это решение, которое далеко не приемлемо. Благодарю вас!


person piezzoritro    schedule 29.04.2017    source источник


Ответы (1)


Я, наверное, понял сам, ответ таков: если вы посмотрите на эти картинки, которые такие же, как и опубликованные выше в исходном вопросе, вы можете понять, что метод гаверсинуса, который я реализовал, вычисляет расстояние как КРАСНУЮ ЛИНИЮ в изображение. По этой причине в первом случае я получаю 225 м вместо 270 м (меньше, потому что красная линия является гипотенузой треугольника), а во втором случае я получаю 508 м вместо 350 (больше, потому что сумма катетов треугольника). Следовательно, способ решить эту проблему должен ПОВЕРНУТЬ КАРТУ ГОРОДА ПРОТИВ ЧАСОВОЙ СТРЕЛКИ, чтобы выровнять СИНЮЮ ПУНКТИРНУЮ линию с ОСИ Y декартовой ссылки.

Любое предложение будет оценено. Спасибо введите здесь описание изображениявведите здесь описание изображения

person piezzoritro    schedule 29.04.2017
comment
вы должны знать, каков угол городских кварталов по отношению к северу, и добавить изменение калькулятора манхэттенского расстояния, чтобы учесть любое произвольное вращение. - person Hacky; 26.01.2018