Höhenmodell Nordrheinwestfalen (Software)

Martin Vogel ⌂ @, Dortmund / Bochum, Thu, 09.03.2017, 15:35 (vor 2576 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:

  1. import os
  2.  
  3. # Datenquelle:
  4. # http://www.bezreg-koeln.nrw.de/
  5. # brk_internet/geobasis/hoehenmodelle/gelaendemodelle/
  6.  
  7. # Drei Werte sind ggf. von Hand zu ändern: ordner, nth und ü
  8.  
  9. # Die Dateien der ausgepackten ZIP-Datei sind in diesem Ordner:
  10. ordner = "dgm1_05911000_Bochum_EPSG4647_XYZ" # Bochum
  11.  
  12. # Ausdünnung: nur jeder n-te Punkt in x- und y-Richtung
  13. nth = 100 # Zwischen 1 und 100!
  14.  
  15. # Überhöhung
  16. ü = 10 # Standard: 1
  17.  
  18. with open("3dnetz.scr","w") as scr:
  19. scr.write("OSnapCoord 1 ")
  20. scr.write("APunkt -1,-2,2 ")
  21.  
  22. auszuwerten = os.listdir(ordner)
  23. fn = 0
  24.  
  25. for f in auszuwerten:
  26. fn += 1
  27. print("Datei %i von %i: %s"%(fn,len(auszuwerten),f))
  28.  
  29. # Möglicher Dateiname:
  30. # dgm1_32368_5700_2_nw.xyz
  31. fs = f.split("_")
  32. fx = float(fs[1])
  33. fy = float(fs[2])
  34.  
  35. D =[]
  36. with open(ordner+"/"+f) as dgm:
  37. n = 0
  38. Z = []
  39. for zeile in dgm:
  40. # Beispiel:
  41. # 32372000.00 5706000.00 61.32
  42. Z.append(zeile.split())
  43. if ü != 1:
  44. Z[-1][2] = str(float(Z[-1][2]))
  45. n += 1
  46. if n == 2000:
  47. D.append(Z)
  48. Z = []
  49. n = 0
  50.  
  51. with open("3dnetz.scr","a") as scr:
  52. scr.write("rechteck %f,%f %f,%f "%(
  53. fx*1000,fy*1000,(fx+2)*1000,(fy+2)*1000))
  54. dxf.write("zoom g ")
  55. for X in range(100//nth):
  56. for Y in range(100//nth):
  57. dxf.write("3dnetz 21 21 ")
  58. for x in range(21):
  59. for y in range(21):
  60. try:
  61. scr.write(
  62. ",".join(D[(Y*20+y)*nth][(X*20+x)*nth])+" ")
  63. except: # wenn Randelement 21 nicht verfügbar
  64. x1 = 1 if x==20 else 0
  65. y1 = 1 if y==20 else 0
  66. scr.write(
  67. ",".join(D[(Y*20+y)*nth-y1]
  68. [(X*20+x)*nth-x1])+" ")
  69.  
  70.  
  71. print("Fertig. "
  72. "Script 3dnetz.scr kann in AutoCAD oder BricsCAD gestartet werden.")

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

Bücher:
CAD mit BricsCAD
Bauinformatik mit Python


gesamter Thread:

 RSS-Feed dieser Diskussion

powered by my little forum