# ZEITNEHMUNG # ----------- import time # Startzeit festhalten; wird bei abschliessender Meldung verwendet: StartZeit = time.time() # DICTIONARY MIT HALTUNGEN ERSTELLEN # ---------------------------------- # Leeres Dictionary erstellen HaDict = {} # Zeile fuer Zeile durch Haltungen und an Dictionary anhaengen: HaZeilen = arcpy.SearchCursor('msm_Link') HaZeile = HaZeilen.next() while HaZeile: HaDict[HaZeile.FROMNODE] = [HaZeile.TONODE, HaZeile.Length_C] HaZeile = HaZeilen.next() print 'Haltungen eingelesen.' print ' ' print 'Beginne mit dem Berechnen der Abstaende zum jeweiligen Endpunkt...' # KNOTEN DURCHGEHEN UND ABSTAND BERECHNEN # --------------------------------------- # Update cursor erstellen # with statement bietet verbessertes error handling: KnoFelder = ('MUID','Abstand','Endknoten') with arcpy.da.UpdateCursor('msm_Node',KnoFelder) as KnoZeilen: # Durch Knoten arbeiten for KnoZeile in KnoZeilen: # GesamtLaenge initiieren: GesamtLaenge = 0.0 # Start und Von mit KnoZeile[0], das ist die MUID, befuellen: Start = KnoZeile[0] Von = KnoZeile[0] # Wenn dieser Knoten kein Endknoten ist, dann findet er sich auch # als Schluessel im Dictionary HaDict: while Von in HaDict.keys(): # Jetzt kann man auch den Nach-Knoten holen, das ist das erste # Element in der Werteliste HaDict.get(Von) Nach = HaDict.get(Von)[0] # Die Laenge ist das zweite Element in HaDict.get(Von): HaLaenge = HaDict.get(Von)[1] # Gesamtlaenge erhoehen: GesamtLaenge = GesamtLaenge + HaLaenge # Von-Knoten mit Nach-Knoten belegen: Von = Nach # Wenn der Knoten hingegen ein Endknonten ist, soll der Nach-Knoten # so heissen, wie der Von-Knoten: else: Nach = Von print 'Knoten, Abstand, Endpunkt: ' + Start, GesamtLaenge, Nach # Jetzt wird Update-Funktionalitaet wirksam. # KnoZeile[1] ist das Feld "Abstand" KnoZeile[1] = GesamtLaenge # KnoZeile[2] ist das Feld "Endknoten" KnoZeile[2] = Nach # Schreibt offenbar die Zeile: KnoZeilen.updateRow(KnoZeile) # Cursors soll man angeblich immer loeschen, um Sperren und Konflikte beim # Zugriff zu vermeiden. Unklar, ob das beim "with" noch erforderlich ist. del KnoZeilen, KnoZeile print ' ' print 'Berechnen der Abstaende zum jeweiligen Endpunkt abgeschlossen.' print 'Bearbeitungsdauer [s]: ' + str(time.time() - StartZeit) print 'Vergessen Sie nicht, die Aenderungen zu speichern!'