From comments at Determining if point on boundary using shapely? I am creating an ArcPy equivalent Q&A to that one which was answered for shapely. Quoting the asker of the original question:
I'm new to Python, and I want to test if a certain point lies ON the (boundary) of a polygon - not inside, not outside, just if it's on the boundary. The points and polygon already defined
polygon = [(3, 2), (5, 1), (7, 2), (8, 6), (9, 7), (11, 6), (10, 4), (12, 2), (15, 2), (16, 5), (19, 7), (18, 11), (14, 12), (11, 9), (5, 9), (2, 6)]
Point_X = 14
Point_Y = 12
this point should be a boundary. How can I do that?
1 Answer 1
As commented by @Vince on the original question:
Due to the imprecision associated with floating-point values, far fewer points which are "on" a line will actually be reported as such in real-world situations. If you want to test this, your code needs to use ArcPy functions to assemble
Polygon
andPointGeometry
objects, so that you can cast the Polygon to a line (usingGeometry.boundary()
) and test for point intersection withGeometry.contains()
. Be sure to specify an appropriateSpatialReference
.
-
1I'd used distance to method. That way a tolerance can be introduced.FelixIP– FelixIP2018年01月16日 05:05:49 +00:00Commented Jan 16, 2018 at 5:05
-
I second @FelixIP, I've always used within a distance for points on lines. You could use Near/Generate Near Table if you have an advanced license but I find it much easier to buffer the boundary then select the points that intersect the buffer (Geometry.boundary().buffer(Some_very_small_distance))Michael Stimson– Michael Stimson2018年01月16日 05:33:49 +00:00Commented Jan 16, 2018 at 5:33