Page Title

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

Benutzer-Werkzeuge

Webseiten-Werkzeuge


mikeurban:anleitungen:import_anschlussleitungen_etgeowizards12pythoncode

Der folgende Abschnitt gehört zur Seite 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 = <VOLLSTÄNDIGER PFAD ZUM TEMPORÄREN VERZEICHNIS>
etgwPath = <VOLLSTÄNDIGER PFAD ZUR ET-GEOWIZARDS, ETGWRUN.EXE>
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")
mikeurban/anleitungen/import_anschlussleitungen_etgeowizards12pythoncode.txt · Zuletzt geändert: 2018/10/03 09:39 von katharina