Der folgende Abschnitt gehört zur Seite [[mikeurban:anleitungen:import_anschlussleitungen|Anschlussleitungen berücksichtigen]]: ===== Erklärung des Python-Codes ===== * Pfad zum temporären Arbeitsverzeichnis wird festgelegt *Pfad zur installierten ET-Toolbox wird festgelegt *Breite des Buffers *Suchdistanz des Tools //LocateFeaturesAlongRoutes_lr// # Umgebungsvariablen # ****************** Pfad_Workspace = Pfad_ET-Toolbox = r"C:\Program Files (x86)\ET\ET GeoWizards.tbx" Bufferdist = 0.1 Searchdist = 0.2 * Import von ArcPy und der ET-Toolbox * 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 Bei einem Befehl weiter hinten im Code wird ein Tabellen-Join durchgeführt. Die anschließende Feldberechnung benötigt folgendes Format: //DatasetName.SpaltenName// # Vorbereitende Schritte # ********************** import arcpy arcpy.env.workspace = Pfad_Workspace arcpy.env.overwriteOutput = True arcpy.ImportToolbox(Pfad_ET-Toolbox) MXD = arcpy.mapping.MapDocument("Current") LYRhausanschluss = arcpy.mapping.ListLayers(MXD,"Hausanschluss")[0] STRINGhausanschluss = LYRhausanschluss.datasetName + ".Zielknoten" * Buffer um die Anschlussleitungen * neue Spalte //ALID// wird mit eindeutiger ID versehen # Erstellung eines Buffers um die Anschlussleitungen # ************************************************** arcpy.Buffer_analysis("Anschlussleitung","AnschlussleitungBuffer1",Bufferdist,"FULL","ROUND","ALL") 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: mit neue Spalte //tempHAID// * Hausanschlüsse: eindeutige ID erstellen * ALID der Buffer auf Hausanschlüsse übertragen # Hausanschlüsse werden bearbeitet # ******************************** 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 in Punkte auflösen * über räumlichen JOIN //ALID// auf Anschlussleitungen (Pkt-Thema) übertragen * aus "mw_Pipe" Routen erstellen => damit anschließend den jeweils nächste Knoten suchen # Anschlussleitungen werden bearbeitet # ************************************ arcpy.ET_GPPolylineToPoints("Anschlussleitung","Anschlussleitung2Punkte","Node") 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 //Zieknoten// schreiben * Join mit //mw_Pipe//: //MEAS// > 0.5 => //TONODE// in Spalte //Zieknoten// 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")