def coords_to_info(lat, lng):
#check in which polygon the point lies
return polyName
为了检查点是否在多边形内部,我尝试了两个不同的函数:
def point_in_poly(x,y,poly):
"""
function to check if a point is in a 2D polygon
"""
n = len(poly)
inside = False
p1x,p1y = poly[0]
for i in range(n+1):
p2x,p2y = poly[i % n]
if y > min(p1y,p2y):
if y <= max(p1y,p2y):
if x <= max(p1x,p2x):
if p1y != p2y:
xints = (y-p1y)*(p2x-p1x)/(p2y-p1y)+p1x
if p1x == p2x or x <= xints:
inside = not inside
p1x,p1y = p2x,p2y
return inside
print point_in_poly(lat, lng, lBoundary)
和
from shapely.geometry import Point
from shapely.geometry.polygon import Polygon
coordPoint = Point(lat, lng)
coordPolygon = Polygon(lBoundary)
print coordPolygon.contains(coordPoint)
lBoundary是一个由元组组成的列表,它是封闭的(第一个和最后一个点相等):[(a,b), (c,d), (e,f), (a,b)]
这两种方法在测试数据和小凸多边形上都能完美运行,但对大多数真实数据多边形返回错误。
我已经使用模拟数据广泛测试了这两个函数(我测试了所有这些类型的多边形),但当我将其应用于我的大多数真实数据时,这些函数就停止工作了。
是否有任何因素会影响这些函数产生假阴性,例如多边形大小、坐标的小数位数或其他类似的琐事?