🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Wie "implementiere" ich eine Funktion zur Umwandlung geogr. Koordinaten im Textformat in Dezimalgrad? [gelöst!]

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Raffnix
Beiträge: 4
Registriert: Di 5. Dez 2023, 17:57

Wie "implementiere" ich eine Funktion zur Umwandlung geogr. Koordinaten im Textformat in Dezimalgrad? [gelöst!]

Beitrag von Raffnix » Di 5. Dez 2023, 18:50

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
Zuletzt geändert von Raffnix am So 10. Dez 2023, 14:09, insgesamt 1-mal geändert.

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: Wie "implementiere" ich eine Funktion zur Umwandlung geographischer Koordinaten im Textformat in Dezimalgrad?

Beitrag von karolus » Di 5. Dez 2023, 20:20

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.
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Helmut_S
* LO-Experte *
Beiträge: 756
Registriert: Di 9. Feb 2016, 19:27

Re: Wie "implementiere" ich eine Funktion zur Umwandlung geographischer Koordinaten im Textformat in Dezimalgrad?

Beitrag von Helmut_S » Di 5. Dez 2023, 21:47

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
Dateianhänge
Koordinatenumwandlung.ods
(12.96 KiB) 143-mal heruntergeladen
MX-Linux KDE + Linux-Mint Cinnamon

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: Wie "implementiere" ich eine Funktion zur Umwandlung geographischer Koordinaten im Textformat in Dezimalgrad?

Beitrag von karolus » Di 5. Dez 2023, 22:22



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
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Raffnix
Beiträge: 4
Registriert: Di 5. Dez 2023, 17:57

Re: Wie "implementiere" ich eine Funktion zur Umwandlung geographischer Koordinaten im Textformat in Dezimalgrad?

Beitrag von Raffnix » Di 5. Dez 2023, 23:54

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?

Raffnix
Beiträge: 4
Registriert: Di 5. Dez 2023, 17:57

Re: Wie "implementiere" ich eine Funktion zur Umwandlung geographischer Koordinaten im Textformat in Dezimalgrad?

Beitrag von Raffnix » Mi 6. Dez 2023, 00:38

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?

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: Wie "implementiere" ich eine Funktion zur Umwandlung geographischer Koordinaten im Textformat in Dezimalgrad?

Beitrag von karolus » Mi 6. Dez 2023, 10:11

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?
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

paljass
* LO-Experte *
Beiträge: 693
Registriert: Fr 18. Mär 2011, 15:34

Re: Wie "implementiere" ich eine Funktion zur Umwandlung geographischer Koordinaten im Textformat in Dezimalgrad?

Beitrag von paljass » Mi 6. Dez 2023, 11:09

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

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: Wie "implementiere" ich eine Funktion zur Umwandlung geographischer Koordinaten im Textformat in Dezimalgrad?

Beitrag von karolus » Mi 6. Dez 2023, 11:38

@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!
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

paljass
* LO-Experte *
Beiträge: 693
Registriert: Fr 18. Mär 2011, 15:34

Re: Wie "implementiere" ich eine Funktion zur Umwandlung geographischer Koordinaten im Textformat in Dezimalgrad?

Beitrag von paljass » Mi 6. Dez 2023, 13:27

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...


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten