Page Title

Der Wiki wird derzeit überarbeitet: neue URL, neues Design, neue Inhalte!

Benutzer-Werkzeuge

Webseiten-Werkzeuge


mikeurban:anleitungen:import_anschlussleitungen_befehlszeilen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

mikeurban:anleitungen:import_anschlussleitungen_befehlszeilen [2016/05/18 13:07] (aktuell)
julian Seitename wurde von mikeurban:import_anschlussleitungen_befehlszeilen auf mikeurban:anleitungen:import_anschlussleitungen_befehlszeilen geändert
Zeile 1: Zeile 1:
 +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//​
 +
 +<​code>​
 +# 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
 +</​code>​
 +
 +  * 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//​
 +
 +<​code>​
 +# 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"​
 +</​code>​
 +
 +  * Buffer um die Anschlussleitungen
 +  * neue Spalte //ALID// wird mit eindeutiger ID versehen
 +
 +<​code>​
 +# 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)
 +</​code>​
 +
 +  * Hausanschlüsse:​ mit neue Spalte //​tempHAID// ​
 +  * Hausanschlüsse:​ eindeutige ID erstellen
 +  * ALID der Buffer auf Hausanschlüsse übertragen
 +
 +<​code>​
 +# 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"​)
 +</​code>​
 +
 +  * 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
 +
 +<​code>​
 +# 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"​)
 +</​code>​
 +
 +  * 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
 +
 +<​code>​
 +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"​)
 +</​code>​
 +
 +  * //​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
 +
 +<​code>​
 +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"​)
 +</​code>​
 +
 +  * //​Hausanschluss//:​ neue Spalte //​Zielknoten//​
 +  * //​Hausanschluss//​ als auch //​Hausanschluss1//​ haben beide die Spalte //​tempHAID//​
 +  * Tabellenjoin und Übertragung von //​Zielknoten//​
 +  * Join entfernen
 +  * Spalte //​tempHAID//​ löschen
 +
 +<​code>​
 +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"​)
 +</​code>​
mikeurban/anleitungen/import_anschlussleitungen_befehlszeilen.txt · Zuletzt geändert: 2016/05/18 13:07 von julian