2

I am curious how one could create a centroid for an irregularly shaped polygon in ArcGIS Pro, that lies within that polygon's boundaries, with the concept of centroid in this case meaning a point farthest from the edges of a polygon (i.e. the most centrally located). For example, with a polygon of this shape in the image below, what steps or tools could I use to create a point that lies within that polygon and is as far as possible from the edges of that polygon?

enter image description here

5
  • gis.stackexchange.com/questions/147790/…
    – FelixIP
    Commented Feb 27, 2021 at 4:32
  • 1
    The point you are looking for is the "pole of inaccessibility".
    – Llaves
    Commented Feb 27, 2021 at 5:30
  • 1
    This is still a topic of active research in academia. A google on "thinnest line inside polygon" turned up a paper from 2020 with a literature review covering four common algorithms in the first five results.
    – Vince
    Commented Feb 27, 2021 at 12:03
  • @Vince It's technically an unsolvable problem, right? Commented Feb 28, 2021 at 0:55
  • Well, certainly NP-Hard at least (Non-deterministic Polynomial-time). It's solvable through iterative means to a certain threshold, but the same resources could be used to mine Bitcoins.
    – Vince
    Commented Feb 28, 2021 at 2:23

2 Answers 2

2

What steps or tools could I use to create a point that lies within that polygon and is as far as possible from the edges of that polygon?

I can think of two workarounds but a better solution likely exists.

  1. Run a Euclidean Distance from the Polygon at 1 m or less resolution (convert to a line is likely needed). Then Extract by Mask the euclidean distance raster with the polygon. Then just convert the raster to point (raster to point). The highest value is the farthest.

  2. Create a fishnet of points in the polygon every 1 m. Clip the point to the polygon. Run the near tool or a spatial join to get the distances to the feature. Use the point with the highest value.

3
  • You could add a Drunkard's Walk component to #2, copying the closest N points, and shifting them random*sqrt(2)*regular_interval in a random direction, and keeping the N closest again for a few passes.
    – Vince
    Commented Feb 27, 2021 at 11:58
  • I also found the fishnet workaround to be the best option for me currently - but I am curious to see if others will propose any more elegant solutions. Certainly this becomes a bit more of a hassle when working with a shapefile consisting of lots of different oddly shaped polygons, but works well for one and could be repeated as needed.
    – Brewkeeper
    Commented Feb 27, 2021 at 19:06
  • @Brewkeeper Post if you find a more elegant solution that can be practically solved in Pro. I actually think the fishnet may work very well for hundreds of polygons are you use the Near ID and the Max Distance to joining back to the polygon. Commented Feb 28, 2021 at 0:56
0

In response to @If you do not know- just GIS 's comment - I am posting here the strategy that I ultimately used to solve this problem for a shapefile containing many different oddly shaped polygons in the hopes that maybe it will be of help or others can further improve upon this process.

  1. Used Create Fishnet tool to spread a grid of 1 m x 1 m points over all polygons. This was a computationally intensive process since the polygons were spread out, but it worked after sometime. May not be the best strategy for all situations
  2. Selected only fishnet points within the polygons, and then exported these to a new layer file.
  3. Converted Polygons to Polylines.
  4. Generate a near table (under proximity tools) for all the points inside plantations to the nearest polygon line. Make sure you select the option to only give the distance to the nearest feature.
  5. Take the near table that was generated and then use select by attributes to select all points that were closest to the first polygon (Near_FID = 1).
  6. Then in the attribute table sort only the selected features (lil icon of all blue rows) descending by distance
  7. Take a notepad and write down the Object_ID of that point that is furthest from the polygon 1 lines
  8. Repeat steps 5 – 7 for each of the polygons
  9. Use select by attributes on the file with all fishnet points inside polygons and type in the Object ID for each of the points you wrote down. You can use the apply and “add to current selection” option to do this without having to close and reopen the window
  10. Export those selected points (all the center-most points) to their own feature class.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.