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")