[GIS] How to align edges of overlapping polygons in the middle line

alignmentarcgis-desktopgeometrypolygontopology

The problem

Here are two polygons that overlap.

enter image description here

My ultimate goal is to reshape the grassland (green poly) and the reservoir (blue poly) so they share the edge somewhere in the middle of their intersection. It is acceptable if there would be a certain gap between the borders as long as they are not overlapping.

enter image description here

So, the area marked as W on the figure would be merged with the water body (blue poly to the left) and the area marked as G would be merged with the grassland (green poly to the right).

I have drawn the red line manually to illustrate the imaginary central line that splits the shared area into two equal (or roughly equal) pieces. The end result would look like this then (after merging):

enter image description here

Each polygon's shape was increased and they "are meeting in the middle".

I need to be able to do this analysis on any pair of overlapping polygons in an automated fashion. I am open to any existing solution. I am able to pull my data from an Esri geodatabase into other formats and do the processing somewhere else. If there are hints on the code libraries or tools for this kind of problem, I would be happy to learn more about them.

Research

There are some tools related to edge matching that exist in ArcGIS, mostly topology related. None of them supports splitting the overlapping polygons; they only allow choosing to what edge a polygon should be aligned to.

The Integrate tool would solve my problem in case the polygons are overlapping just over a minor area, but first the polygons can overlap over a significant area, and second the Integrate tool also modifies other vertices of polygons (not participating in the overlap) which I want to leave as is.

I got some crazy ideas about creating the longest central line over each polygon that would result when intersecting the water body and grassland, but I cannot really think through this using limited computational geometry knowledge I have. I guess the longest line that would split the polygon into two roughly equal parts would not always be the correct line I need to use.

I have started considering converting the polys to raster and reclassifying the overlapping pixels using an interpolation method (how far each pixel is from water and grass pixels), but can't figure out a workflow for doing this using ArcGIS Spatial Analyst tools.

Are there any good ideas on how to solve the problem?

Best Answer

  1. Union the polygons
  2. Convert to lines
  3. Remove lines where FID_Reservoir OR FID_Grassland = -1 (no overlap)
  4. Run 'Collapse Dual Lines to Centerline' tool
  5. Use this tool (Split Polygons with Lines) to split the union result
  6. Merge the polygons based on a common attribute (Reservoir ID; Grassland ID) using the dissolve tool (if you don't have a common attribute, add a unique id to the source data)

If you follow these steps, you should end up with the polygons split at the center of the overlap, as illustrated by your third image in your question.