Suite

Extraction de la frontière entre des polygones contigus à l'aide d'ArcGIS for Desktop ?

Extraction de la frontière entre des polygones contigus à l'aide d'ArcGIS for Desktop ?


J'ai un fichier de formes avec des polygones représentant des populations uniques. Je souhaite déterminer des polygones contigus dans mon fichier de formes, puis extraire la bordure séparant les polygones contigus en tant que fichier polyligne séparé. Surtout, j'ai besoin que le fichier polyligne créé indique les deux polygones qu'il sépare.

je suis conscient de Voisin du polygone pour produire un tableau de toutes les paires contiguës, mais cela ne m'aide pas à extraire les bordures sous forme de polylignes.

Considérez le groupe A dans l'exemple de carte suivant :

Le groupe A a 8 paires contiguës : AB, AC, AD, AE, AF, AG, AH, AI. Je voudrais que le fichier de sortie sépare la bordure agrégée du groupe A en 8 lignes distinctes, chaque ligne ne référençant que la bordure partagée entre chaque paire contiguë ; par exemple, la bordure de AH en rouge serait une seule ligne dans les données de sortie. Comme indiqué précédemment, il est important que le fichier de sortie identifie également les deux groupes séparés par chaque ligne.

Pour clarifier, j'ai besoin d'une solution générale pour toutes les paires contiguës possibles dans mon ensemble de données. Je n'ai pas un seul groupe tel que l'exemple de groupe A qui m'intéresse.

Cette question est similaire à Extraction d'une polyligne de bordure entre différents polygones à l'aide de R ou GRASS?, sauf que je suis intéressé par une solution utilisant ArcGIS 10.2 for Desktop. J'ai une certaine connaissance de Python si une solution ArcPy est la plus simple.


Cela convertira vos polygones en arcs très rapidement. Vous avez besoin de 2 couches dans la table des matières : 1ère - polylignes, 2ème - polygones

import arcpy, traceback, os, sys,time from arcpy import env env.overwriteOutput = True dissolve="in_memory/dissolved" try: def showPyMessage(): arcpy.AddMessage(str(time.ctime()) + " - " + message) mxd = arcpy.mapping.MapDocument("CURRENT") theLinksLayer=arcpy.mapping.ListLayers(mxd)[0] PGONS=arcpy.mapping.ListLayers(mxd)[1] arcpy.DeleteFeatures_management(theLinksLayer) curT = arcpy. da.InsertCursor(theLinksLayer,"[email protected]") avec arcpy.da.SearchCursor(PGONS, "[email protected]") comme curseur : pour la ligne dans le curseur : feat = row[0].boundary() curT.insertRow((feat, )) arcpy.Dissolve_management(theLinksLayer, dissous,"","", "SINGLE_PART") arcpy.DeleteFeatures_management(theLinksLayer) m=0 arcpy.AddMessage("Dissolving… ") curT = arcpy.da.InsertCursor(theLinksLayer,"SHAPE @") avec arcpy.da.SearchCursor(dissous, "[email protected]") comme curseur : pour la ligne dans le curseur : m+=1 curT.insertRow((row[0],)) arcpy.Delete_management("in_memory") arcpy. RefreshActiveView() arcpy.AddMessage("
Polygones non intégrés dans %i lignes
" %m) del curT sauf : message = "
*** ERREURS PYTHON *** " ; showPyMessage() message = "Informations de suivi Python : " + traceback.format_tb(sys.exc_info()[2])[0] ; showPyMessage() message = "Informations d'erreur Python : " + str(sys.exc_type)+ " : " + str(sys.exc_value) + "
" ; showPyMessage()

À partir de là, il suffit de joindre spatialement les lignes aux polygones (un à plusieurs, SHARE_A_LINE_SEGMENT_WITH) et de dissoudre la sortie en utilisant le nom de la ligne et le premier et le dernier ID de polygone pour obtenir ceci :


Voir la vidéo: ArcGIS - Découpage de la zone détude