I have a set of very large shapefiles and would like to merge polygons within these that share one vertex.
Currently they are all separate like so:
What tool can I use to merge all the polygons that share one vertex so in the above example the selected polygon would be part of the one to the left like so:
Answer
Suggestion in my comments "Convert back to integer raster, region group, to polygons, dissolve to multipart" will work for polygons derived from rasters.
However in general it's better to start with suggestion by @Polygeo . You'll need to use script though:
import arcpy
import networkx as nx
## replace 2 lines below to point to polygons and neighbours table
Nodes=r'C:\SCRATCH\SCRATCH.gdb\R2P'
Links=r'C:\SCRATCH\SCRATCH.gdb\NBRS'
fldFROM,fldTO="src_OBJECTID","nbr_OBJECTID"
G=nx.Graph()
with arcpy.da.SearchCursor(Links, (fldFROM,fldTO)) as cursor:
for f,t in cursor:
G.add_edge(int(f),int(t))
d,N=dict(),1
for group in nx.connected_components(G):
for n in group:d[n]=N
N+=1
with arcpy.da.UpdateCursor(Nodes, ("OBJECTID","GRP")) as cursor:
for k, v in cursor:
if k in d:v=d[k]
else: N+=1;v=N
cursor.updateRow((k,v))
Script assumes that your neighborhood table called NBRS, your polygons stored in file GDB and there is a field called "GRP" to store group numbers.
No comments:
Post a Comment