Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm looking for a tool or algorithm to detect concave polygons and split them into convex polygons. Like explained in the picture, the blue polygon is split into A and B polygons

I'm using Arcpy under Arcgis 10.1

split polygons

share|improve this question
Perhaps you could elaborate on why you are doing this? After all, (a) detection is easy: a concave polygon will have less area than its convex hull; and (b) any triangulation of a polygon automatically splits it into convex polygons, because all triangles are convex. This shows you have some flexibility in choosing among the many possible solutions. – whuber Oct 5 '12 at 12:42
This toolset will enable you to see what Bill is talking about… convert the polygon to points then run the Delaunay option – Dan Patterson Oct 5 '12 at 14:02
There is an answer to this over on Stack Overflow: The algorithms described shouldn't be too difficult to write using arcpy. – Snorfalorpagus Dec 23 '12 at 16:47
@snorf That appears to answer a slightly, but importantly, different question. The solution apparently involves a combination of "polygons" and "holes", which is not what is usually meant by "splitting". At the least, that answer needs further elaboration to be useful here. (BTW, your answer was changed to a comment because cross-references to other solutions elsewhere on the Web, without any additional explanation, are not considered answers here on SE.) – whuber Dec 23 '12 at 21:58
Judging from the comments here and no answers arising, my recommendation would be to edit your question to incorporate that feedback and consider offering a bounty. – PolyGeo Jul 25 '13 at 2:23

here are a few steps to identify the vertices from the concave parts :

with parcel: minimum bounding geometry (hull) -> parcelHull

with parcel: FeatureVerticesToPoint -> parcelPoints

with parcelHull : FeatureVerticesToPoint -> parcelHullPoints

with parcelPoint and parcelHullPoint : symmetrical Diff -> concavePoints

based on those points, you can either draw the bissectrice to cut your polygon (bearing distance to line), select the edges of the Voronoï triangle that intersect your point but are not sharing a segment with your parcel boundary (select by location after splitting triangle lines at vertices), select the vertex on the opposite site and make a line (points to line), select the closest point on the opposite edge and make a line (points to line)...

At the end, use your preferred lines and the original parcels with "feature to polygon" to split the polygons.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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