使用 shapely 指向多边形?
Point in polygon using shapely?
我是 运行 以下脚本,我认为应该为多边形中的点返回 TRUE,但它返回 FALSE。
from shapely import geometry
polygon = [(-1571236.8349707182, 8989180.222117377), (1599362.9654156454, 8924317.946336618), (-1653179.0745812152, 8922145.163675062), (-1626237.6614402141, 8986445.107619021)]
Point_X = -1627875.474
Point_Y = 8955472.968
line = geometry.LineString(polygon)
point = geometry.Point(Point_X, Point_Y)
print(line.contains(point))
当我在 Matlab 中绘制多边形和点时,我得到以下形状
from matplotlib import pylab as plt
poly = [[-1571236.8349707182, 8989180.222117377],
[1599362.9654156454, 8924317.946336618],
[-1653179.0745812152, 8922145.163675062],
[-1626237.6614402141, 8986445.107619021]]
x = [point[0] for point in poly]
y = [point[1] for point in poly]
p1 = [-1627875.474, 8955472.968]
p2 = [-1627875.474, 8955472.968]
plt.plot(x,y,p1[0],p1[1],'*r',p2[0],p2[1],'*b')
plt.show()
知道为什么 shapely 脚本返回 FALSE 吗?
你测试的是你的点是否在对象LineString
上。
如果要测试该点是否在多边形中,则必须使用 class Polygon
的 contains
方法
from shapely import geometry
polygon = [(-1571236.8349707182, 8989180.222117377), (1599362.9654156454, 8924317.946336618), (-1653179.0745812152, 8922145.163675062), (-1626237.6614402141, 8986445.107619021)]
Point_X = -1627875.474
Point_Y = 8955472.968
line = geometry.LineString(polygon)
point = geometry.Point(Point_X, Point_Y)
polygon = geometry.Polygon(line)
print(polygon.contains(point))
输出
True
我是 运行 以下脚本,我认为应该为多边形中的点返回 TRUE,但它返回 FALSE。
from shapely import geometry
polygon = [(-1571236.8349707182, 8989180.222117377), (1599362.9654156454, 8924317.946336618), (-1653179.0745812152, 8922145.163675062), (-1626237.6614402141, 8986445.107619021)]
Point_X = -1627875.474
Point_Y = 8955472.968
line = geometry.LineString(polygon)
point = geometry.Point(Point_X, Point_Y)
print(line.contains(point))
当我在 Matlab 中绘制多边形和点时,我得到以下形状
from matplotlib import pylab as plt
poly = [[-1571236.8349707182, 8989180.222117377],
[1599362.9654156454, 8924317.946336618],
[-1653179.0745812152, 8922145.163675062],
[-1626237.6614402141, 8986445.107619021]]
x = [point[0] for point in poly]
y = [point[1] for point in poly]
p1 = [-1627875.474, 8955472.968]
p2 = [-1627875.474, 8955472.968]
plt.plot(x,y,p1[0],p1[1],'*r',p2[0],p2[1],'*b')
plt.show()
知道为什么 shapely 脚本返回 FALSE 吗?
你测试的是你的点是否在对象LineString
上。
如果要测试该点是否在多边形中,则必须使用 class Polygon
contains
方法
from shapely import geometry
polygon = [(-1571236.8349707182, 8989180.222117377), (1599362.9654156454, 8924317.946336618), (-1653179.0745812152, 8922145.163675062), (-1626237.6614402141, 8986445.107619021)]
Point_X = -1627875.474
Point_Y = 8955472.968
line = geometry.LineString(polygon)
point = geometry.Point(Point_X, Point_Y)
polygon = geometry.Polygon(line)
print(polygon.contains(point))
输出
True