我想检测给定的地理坐标是否落入要跟踪的路线。 我正在为此匀称使用,但是与地理坐标似乎无法正确地工作。 你能在这里解释我在做什么错
使用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
答案 0 :(得分:1)
使用buffer
方法进行一点拨号。如果可以允许更多的容忍度,请增加数字0.01
。
line.buffer(0.01).contains(Point(18.541933099999998,73.8022613))