Der folgende Abschnitt gehört zur Seite [[mikeurban:anleitungen:import_anschlussleitungen|Anschlussleitungen berücksichtigen]]: ==== ArcMap Python-Fenster (ET GeoWizards 12) ==== # CODE # Pfad zum temporären Arbeitsverzeichnis wird festgelegt # Pfad zur Installationsdatei von ET GeoWizards wird festgelegt # Breite des Buffers # Suchdistanz des Tools LocateFeaturesAlongRoutes_lr Pfad_Workspace = etgwPath = Bufferdist = 0.1 Searchdist = 0.2 # Vorbereitende Schritte # ********************** # Import von ArcPy # Temporäres Arbeitsverzeichnis wird gesetzt # bestehende Featureklassen können überschrieben werden # über das Map-Object MXD > Zugriff auf Layer „Hausanschluss“ # über das Layer-Objekt > Zugriff auf den Dataset-Namen import arcpy import sys, subprocess import os arcpy.env.workspace = Pfad_Workspace arcpy.env.overwriteOutput = True MXD = arcpy.mapping.MapDocument("Current") df = arcpy.mapping.ListDataFrames(MXD) LYRhausanschluss = arcpy.mapping.ListLayers(MXD,"Hausanschluss")[0] STRINGhausanschluss = LYRhausanschluss.datasetName + ".Zielknoten" # Erstellung eines Buffers um die Anschlussleitungen # neue Spalte ALID wird mit eindeutiger ID versehen # ************************************************** arcpy.Buffer_analysis("Anschlussleitung","AnschlussleitungBuffer1",Bufferdist,"FULL","ROUND","ALL","","GEODESIC") arcpy.MultipartToSinglepart_management("AnschlussleitungBuffer1","AnschlussleitungBuffer2") arcpy.AddField_management("AnschlussleitungBuffer2","ALID","LONG") codeblock = """rec=0 def autoIncrement1(): global rec pStart = 1 pInterval = 1 if (rec == 0): rec = pStart else: rec = rec + pInterval return rec""" expression = "autoIncrement1()" arcpy.CalculateField_management("AnschlussleitungBuffer2","ALID",expression,"PYTHON",codeblock) # Hausanschlüsse werden bearbeitet # Hausanschlüsse: mit neue Spalte tempHAID # Hausanschlüsse: eindeutige ID erstellen # ALID der Buffer auf Hausanschlüsse übertragen # ******************************** arcpy.AddField_management("Hausanschluss","tempHAID","LONG") arcpy.CalculateField_management("Hausanschluss","tempHAID",expression,"PYTHON",codeblock) arcpy.SpatialJoin_analysis("Hausanschluss","AnschlussleitungBuffer2","Hausanschluss1","JOIN_ONE_TO_ONE","KEEP_ALL","","COMPLETELY_WITHIN") # ************************************ # Anschlussleitungen werden bearbeitet # ordner festlegen path # Anschlussleitungen in Punkte auflösen und als neuen Layer hinzufügen # über räumlichen JOIN ALID auf Anschlussleitungen (Pkt-Thema) übertragen # aus „mw_Pipe“ Routen erstellen ⇒ damit anschließend den jeweils nächste Knoten suchen inputDataset = os.path.join(Pfad_Workspace, r"Anschlussleitung.shp") outputDataset = os.path.join(Pfad_Workspace, r"Anschlussleitung2Punkte.shp") subprocess.call([etgwPath, "PolylinesToPoints", inputDataset, outputDataset,"Node"]) #Anschlussleitung2Punkte.shp als Layer hinzufügen! df = arcpy.mapping.ListDataFrames(MXD)[0] newlayer1 = arcpy.mapping.Layer(outputDataset) arcpy.mapping.AddLayer(df, newlayer1) arcpy.SpatialJoin_analysis("Anschlussleitung2Punkte","AnschlussleitungBuffer2","Anschlussleitung2Punkte2","JOIN_ONE_TO_ONE","KEEP_ALL","","COMPLETELY_WITHIN") arcpy.CalculateField_management("mw_Pipe","Coeff3",0) arcpy.CalculateField_management("mw_Pipe","Coeff4",1) arcpy.CreateRoutes_lr("mw_Pipe","MUID","mw_Pipe_Routen","TWO_FIELDS","Coeff3","Coeff4","UPPER_LEFT",1,0,"IGNORE","INDEX") # Tabelle ALPosition mit der Position der Anschlussleitungen erstellen, Suchdistanz # Zur Tabelle ALPosition das Feld Zielknoten hinzufügen # Join mit mw_Pipe: MEAS < 0.5 ⇒ FROMNODE in Spalte Zielknoten schreiben # Join mit mw_Pipe: MEAS > 0.5 ⇒ TONODE in Spalte Zielknoten schreiben # Auswahl und Join aufheben arcpy.LocateFeaturesAlongRoutes_lr("Anschlussleitung2Punkte2","mw_Pipe_Routen","MUID",Searchdist,"ALPosition.dbf","RID POINT MEAS","FIRST","DISTANCE","ZERO","FIELDS") arcpy.AddField_management("ALPosition","Zielknoten","TEXT","","",40) arcpy.AddJoin_management("ALPosition","RID","mw_Pipe","MUID","KEEP_ALL") # RID kommt von den Routen, ist die MUID arcpy.SelectLayerByAttribute_management("ALPosition","NEW_SELECTION",'MEAS <=0.5') arcpy.CalculateField_management("ALPosition","ALPosition.Zielknoten","!mw_Pipe.FROMNODE!","PYTHON") arcpy.SelectLayerByAttribute_management("ALPosition","NEW_SELECTION",'MEAS >0.5') arcpy.CalculateField_management("ALPosition","ALPosition.Zielknoten","!mw_Pipe.TONODE!","PYTHON") arcpy.SelectLayerByAttribute_management("ALPosition","CLEAR_SELECTION") arcpy.RemoveJoin_management("ALPosition","mw_Pipe") # Hausanschluss1: neue Spalte Zielknoten # Hausanschluss1 als auch Tabelle ALPosition haben beide die Spalte ALID # Tabellenjoin und Übertragung von Zielknoten (nur für Zeilen, wo Join gefunden) # Auswahl und Join entfernen arcpy.AddField_management("Hausanschluss1","Zielknoten","TEXT","","",40) arcpy.AddJoin_management("Hausanschluss1","ALID","ALPosition","ALID","KEEP_ALL") arcpy.SelectLayerByAttribute_management("Hausanschluss1","NEW_SELECTION","ALPosition.Zielknoten IS NOT NULL") arcpy.CalculateField_management("Hausanschluss1","Hausanschluss1.Zielknoten","!ALPosition.Zielknoten!","PYTHON") arcpy.SelectLayerByAttribute_management("Hausanschluss1","CLEAR_SELECTION") arcpy.RemoveJoin_management("Hausanschluss1","ALPosition") # Hausanschluss: neue Spalte Zielknoten # Hausanschluss als auch Hausanschluss1 haben beide die Spalte tempHAID # Tabellenjoin und Übertragung von Zielknoten # Join entfernen # Spalte tempHAID löschen arcpy.AddField_management("Hausanschluss","Zielknoten","TEXT","","",40) arcpy.AddJoin_management("Hausanschluss","tempHAID","Hausanschluss1","tempHAID","KEEP_ALL") arcpy.CalculateField_management("Hausanschluss",STRINGhausanschluss,"!Hausanschluss1.Zielknoten!","PYTHON") arcpy.RemoveJoin_management("Hausanschluss","Hausanschluss1") arcpy.DeleteField_management("Hausanschluss","tempHAID")