Höhenmodell Nordrheinwestfalen (Software)

Martin Vogel ⌂ @, Dortmund / Bochum, Donnerstag, 09. März 2017, 15:35 (vor 438 Tagen)

Seit Beginn dieses Jahres sind digitale Höhenmodelle für ganz NRW frei herunterladbar. Die Dateien haben wahlweise eine Auflösung von einem Meter und folgen einem quadratischen Raster, wobei immer Bereiche von 2000×2000 Quadratmetern zu einer Datei zusammengefasst sind, oder sie haben eine variable Auflösung von im Mittel vier Punkten pro Quadratmeter bei unregelmäßiger Anordnung.

Die Digitalen Geländemodelle im 1-Meter-Raster lassen sich natürlich besonders einfach verarbeiten. Das Bild zeigt die Stadt Bochum in einem BricsCAD-Oberflächenmodell, für das zur schnelleren Verarbeitung nur ein Höhenpunkt pro 25 Meter in x- und y- Richtung verwendet wurde. Die Höhen wurden hier um den Faktor 10 vergrößert.

[image]
Datenquelle: https://www.opengeodata.nrw.de/produkte/geobasis/dgm/dgm1/dgm1_05911000_Bochu...
Lizenz: Datenlizenz Deutschland - Namensnennung - Version 2.0

Download: Geobasis NRW → Digitale Höhenmodelle → Digitale Geländemodelle (DGM)

Außer dem für Geländearbeiten notwendigen Digitalen Geländemodell sind noch weitere Daten verfügbar, beispielsweise ein Digitales Oberflächenmodell, auf dem auch Gebäude erfasst sind, sowie ein Digitales Gebäudemodell mit (vereinfachten) Darstellungen aller Gebäude in NRW.

Das von mir verwendete Pythonprogramm zum Auslesen der für Bochum heruntergeladenen Höhendaten und deren Umsetzung in ein Skript für AutoCAD oder BricsCAD sieht so aus:

import os

# Datenquelle:
# http://www.bezreg-koeln.nrw.de/
#        brk_internet/geobasis/hoehenmodelle/gelaendemodelle/

# Drei Werte sind ggf. von Hand zu ändern: ordner, nth und ü

# Die Dateien der ausgepackten ZIP-Datei sind in diesem Ordner:
ordner = "dgm1_05911000_Bochum_EPSG4647_XYZ"  # Bochum

# Ausdünnung: nur jeder n-te Punkt in x- und y-Richtung
nth = 100  # Zwischen 1 und 100!

# Überhöhung
ü = 10  # Standard: 1

with open("3dnetz.scr","w") as scr:
    scr.write("OSnapCoord 1 ")
    scr.write("APunkt -1,-2,2 ")

auszuwerten = os.listdir(ordner)
fn = 0

for f in auszuwerten:
    fn += 1
    print("Datei %i von %i: %s"%(fn,len(auszuwerten),f))

    # Möglicher Dateiname:
    # dgm1_32368_5700_2_nw.xyz
    fs = f.split("_")
    fx = float(fs[1])
    fy = float(fs[2])

    D =[]
    with open(ordner+"/"+f) as dgm:
        n = 0
        Z = []
        for zeile in dgm:
            # Beispiel:
            # 32372000.00 5706000.00   61.32
            Z.append(zeile.split())
            if ü != 1:
                Z[-1][2] = str(float(Z[-1][2])*ü)
            n += 1
            if n == 2000:
                D.append(Z)
                Z = []
                n = 0

    with open("3dnetz.scr","a") as scr:
        scr.write("rechteck %f,%f %f,%f "%(
            fx*1000,fy*1000,(fx+2)*1000,(fy+2)*1000))
        dxf.write("zoom g ")
        for X in range(100//nth):
            for Y in range(100//nth):
                dxf.write("3dnetz 21 21 ")
                for x in range(21):
                    for y in range(21):
                        try:
                            scr.write(
                                ",".join(D[(Y*20+y)*nth][(X*20+x)*nth])+" ")
                        except: # wenn Randelement 21 nicht verfügbar
                            x1 = 1 if x==20 else 0
                            y1 = 1 if y==20 else 0
                            scr.write(
                                ",".join(D[(Y*20+y)*nth-y1]
                                         [(X*20+x)*nth-x1])+" ")


print("Fertig. "
      "Script 3dnetz.scr kann in AutoCAD oder BricsCAD gestartet werden.")

--
Dipl.-Ing. Martin Vogel
Leiter des Bauforums

Heute schon programmiert? Einführung in Python 3 (PDF)



gesamter Thread:

 RSS-Feed dieser Diskussion

powered by my little forum