Divide irregular polygon into equal areas by angle

4538
7
Jump to solution
01-15-2018 01:20 PM
Highlighted
New Contributor III

I have an irregular polygon feature that I need to split into x number of equal area features. I need to be able to have the divisions be something other than north/south or east/west.

Example:

The black polygon in this case needs to be divided into 3 equal area polygons. I manually split these, but I need it to be more precise and the splits need to be aligned in parallel to each other. They need to be able to be calculated with an angle/rotation specification, and not just north/south or east/west.

Irregular polygon of equal areas

What I have tried:

It really blows my mind that this isn't a tool that exists/is readily available.

Any advice/suggestions is welcomed. Or, if you really want to be a super hero, edit the code so I can specify an angle for rotation. Thank you very much!

Reply
0 Kudos
1 Solution

Accepted Solutions
Highlighted
MVP Esteemed Contributor

for the hero that wants to take it on, it is far easier to rotate polygon by the desired rotation angle, proceed with Alex's implementation, then rotate result back.  

This will work with projected coordinates.  Take the polygon, subtract the centroid value from the polygon points (ie a translation to the origin).  Rotate by your desired angle (rotation).  Do the work (rotate the reverse) and translate back to the original location.

View solution in original post

7 Replies
Highlighted
MVP Esteemed Contributor

for the hero that wants to take it on, it is far easier to rotate polygon by the desired rotation angle, proceed with Alex's implementation, then rotate result back.  

This will work with projected coordinates.  Take the polygon, subtract the centroid value from the polygon points (ie a translation to the origin).  Rotate by your desired angle (rotation).  Do the work (rotate the reverse) and translate back to the original location.

View solution in original post

Highlighted
New Contributor III

Thank you so much, Dan!

I don't know why it didn't occur to me to manually rotate it, run the tool, and then rotate it back. That works perfectly. You're the hero I needed but not the one I deserved.

Highlighted
MVP Honored Contributor

I'd stick to editing Alex Tereshenko's code.

The main thing to edit is the template line coordinates used for cutting the polygons:

pnt_arr.add(arcpy.Point(x_min, y_max)) # top left
pnt_arr.add(arcpy.Point(x_min, y_min)) # bottom left‍‍‍‍

Suppose you want a cut line 45 degrees from NW to SE. You'd change the coordinates to:

x_diff = math.tan(math.radians(45)) * (y_max - y_min)
pnt_arr.add(arcpy.Point(x_min - x_diff, y_max))
pnt_arr.add(arcpy.Point(x_min, y_min))‍‍‍‍‍‍

... then keep trying cutting as you go right. Like picture below (maybe makes it more confusing...).

Unfortunately, I don't believe there's any way to avoid coding on this one. You'd also have to do some extra coding to accommodate all possible line angles. 

Highlighted
New Contributor III

The picture does indeed make it better! Thanks for your thinking on this. I'll play around editing the code with this soon!

Reply
0 Kudos
Highlighted
Esri Notable Contributor

For anybody who runs across this thread and is looking for this functionality, please see Split irregular polygons into equal parts‌, add your vote and any specific user requirements in the comments.

This idea is Under Consideration for inclusion as a geoprocessing tool in ArcGIS Pro.

Highlighted
New Contributor III

This is great to know! Thanks, Kory. Definitely looking forward to having this integrated.

Highlighted
Esri Contributor

ArcGIS Pro now has this tool to divide polygons into equal areas:

Subdivide Polygon—Data Management toolbox | ArcGIS Desktop 

Reply
0 Kudos