Page Title

Benutzer-Werkzeuge

Webseiten-Werkzeuge


mikeurban:anleitungen:gleichmaessiges-gefaelle-anwenden

Gleichmässiges Gefälle anwenden

Einleitung

Speziell bei Neuplanungen ist es nützlich, ein gleichmäßiges Gefälle auf einen Teil des Kanalnetzes anzuwenden. Die folgende Routine hilft Ihnen dabei.

Mit Hilfe eines kleinen Skripts berechnen Sie den Abstand jedes Knotens vom Endpunkt des Kanalnetzes, und mit Hilfe des Abstandes definieren Sie anschließend die Knotenhöhen.

Die folgende Anleitung gilt für MIKE URBAN. Bitte kontaktieren Sie uns, wenn Sie an einer Lösung in MIKE URBAN+ interessiert sind.

Vorbereitungen in MIKE URBAN

(1) Führen Sie in MIKE URBAN die Fehlerprüfung durch, damit in den Haltungen die Felder FROMNODE und TONODE ergänzt werden.

(2) Klicken sie im Haltungseditor auf Befehle > Neu berechnen, damit das Feld Length_C befüllt wird.

(3) Setzen Sie im Haltungseditor mit der Feldberechnung allfällige Höhenangaben UpLevel oder DwLevel auf NULL. Das Tool beruht darauf, dass die Sohlhöhen der Schächte angepasst werden, und die Haltungen sollen sich mit den Sohlhöhen der Schächte anpassen.

(4) Schließen Sie MIKE URBAN und legen Sie in ArcMap eine neue Karte an.

Vorbereitungen in ArcMap

(5) Fügen Sie die Knoten msm_Node und die Haltungen msm_Link zum Kartendokument hinzu.

Erstellen Sie in der msm_Node zwei neue Spalten:

  • Abstand (Double)
  • Endknoten (Text, 40 Zeichen)

(6) Öffnen Sie in ArcMap das Python Fenster, öffnen Sie beiliegendes Skript gleichmaessiges-gefaelle-abstand_v05.zip, und führen Sie das Skript mit <Enter> aus. Sie sehen einige Meldungen, und am Ende ist bei jedem Knoten der Abstand eingetragen.

Damit sind die Vorbereitungen fertig. Schließen Sie ArcMap und öffnen Sie MIKE URBAN.

Gefälle einstellen in MIKE URBAN

Wählen Sie den Strang aus, den Sie bearbeiten möchten. Im Lageplan ist auch der Abstand beschriftet, den Sie mit dem Skript soeben berechnet haben.

Längsschnitt und Formel

Nehmen wir an, dass der Strang auf 198 m enden soll.

  • a1…Abstand des unteren Endes vom Endpunkt
  • y1…Schachtsohle des unteren Endes
  • a2…Abstand des oberen Endes vom Endpunkt
  • y2…Schachtsohle des oberen Endes

Das mittlere Gefälle berechnet sich nach

  • i = (y2 - y1)/(a2 - a1) = (198-193.77)/(720.06-525.77) = 0,02177

Die neuen Sohlhöhen der Schächte lauten:

  • InvertLevel = y1 + i * (Abstand - a1) = 193.77 + 0.02177 * ([Abstand] - 525.77)

Knoteneditor und Feldberechnung

Wählen Sie im Knoteneditor die Spalte mit der Sohlhöhe aus…

…und führen Sie mit der rechten Maustaste auf den Spaltenkopf die Feldberechung durch:

Ergebnis

Berechnen im Haltungseditor zunächst das Gefälle neu mit Befehl > Neu berechnen.

Dann führen Sie mit der rechten Maustaste auf dem Längsschnitt ein <Refresh> durch.

Gebietsweiser Ansatz

Die Feldberechnung kann auch auf mehrere Stränge angewandt werden, die sich dann alle mit gleichem Gefälle vom Startknoten wegentwickeln.

Anhang: Skript

gleichmaessiges-gefaelle-abstand_v05.py
#   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!'
mikeurban/anleitungen/gleichmaessiges-gefaelle-anwenden.txt · Zuletzt geändert: 2019/12/11 17:35 von thomas