Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1860to1864
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Geodaten 1300 Textdateien durchsuchen

Geodaten 1300 Textdateien durchsuchen
09.12.2021 13:10:38
Andreas
Ich bin mir noch gar nicht sicher ob folgende geografische Aufgabe mit EXCEL sinnvoll umzusetzten ist:
Ich benötige aus einer xy Koordinate den z Wert, das sind UTM Geländekoordinaten und der z Wert ist die Geländehöhe über NN für weitere Berechnungen. Digitale Geländemodelle mit einer Auflösung von 1x1 m gibt es zum Download frei verfügbar die Daten liegen als Text Dateien vor, für den Kreis in dem ich wohne sind das etwa 1300 Dateien mit jeweils 1000x1000 Koordinaten und Geländehöhen z.B. mit folgendem Dateinamen der den Koordinatenbereich bereits erkennen läßt
dgm1_32_460_5729_1_nw
dgm1= digitales Geländemodell in einer Auflösung von 1x1m (uninteressant für die Suche)
32 = UTM Zone (in der Regel uninteressant praktische alle Koordinaten in NRW liegen in der Zone 32)
460_5729 bedeutet diese Datei enthält die x Koordinaten von 460000-460999 und die y Koordinaten von 5729000-5729999
Innerhalb der Text Datei sieht das dann so aus (Auszug) wie gesagt 1000x1000 KoordinatenPaare und der zugehörige z-Wert hier bei 78-79m
460000.00 5729006.00 79.13
460001.00 5729006.00 79.08
460002.00 5729006.00 79.14
460003.00 5729006.00 79.22
460004.00 5729006.00 79.21
460005.00 5729006.00 79.26
460006.00 5729006.00 79.20
460007.00 5729006.00 79.16
460008.00 5729006.00 79.26
460009.00 5729006.00 79.33
460010.00 5729006.00 79.40
460011.00 5729006.00 79.44
460012.00 5729006.00 79.49
460013.00 5729006.00 79.54
460014.00 5729006.00 79.53
460015.00 5729006.00 79.34
460016.00 5729006.00 79.09
460017.00 5729006.00 78.85
460018.00 5729006.00 78.77
460019.00 5729006.00 78.77
460020.00 5729006.00 78.77
460021.00 5729006.00 78.77
Diesen z-Wert würde ich gerne ermitteln wenn ich eine x und eine y Koordinate eingebe.
Ja es gibt internet basierte Kartendiesnte die das liefern aber möchte mit dem z-Wert in EXCEL weiter rechnen.
Das könnte mit VBA machbar sein ist vielleicht aber bei 1,3*10hoch 9 Koordinatenparen zeitkritisch.
Man müsste zurest mit den ersten 3 Ziffern der Koordinaten die richtige Datei suchen und dann innerhalb der Datei nach den dem richtigen Koordinatenpaar und den z Wert auslesen.
Soweit die Theorie! Was meint ihr sinnvoll machbar oder nicht und wenn ja wie?
Gruß Andreas

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Geodaten 1300 Textdateien durchsuchen
09.12.2021 13:42:57
Zwenn
Hallo Andreas
wenn jede Datei die genannten Bestandteile im Dateinamen trägt und das Schema für jede Datei streng eingehalten wurde, kannst Du sogar nach mehreren Kriterien Suchen. Aber es macht wohl erstmal am meisten Sinn, sich auf die x und y Koordinaten zu beziehen. Nach denen möchtest Du Suchen und anhand dieser den Z-Wert auslesen, wenn ich es richtig verstanden habe.
Sinngemäß sucht man als erstes die richtige Datei, indem die Dateinamen auf Vorhandensein des richtigen Koordinatenbereiches geprüft werden. Die Bereiche in den Dateien sind ja klar nachzuvollziehen richtig?
Wurde die richtige Datei gefunden, wird der Inhalt in einen String eingelesen. In diesem String wird nach der X-Koordinate gesucht. (Y müsste schon stimmen, weil in einer Datei immer gleich oder? Sonst muss die zusätzlich verglichen werden.) Bei einem Fund, wird der nächste Zeilenumbruch gesucht und die Zeichen davor, bis zum ersten Leerzeichen, werden ausgelesen. Das ist der gesuchte Z-Wert.
So würde ich nach ersten Überlegungen versuchen das Problem zu lösen. Ohne Beispieldateien kann man dazu aber schlecht mehr sagen. Um mich da mehr reinzudenken fehlt mir wahrscheinlich die Zeit. Aber interessant finde ich das Problem schon.
Viele Grüße,
Zwenn
Anzeige
AW: Geodaten 1300 Textdateien durchsuchen
09.12.2021 13:45:43
volti
Hallo Andreas,
hier einfach mal ins Blaue eine Idee (wenn ich das richtig verstanden habe):
Code:

[Cc][+][-]

Sub Hole_ZWert() Dim X_Koord As String, Y_Koord As String, sArr() As String Dim sFilename As String, sPfad As String sPfad = "C:&bsol;Users&bsol;volti&bsol;Desktop&bsol;" X_Koord = "460018.00" Y_Koord = "5729006.00" sFilename = "dgm1*_" & Left$(X_Koord, 3) & "*_" & Left$(Y_Koord, 3) & "*nw.txt" sFilename = Dir$(sPfad & sFilename) If sFilename <> "" Then iFF = FreeFile() Open sPfad & sFilename For Input As iFF sArr = Split(Input(LOF(iFF), #iFF), X_Koord) Close iFF If UBound(sArr) > 0 Then sArr = Split(sArr(1), vbCr) sArr = Split(sArr(0)) MsgBox "Der Z-Wert für die Koordinaten " & X_Koord & ", " & Y_Koord & " ist:" _ & vbLf & sArr(UBound(sArr)), vbInformation, "Z-Wert ermitteln" Else MsgBox "Koordinate '" & X_Koord & "' nicht gefunden!", vbCritical, "Z-Wert ermitteln" End If End If End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Geodaten 1300 Textdateien durchsuchen
09.12.2021 13:53:59
volti
Ein Update:
Code:

[Cc]

Sub Hole_ZWert() Dim X_Koord As String, Y_Koord As String, sArr() As String Dim sFilename As String, sPfad As String sPfad = "C:&bsol;Users&bsol;voltm&bsol;Desktop&bsol;" X_Koord = "460018.00" Y_Koord = "5729006.00" sFilename = "dgm1*_" & Left$(X_Koord, 3) & "*_" & Left$(Y_Koord, 3) & "*nw.txt" sFilename = Dir$(sPfad & sFilename) If sFilename <> "" Then iFF = FreeFile() Open sPfad & sFilename For Input As iFF sArr = Split(Input(LOF(iFF), #iFF), X_Koord & " " & Y_Koord) Close iFF If UBound(sArr) > 0 Then sArr = Split(Split(sArr(1), vbCr)(0)) MsgBox "Der Z-Wert für die Koordinaten " & X_Koord & ", " & Y_Koord & " ist:" _ & vbLf & sArr(UBound(sArr)), vbInformation, "Z-Wert ermitteln" Else MsgBox "Koordinate '" & X_Koord & "' nicht gefunden!", vbCritical, "Z-Wert ermitteln" End If End If End Sub

_________________________
viele Grüße 😊
Karl-Heinz

Anzeige
AW: Geodaten 1300 Textdateien durchsuchen
09.12.2021 14:03:53
Zwenn
Hallo Karl-Heinz,
ich glaube Du hast den Aufbau der Dateinamen besser verstanden als ich. Mit

sFilename = "dgm1*_" & Left$(X_Koord, 3) & "*_" & Left$(Y_Koord, 3) & "*nw.txt"
kann wohl in der Tat direkt auf die richtige Datei zugegriffen werden, wenn von den 1000er Bereichen ausgegangen wird.
Sieht sehr gut aus für mich, was Du zur Verfügung gestellt hast. Bin gespannt was Andreas nach einem Test sagt. Kann natürlich sein, dass es ein anderes Zeilenumbruchzeichen ist, als vbCr. Je nachdem, aus welchem System die Dateien stammen. Aber das lässt sich ggf. ja schnell anhand einer Originaldatei ermitteln.
Viele Grüße,
Zwenn
Anzeige
AW: Geodaten 1300 Textdateien durchsuchen
09.12.2021 14:25:56
volti
Hallo Zwenn,
danke für Deine Rückmeldung.
BTW: Ich lese Deine Ausführungen zu den (meistens) Web-Themen immer sehr gerne, sehr informativ. :-)
Gruß KH
AW: Geodaten 1300 Textdateien durchsuchen
09.12.2021 15:27:01
Andreas
Danke erst einmal, Ich teste noch!
Der Filename müsste aber wie folgt zu ermitteln sein:
sFilename = "dgm1_32_" & Left$(X_Koord, 3) & "_" & Left$(Y_Koord, 4) & "_1_nw"
AW: Geodaten 1300 Textdateien durchsuchen
09.12.2021 15:30:37
volti
Naja Andreas,
da sind wir ja frei und Du kennst Dich besser aus.
Viel Spaß und Erfolg beim Testen.
Gruß KH
AW: Geodaten 1300 Textdateien durchsuchen
13.12.2021 09:03:47
Andreas
Guten Morgen,
leider war mein Test noch nicht erfolgreich, was wohl funktioniert ist das finden und öffnen der Datei. Es gibt auch die Meldung "Der Z-Wert für die Koordinate 460018.00 5729006.00 ist:" aber ohne Wert.
Der Dateityp im Original und die Endung ist .xyz und nicht .txt kann das daher am Zeilenumbruch hängen?
Ansonsten habe ich noch nicht genau verstanden was der VBA Code nach Open genau macht.
Gruß Andreas
Anzeige
AW: Geodaten 1300 Textdateien durchsuchen
13.12.2021 09:28:08
volti
Hallo Andreas,
der code splittet die Daten anhand des Suchbegriffes auf und schaft sie in ein Array.
Hier wird dann weiter gesplittet....
Natürlich können sowohl Zeilenumbruch (vbcr, vblf, vbcrlf) wie auch die Trennung innerhalb der Zeilen (Leerzeichen, vbTab) anders als erwartet sein.
Da wäre mal eine Datendatei (ggf. auch stark gekürzt) sinnvoll, anhand der man testen kann. Kannst ja mal eine hier zur Verfügung stellen.
Hier noch mal ein Update:
Code:

[Cc]

Sub Hole_ZWert() Dim X_Koord As String, Y_Koord As String, sArr() As String Dim sFilename As String, sPfad As String, sMsgTxt As String sPfad = "C:&bsol;Users&bsol;voltm&bsol;Desktop&bsol;" X_Koord = "460018.00" Y_Koord = "5729006.00" sFilename = Dir$(sPfad & "dgm1_32_" & Left$(X_Koord, 3) & "_" & Left$(Y_Koord, 4) & "_1_nw.xyz") sMsgTxt = "Es wurde keine passende Datei gefunden!" If sFilename <> "" Then X_Koord = X_Koord & " " & Y_Koord & " " ' Suchbegriff=Trenner iFF = FreeFile() ' nächste freie Filennummer Open sPfad & sFilename For Input As iFF ' Datei öffnen sArr = Split(Input(LOF(iFF), #iFF), X_Koord) ' Daten in Array schaffen Close iFF ' Datei schließen sMsgTxt = "Die Koordinaten " & X_Koord & " wurden nicht gefunden!" If UBound(sArr) > 0 Then ' Daten splitten MsgBox "Der Z-Wert für die Koordinaten " & X_Koord & "ist:" & vbLf _ & Split(sArr(1), vbCr)(0), vbInformation, "Z-Wert ermitteln" Exit Sub End If End If MsgBox sMsgTxt, vbCritical, "Z-Wert ermitteln" End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Geodaten 1300 Textdateien durchsuchen
13.12.2021 10:58:05
Andreas
Ok Dateiupload mit *.xyz ist nicht erlaubt als txt geht aber das ist vieleicht schon ein Problem?
https://www.herber.de/bbs/user/149771.txt
stark gekürzt aber die Koordinate 460018.00 5729006.00 ist enthalten
AW: Geodaten 1300 Textdateien durchsuchen
13.12.2021 11:06:23
Andreas
Mit dem Update funktioniert das aber sehr wohl! Ergebnis 78.77
Auch gar nicht zeitkritisch die Abfrage wenn man bedenkt, dass 1Mio Koordinaten pro Datei enthalten sind.
Ich denke den Rest kriege ich hin - perfekt vielen Dank!
Gruß Andreas
AW: Geodaten 1300 Textdateien durchsuchen
13.12.2021 11:14:43
volti
Schön Andreas,
freut mich, wenn es jetzt klappt und danke für die Rückmeldung.
Gruß KH
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige