Python 为什么shapely无法检测给定的地理坐标点是否在路线中

Python 为什么shapely无法检测给定的地理坐标点是否在路线中,python,google-maps,google-maps-api-3,geometry,shapely,Python,Google Maps,Google Maps Api 3,Geometry,Shapely,我想检测给定的地理坐标是否落入我要追踪的路线。 我用shapely来做这件事,但这似乎与地理坐标不符。 你能解释一下我做错了什么吗 使用snap_to_road google maps API,我捕捉路线以获取路线沿线的多个GPS点,然后从中创建线串(坐标),并使用LineString.contains方法检查给定点是否落在线路中 >>> from shapely.geometry import * >>> coords = [(18.541658213425

我想检测给定的地理坐标是否落入我要追踪的路线。 我用shapely来做这件事,但这似乎与地理坐标不符。 你能解释一下我做错了什么吗

使用snap_to_road google maps API,我捕捉路线以获取路线沿线的多个GPS点,然后从中创建线串(坐标),并使用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
导入urllib、json、请求
请求=”https://roads.googleapis.com/v1/snapToRoads?path=18.5416582,73.802487|18.5462013,73.8025098|18.5536253,73.80331540000002\
&插值=真&关键点=

使用
buffer
方法拨号一点点。如果可以允许更大的容差,请增加数字
0.01

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

谢谢。它成功了。你能验证一下这是否是做我正在做的事情的正确方法吗。
LineString
的面积等于
0
。你的情况下存在浮点精度问题,所以你只需使用缓冲区将线路拨到“Polygon”上。这样
contains
问题就解决了。参加聚会有点晚,但是:我使用foo.distance(bar)