为什么整形地迷惑以检测给定的地理坐标点是否在路线中

时间:2019-01-31 11:22:37

标签: python google-maps google-maps-api-3 geometry shapely

我想检测给定的地理坐标是否落入要跟踪的路线。 我正在为此匀称使用,但是与地理坐标似乎无法正确地工作。 你能在这里解释我在做什么错

使用snap_to_road google maps API,我捕捉路线以沿路线获取多个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

根据谷歌地图,此(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 :(得分:1)

使用buffer方法进行一点拨号。如果可以允许更多的容忍度,请增加数字0.01

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