问题
I am running the following script which I believe should be returning TRUE for the point being in the polygon but it is returning 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))
When I plot the polygon and point in Matlab I get the following shape
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()
Any idea why the shapely script is returning FALSE?
回答1:
What you are testing is whether your point is on the object LineString.
If you want to test that the point is in the polygon you must use the contains methods of class Polygon
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))
ouput
True
see https://shapely.readthedocs.io/en/latest/manual.html
来源:https://stackoverflow.com/questions/52281055/point-in-polygon-using-shapely