Интерпретация склэрн хаверсин выводит в километрах - PullRequest
0 голосов
/ 03 июля 2019

Я не могу понять, как интерпретировать выходные данные реализации haversine в sklearn (версия 20.2)

В документации сказано: «Обратите внимание, что для метрики расстояния haversine требуются данные в виде [latitude,долгота] и оба входа и выхода в единицах радиан. ", поэтому я должен быть в состоянии преобразовать в км умножение на 6371 (большое расстояние приблизительное для радиуса).

Функциональный расчет расстояния из двух точек будетследующим образом:

def distance(origin, destination):
    lat1, lon1 = origin
    lat2, lon2 = destination
    radius = 6371 # km

    dlat = math.radians(lat2-lat1)
    dlon = math.radians(lon2-lon1)
    a = math.sin(dlat/2) * math.sin(dlat/2) + math.cos(math.radians(lat1)) \
        * math.cos(math.radians(lat2)) * math.sin(dlon/2) * math.sin(dlon/2)
    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
    d = radius * c

    return d

distance([32.027240,-81.093190],[41.981876,-87.969982])
1263.103504537151

Это правильное расстояние.

Использование реализации BallTree:

from sklearn.neighbors import BallTree
test_points = [[32.027240,41.981876],[-81.093190,-87.969982]]
tree = BallTree(test_points,metric = 'haversine')
results = tree.query_radius(test_points,r = 10,return_distance  = True)

results[1]
array([array([0.        , 1.53274271]), array([1.53274271, 0.        ])],
      dtype=object)

То же самое для реализации distanceMetric:

dist = DistanceMetric.get_metric('haversine')
dist.pairwise([[32.027240,41.981876],[-81.093190,-87.969982]])
array([[0.        , 1.53274271],
       [1.53274271, 0.        ]])

Я также попытался изменить порядок, если он не должен был вводиться как [[lat1, lat2], [lon1, lon2]], а также не получил результаты, которые я могу интерпретировать.

Кто-нибудь знает, как я могу получить расстояние в км от двух координат, используя реализации sklearn?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...