Seite 1 von 2
Wie "implementiere" ich eine Funktion zur Umwandlung geogr. Koordinaten im Textformat in Dezimalgrad? [gelöst!]
Verfasst: Di 5. Dez 2023, 18:50
von Raffnix
Hallo,
mir liegen in der Zelle D2 geographische Koordinaten als Text in folgender Form vor:
8°43'22,02"; 49°8'5,49"
Hieraus möchte ich zwei Werte extrahieren: die geogr. Länge in Dezimalgrad (8.7227833333°) und entsprechend die geographische Breite (49.134858333°). Dies habe ich gelöst mit den Formeln
Code: Alles auswählen
=WECHSELN(TEXT(WERT(TEIL(TEIL(D2;1;FINDEN(";";D2;1)-1);1;FINDEN("°";TEIL(D2;1;FINDEN(";";D2;1)-1);1)-1))+WERT(TEIL(TEIL(D2;1;FINDEN(";";D2;1)-1);FINDEN("°";TEIL(D2;1;FINDEN(";";D2;1)-1);1)+1;FINDEN("'";TEIL(D2;1;FINDEN(";";D2;1)-1);1)-FINDEN("°";TEIL(D2;1;FINDEN(";";D2;1)-1);1)-1))/60+WERT(TEIL(TEIL(D2;1;FINDEN(";";D2;1)-1);FINDEN("'";TEIL(D2;1;FINDEN(";";D2;1)-1);1)+1;FINDEN("""";TEIL(D2;1;FINDEN(";";D2;1)-1);1)-FINDEN("'";TEIL(D2;1;FINDEN(";";D2;1)-1);1)-1))/3600;"Standard");",";".")
sowie
Code: Alles auswählen
=WECHSELN(TEXT(WERT(TEIL(TEIL(D2;1+FINDEN(" ";D2;1);LÄNGE(D2)-FINDEN(" ";D2;1));1;FINDEN("°";TEIL(D2;1+FINDEN(" ";D2;1);LÄNGE(D2)-FINDEN(" ";D2;1));1)-1))+WERT(TEIL(TEIL(D2;1+FINDEN(" ";D2;1);LÄNGE(D2)-FINDEN(" ";D2;1));FINDEN("°";TEIL(D2;1+FINDEN(" ";D2;1);LÄNGE(D2)-FINDEN(" ";D2;1));1)+1;FINDEN("'";TEIL(D2;1+FINDEN(" ";D2;1);LÄNGE(D2)-FINDEN(" ";D2;1));1)-FINDEN("°";TEIL(D2;1+FINDEN(" ";D2;1);LÄNGE(D2)-FINDEN(" ";D2;1));1)-1))/60+WERT(TEIL(TEIL(D2;1+FINDEN(" ";D2;1);LÄNGE(D2)-FINDEN(" ";D2;1));FINDEN("'";TEIL(D2;1+FINDEN(" ";D2;1);LÄNGE(D2)-FINDEN(" ";D2;1));1)+1;FINDEN("""";TEIL(D2;1+FINDEN(" ";D2;1);LÄNGE(D2)-FINDEN(" ";D2;1));1)-FINDEN("'";TEIL(D2;1+FINDEN(" ";D2;1);LÄNGE(D2)-FINDEN(" ";D2;1));1)-1))/3600;"Standard");",";".")
Da ich die Formeln in zahlreiche Dateien einfügen muss, sollen sie, anstatt mit Hilfsspalten zu arbeiten, jeweils in eine einzige Zelle passen, deshalb etwas lang. So weit, so gut.
Um es dennoch etwas zu kürzen, schwebt mir vor, den Kern (die Koordinatenumwandlung) als eigene Funktion in meinem CALC verfügbar zu haben, so dass ich in der Zelle nur noch eingeben müsste:
Code: Alles auswählen
=Koordinatenumwandlung (TEIL(D2;1;FINDEN(";";D2;1)-1))
sowie
Code: Alles auswählen
=Koordinatenumwandlung (TEIL(D2;1+FINDEN(" ";D2;1);LÄNGE(D2)-FINDEN(" ";D2;1)))

FRAGE:
In Excel würde ich die Funktion Koordinatenumwandlung über die Lambda-Funktion definieren - die gibt es aber in Calc nach meinem Kenntnisstand nicht. Wie kann ich das stattdessen in CALC machen? Wie wäre das z.B. in LibreOfficeBasic als Funktion zu programmieren?
Raffnix
Re: Wie "implementiere" ich eine Funktion zur Umwandlung geographischer Koordinaten im Textformat in Dezimalgrad?
Verfasst: Di 5. Dez 2023, 20:20
von karolus
Hallo
Ich würde das jetzt zuerst per →Daten→Text in Spalten
[x]Semicolon
[x]Andere: "
auf zwei Zellen aufteilen.
per Suchen&Ersetzen
Suche °|'
ersetze durch :
in ein Zeitformat wandeln…
…und das mit 24 multiplizieren um zum Dezimalwert zu kommen.
Re: Wie "implementiere" ich eine Funktion zur Umwandlung geographischer Koordinaten im Textformat in Dezimalgrad?
Verfasst: Di 5. Dez 2023, 21:47
von Helmut_S
Hallo Raffnix, anbei noch ein Vorschlag. Das Umwandeln in Dezimalgrad klappt, wenn du deine "Monsterformeln" mit Wert(...) umschließt und statt dem letzten Punkt ein Komma eingibst. Wenn du diese Formeln unter einem Namen speicherst (Strg+F3) - in meinem Fall "laenge" und "breite" kannst du die lange Formel unter diesem Namen verwenden. Allerdings musste ich die Ausgangszelle D2 absolut setzen, also $D$2. Ob das für dich verwendbar ist musst du schauen.
Gruß Helmut
Re: Wie "implementiere" ich eine Funktion zur Umwandlung geographischer Koordinaten im Textformat in Dezimalgrad?
Verfasst: Di 5. Dez 2023, 22:22
von karolus
…
Oder eben schlicht und ergreifend:
Code: Alles auswählen
=VERBINDEN(":";1;REGAUS(D2;"[\d,]+";;{1.2.3}))*24
=VERBINDEN(":";1;REGAUS(D2;"[\d,]+";;{4.5.6}))*24
Re: Wie "implementiere" ich eine Funktion zur Umwandlung geographischer Koordinaten im Textformat in Dezimalgrad?
Verfasst: Di 5. Dez 2023, 23:54
von Raffnix
Danke mal für die Ideen, aber noch ist die Lösung für mich nicht ganz erkennbar.
@Karolus: bei deinen Antworten verstehe ich nicht ganz, was sie mit meiner Frage zu tun haben. Meine Frage war danach, wie ich diese Umwandlung als Formel in Calc "implementieren" kann, so dass ich sie zukünftig in gleicher Weise wie eine originäre Calc-Funktion verfügbar habe. Meine Frage war nicht nach einer anderen Formel, denn die von mir gelieferte Formel funktioniert ja bereits perfekt.
@Helmut: Die Umwandlung in Dezimalgrad klappt ja bereits mit meiner Formel genau so, wie ich's haben will (ich brauche die Ausgabe in Textformat und mit Punkt statt Komma, daher nehme ich diese Ersetzung Komma in Punkt ja vor!), ein erneutes Rückumwandeln Punkt in Komma wäre also paradox. Das hatte ich vielleicht nicht klar genug ausgedrückt, dass ich wirklich die angegebene Form brauche (weil ein GIS-Prog. dies so wünscht). OK, also lassen wir diese "Rückersetzung" einfach weg und behalten die Formel so bei, wie ich sie hatte (und auch ohne absolute Bezüge, denn die Formel soll ja künftig auf ganz verschiedene Zellen angewendet werden können).
Wie geht es jetzt weiter? Wie kann ich z.B. die nun "breite" genannte Formel auf die Zellen D3, D4, ..., D100 anwenden (ich möchte eine ganze Liste von Koordinaten umwandeln, daher der Aufwand), und andermal in einer anderen Datei dann auf die Zellen F2, F3, F4, ..., F56 oder auf die Spalte A oder M usw. usf.?
Ziel ist, dass ich bloß eine einfache Formel wie "=breite(F2)" eingeben muss und damit die von mir gewünschte Ausgabe erhalte (oder eben auch =Koordinatenumwandlung(TEIL(D2;1+FINDEN(" ";D2;1);LÄNGE(D2)-FINDEN(" ";D2;1))) - das wäre schon auch noch OK). Wie mache ich die Umwandlungsformel in Calc allgemein verfügbar, und zwar ohne "festverdrahteten" Zellbezug, sondern mit der Möglichkeit, ein Argument mitzugeben?
Diese Funktionalität habe ich mit dem von dir beschriebenen Weg nicht hinbekommen. Oder habe ich da was falsch gemacht?
Re: Wie "implementiere" ich eine Funktion zur Umwandlung geographischer Koordinaten im Textformat in Dezimalgrad?
Verfasst: Mi 6. Dez 2023, 00:38
von Raffnix
Ja, ich hatte was falsch gemacht. Nun nochmal probiert, und ich bin doch mit dem Tipp von Helmut ein Stück weitergekommen.
Gebe ich die Formeln unter "Namen verwalten" (Ctrl-F3) mit relativen Bezügen ein, dann funktioniert das, was ich möchte, tatsächlich, sofern ich den Ausgabeort immer mit gleichem "Versatz" gegenüber dem Quellort anordne, was zwar eine gewisse Einschränkung ist, aber für mich grundsätzlich noch praktikabel. Die unter "Namen verwalten" abgespeicherten Formeln werden also nachgezogen (so, wie man es von bedingten Formatierungen kennt), das war mir neu!
Ein Wunsch ist aber nach wie vor offen: Ich benötige die Funktionalität jeden Tag in einer anderen Datei, und ich würde es mir gerne sparen, jedesmal wieder die Formeln unter "Namen verwalten" einzugeben (oder alternativ die neuen Daten in die alte Dateivorlage zu kopieren).

FRAGE: Der maximale Geltungsbereich, den ich für die Formel einstellen kann, ist das Dokument. Ich bräuchte die Formel aber wirklich "global", d.h. in meinem Calc-System jederzeit und in "jeder" (naja, aber eben in vielen) Datei verfügbar. Wie mache ich das?
Re: Wie "implementiere" ich eine Funktion zur Umwandlung geographischer Koordinaten im Textformat in Dezimalgrad?
Verfasst: Mi 6. Dez 2023, 10:11
von karolus
Mal angenommen in deiner Spalte D stehen ab D2 , D3, D4 … D999 die Koordinaten.
nimm in
E2 die Formel:
Code: Alles auswählen
=VERBINDEN(":";1;REGAUS(D2;"(-?\d+,?\d*)";;{1.2.3}))*24
jetzt machst du einen
Doppelklick auf die rechte untere Ecke von D2
in F2 nimmst du die Formel;
Code: Alles auswählen
=VERBINDEN(":";1;REGAUS(D2;"(-?\d+,?\d*)";;{4.5.6}))*24
Soll ich das Ding mit dem Doppelklick jetzt nochmal für F2 erklären oder schaffst du es alleine?
Re: Wie "implementiere" ich eine Funktion zur Umwandlung geographischer Koordinaten im Textformat in Dezimalgrad?
Verfasst: Mi 6. Dez 2023, 11:09
von paljass
Hi,
@karolus
Hast du eigentlich mal gelesen (und verstanden), was raffnix geschrieben hat? Hier drei Auszüge, damit es vielleicht klarer wird:
Ich benötige die Funktionalität jeden Tag in einer anderen Datei
Ich bräuchte die Formel aber wirklich "global", d.h. in meinem Calc-System jederzeit und in "jeder" (naja, aber eben in vielen) Datei verfügbar.
Wie wäre das z.B. in LibreOfficeBasic als Funktion zu programmieren?
Soweit ich weis, müsste man doch so eine Funktion programmieren können und "Calc-weit" zur Verfügung stellen. Weil ich aber von Ürogrammieren so gut wie keine Ahnung habe, kann ich diesbezüglich nicht weiterhelfen.
Gruß
paljass
Re: Wie "implementiere" ich eine Funktion zur Umwandlung geographischer Koordinaten im Textformat in Dezimalgrad?
Verfasst: Mi 6. Dez 2023, 11:38
von karolus
@palljass
Habe ich gelesen!
Glaubst du daß das leichter wird mit einem 500 bis 800 Zeichen-Formel-Monster anstelle der von mir vorgeschlagenen ~55zeichen -Formel
→Extras→Autokorrektur-Optionen →→Ersetzungen:
Ersetzen: kolänge
Durch:=VERBINDEN(":";1;REGAUS(D2;"(-?\d+,?\d*)";;{1.2.3}))*24
→→Neu →→ok
für wahlfreie Bezüge muss man den Zellbezug eben noch anpassen, den kann Calc nicht automagisch ermitteln!
Re: Wie "implementiere" ich eine Funktion zur Umwandlung geographischer Koordinaten im Textformat in Dezimalgrad?
Verfasst: Mi 6. Dez 2023, 13:27
von paljass
Hi,
Glaubst du daß das leichter wird mit einem 500 bis 800 Zeichen-Formel-Monster anstelle der von mir vorgeschlagenen ~55zeichen -Formel
Glaube ich nicht - aber es ist eben nicht das, was raffnix haben möchte...