Зачем правильно определять, находится ли данная географическая точка на маршруте - PullRequest
0 голосов
/ 31 января 2019

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

Используя API Google Maps snap_to_road, я привязываю маршрут, чтобы получить несколько точек GPS вдоль маршрута, затем я создаю LineString (координаты) из него и использую метод LineString.containsчтобы проверить, попадает ли данная точка в линию

>>> from shapely.geometry import *
>>> coords = [(18.541658213425041,73.802487036668737),(18.541715999999997,73.8024635),(18.5417578,73.8024447),(18.5417578,73.8024447),(18.5417748,73.802437),(18.541841700000003,73.8023838),(18.541933099999998,73.8022613),(18.542033699999998,73.8021515),(18.542150000000003,73.802104)]
>>> line = LineString(coords)
>>> line.contains(Point(18.541933099999998,73.8022613))
True
>>> line.contains(Point(18.542077799999994,73.8021211))
False

Код для получения нескольких точек по маршруту:

import urllib,json,requests 
request = "https://roads.googleapis.com/v1/snapToRoads?path=18.5416582,73.802487|18.5462013,73.8025098|18.5536253,73.80331540000002\
        &interpolate=true&key=<API KEY>"

response = urllib.urlopen(request).read() 
print response

Согласно картам Google эта (18.542077799999994,73.8021211) точка является частьюмаршрута эти координаты следующие.Тогда почему не удалось обнаружить это?Нужно ли что-то делать с 2D и 3D геометрией.

Редактировать: Следующие два сайта помогут вам измерить значение буфера в метрах

http://www.longitudestore.com/how-big-is-one-gps-degree.html https://www.rapidtables.com/convert/number/degrees-to-degrees-minutes-seconds.html

1 Ответ

0 голосов
/ 31 января 2019

Используйте метод buffer, чтобы набрать немного.Увеличьте число 0.01, если вы можете допустить большее отклонение.

line.buffer(0.01).contains(Point(18.541933099999998,73.8022613))
...