Page Title

Benutzer-Werkzeuge

Webseiten-Werkzeuge


mikeurban:anleitungen:import_anschlussleitungen_befehlszeilen

Der folgende Abschnitt gehört zur Seite 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 = <VOLLSTÄNDIGER PFAD ZUM TEMPORÄREN VERZEICHNIS>
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")
mikeurban/anleitungen/import_anschlussleitungen_befehlszeilen.txt · Zuletzt geändert: 2016/05/18 13:07 von julian