NEWS
Lösung für GPS-Koordinaten nach Ortsnamen aufschlüsseln?
-
Hallo Allerseits,
ich suche gerade nach einer (einfachen) L
ö
sung, wie ich GPS-Koordinaten nach Ortsnamen aufschl
ü
sseln k
ö
nnte...
Auf http://www.geonames.org/ gibt es z.B. ein TAB separiertes txt-File/Datenbank von Deutschland zum Download:
https://download.geonames.org/export/dump/Hintergrund: Ich habe nun unseren Twingo Elektrik im Iobroker (ZOE Adapter) und der liefert mir u.a auch jeweils die aktuellen GPS Daten, sofern er steht, bzw. abgeschlossen ist. Den Twingo Status (Batterie-Ladung, Reichweite, etc) kann ich nun auch per IOT/Alexa abfragen.
Die Idee dabei, dass mir Alexa dann nicht nur die blanken GPS-Kordinaten, sondern vielleicht auch den passenden Ortsnamen dazu nennt.
Sprich, z.B. aus der Geonames Datenbank, den zu den aktuellen Twingo GPS Daten passenden/dichtesten Ort rausfischen und in einen Datenpunkt schieben, den dann z.B.
ü
ber Alexa mit im Twingo Statusbericht ausgeben.Jemand eine Idee, wie man das umsetzen k
ö
nnte, oder ob es schon etwas daf
ü
r gibt?
Es macht auch nichts, wenn es daf
ü
r eine einfache und schnelle L
ö
sung gibt 
Gru
ß
,Matthias
Edit: Habe was gefunden: https://nominatim.openstreetmap.org/reverse.php?format=xml&lat=52.10&lon=13.3291015625
Bzw: https://nominatim.openstreetmap.org/ui/reverse.html?format=html&lat=52.10&lon=13.3291015625
Nun muss ich mal schauen wie parsen geht, bzw. die GPS Koordinaten in den http request
ü
bergeben... -
Hallo Allerseits,
ich suche gerade nach einer (einfachen) L
ö
sung, wie ich GPS-Koordinaten nach Ortsnamen aufschl
ü
sseln k
ö
nnte...
Auf http://www.geonames.org/ gibt es z.B. ein TAB separiertes txt-File/Datenbank von Deutschland zum Download:
https://download.geonames.org/export/dump/Hintergrund: Ich habe nun unseren Twingo Elektrik im Iobroker (ZOE Adapter) und der liefert mir u.a auch jeweils die aktuellen GPS Daten, sofern er steht, bzw. abgeschlossen ist. Den Twingo Status (Batterie-Ladung, Reichweite, etc) kann ich nun auch per IOT/Alexa abfragen.
Die Idee dabei, dass mir Alexa dann nicht nur die blanken GPS-Kordinaten, sondern vielleicht auch den passenden Ortsnamen dazu nennt.
Sprich, z.B. aus der Geonames Datenbank, den zu den aktuellen Twingo GPS Daten passenden/dichtesten Ort rausfischen und in einen Datenpunkt schieben, den dann z.B.
ü
ber Alexa mit im Twingo Statusbericht ausgeben.Jemand eine Idee, wie man das umsetzen k
ö
nnte, oder ob es schon etwas daf
ü
r gibt?
Es macht auch nichts, wenn es daf
ü
r eine einfache und schnelle L
ö
sung gibt 
Gru
ß
,Matthias
Edit: Habe was gefunden: https://nominatim.openstreetmap.org/reverse.php?format=xml&lat=52.10&lon=13.3291015625
Bzw: https://nominatim.openstreetmap.org/ui/reverse.html?format=html&lat=52.10&lon=13.3291015625
Nun muss ich mal schauen wie parsen geht, bzw. die GPS Koordinaten in den http request
ü
bergeben...@lemuba sagte in L
ö
sung f
ü
r GPS-Koordinaten nach Ortsnamen aufschl
ü
sseln?:Nun muss ich mal schauen wie parsen geht, bzw. die GPS Koordinaten in den http request
ü
bergeben...Hier was zum Rumspielen. Den Request-Block von Blockly kann man mW nicht nutzen da OSM einen Header verlangt, deshalb die Auslagerung in eine Funktion. Zu beachten ist dass nicht immer alle Werte zur
ü
ck gegeben werden, im Beispiel fehlt zB road und city, du siehst in der Ausgabe des Gesamtergebnisses was tats
ä
chlich zur
ü
ck kommt. Nicht sch
ö
n ist das Warten auf das Ende der callback Funktion mittels wait(), aber mir f
ä
llt so sp
ä
t nichts Besseres ein. In JS w
ü
rde ich es mit axios machen und await nutzen, ginge hier nat
ü
rlich auch aber erfordert dann die extra Installation von axios

-
@lemuba sagte in L
ö
sung f
ü
r GPS-Koordinaten nach Ortsnamen aufschl
ü
sseln?:Nun muss ich mal schauen wie parsen geht, bzw. die GPS Koordinaten in den http request
ü
bergeben...Hier was zum Rumspielen. Den Request-Block von Blockly kann man mW nicht nutzen da OSM einen Header verlangt, deshalb die Auslagerung in eine Funktion. Zu beachten ist dass nicht immer alle Werte zur
ü
ck gegeben werden, im Beispiel fehlt zB road und city, du siehst in der Ausgabe des Gesamtergebnisses was tats
ä
chlich zur
ü
ck kommt. Nicht sch
ö
n ist das Warten auf das Ende der callback Funktion mittels wait(), aber mir f
ä
llt so sp
ä
t nichts Besseres ein. In JS w
ü
rde ich es mit axios machen und await nutzen, ginge hier nat
ü
rlich auch aber erfordert dann die extra Installation von axios

Vielen Dank erstmal f
ü
r Deine schnelle R
ü
ckmeldung, aber ich scheitere aktuell mal wieder daran, dass JS nicht wirklich meins ist, ich Dein Script und Blockly Vorlage nicht zum Laufen bekomme:
Hmm? Komme da gerade nicht wirklich weiter...
-
Vielen Dank erstmal f
ü
r Deine schnelle R
ü
ckmeldung, aber ich scheitere aktuell mal wieder daran, dass JS nicht wirklich meins ist, ich Dein Script und Blockly Vorlage nicht zum Laufen bekomme:
Hmm? Komme da gerade nicht wirklich weiter...
-
@lemuba es braucht keine Kenntnisse, importieren und laufen lassen. Evtl. kopierst du nochmal neu, sonst f
ä
llt mir nichts ein -
: Das war Zu Einfach!
Ich hatte nicht geschnallt, das der ganze Code das Blockly Script zum Import ist...l
ä
uft!Vielen Dank nochmal!
Gru
ß
,Matthias
-
Hey,
l
ä
uft bei euch das Script noch?
Seit heute bekomme ich20:12:05.729 error javascript.0 (5273) script.js.Eigene_Scripte.Tests.Loschen: Cannot get address of undefinedIm Log.
(muss das Skript noch umbenennen ^^).Hab gestern ein Update des Javascript Adapters gemacht. Zusammen mit Admin 5.
Die Koordinaten sind sauber.
-
Hey,
l
ä
uft bei euch das Script noch?
Seit heute bekomme ich20:12:05.729 error javascript.0 (5273) script.js.Eigene_Scripte.Tests.Loschen: Cannot get address of undefinedIm Log.
(muss das Skript noch umbenennen ^^).Hab gestern ein Update des Javascript Adapters gemacht. Zusammen mit Admin 5.
Die Koordinaten sind sauber.
-
Komisch.
Hat OSM ein Limit f
ü
r Anfragen?
Grage min
ü
tlich ab. L
ä
uft aber bestimmt schon seit 3 Wochen ohne Probleme.....
Setzte die Adresse nochmal selber zusammen. OSM sendet die was komisch....
EDIT:
Hab grad mal das Internet neu verbunden um eine neue IP zu bekommen.
Siehe da, es klappt wieder. -
Das Ganze l
ä
uft jetzt auch super mit dem Awtrix Adapter, bzw. Ausgabe auf dem Ulanzi Matrix Display:
Hier mal die Visualisierung der Adressdaten, plus aktuellen Geschwindigkeit - nun aber mit unserem Tesla M3.
Blockly Export/Import:
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="2]3hGy$Na|L2qX#+=;E8">lat</variable> <variable id=".hv$JjjT(QY(0c2!/tuc">lon</variable> <variable id="InM51wH+hhRZ1K}Uo6R:">result</variable> <variable id=",v4l/N^bA;j*N;f.7`GF">text</variable> </variables> <block type="procedures_defcustomreturn" id="?;wMWdJ!vB8:m#;$39f@" x="-337" y="-212"> <mutation statements="false"> <arg name="lat" varid="2]3hGy$Na|L2qX#+=;E8"></arg> <arg name="lon" varid=".hv$JjjT(QY(0c2!/tuc"></arg> </mutation> <field name="NAME">OSM</field> <field name="SCRIPT">dmFyIHJlcXVlc3QgPXJlcXVpcmUoJ3JlcXVlc3QnKTsNCmxldCByZXN1bHQ7DQpjb25zdCBvcHRpb25zID0gew0KICAgIHVybDogJ2h0dHBzOi8vbm9taW5hdGltLm9wZW5zdHJlZXRtYXAub3JnL3JldmVyc2UucGhwP2Zvcm1hdD1qc29uJmxhdD0nICsgbGF0ICsgJyZsb249JyArIGxvbiArICcmem9vbT0xOCcsDQogICAgbWV0aG9kOiAnR0VUJywNCiAgICBoZWFkZXJzOiB7DQogICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsDQogICAgICAgICdBY2NlcHQtQ2hhcnNldCc6ICd1dGYtOCcsDQogICAgICAgICdVc2VyLUFnZW50JzogJ2lvYnJva2VyIHNjcmlwdCcNCiAgICB9DQp9DQoNCnJlcXVlc3Qob3B0aW9ucywgZnVuY3Rpb24oZXJyLHJlc3BvbnNlLGJvZHkpew0KICAgIHJlc3VsdCA9IEpTT04ucGFyc2UoYm9keSk7DQp9KQ0KYXdhaXQgd2FpdCgyMDAwKTsNCnJldHVybiByZXN1bHQ7</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="variables_set" id="wR~~7^?!0{b~ZWJW2z2Y" x="-337" y="-187"> <field name="VAR" id="2]3hGy$Na|L2qX#+=;E8">lat</field> <value name="VALUE"> <block type="get_value" id="!@Mxm]aCD#|[2(1,`7LA"> <field name="ATTR">val</field> <field name="OID">tesla-motors.0.LRW3E7FS7PC682851.drive_state.latitude</field> </block> </value> <next> <block type="variables_set" id="|i,e7-xsVZtwL,YE9Pns"> <field name="VAR" id=".hv$JjjT(QY(0c2!/tuc">lon</field> <value name="VALUE"> <block type="get_value" id="6)]4V(MA}[}Y#gCg?g7^"> <field name="ATTR">val</field> <field name="OID">tesla-motors.0.LRW3E7FS7PC682851.drive_state.longitude</field> </block> </value> <next> <block type="variables_set" id="_]-UxYH%D~}#l6DWPyqA"> <field name="VAR" id="InM51wH+hhRZ1K}Uo6R:">result</field> <value name="VALUE"> <block type="procedures_callcustomreturn" id="E6q6k3RA-DSW4n:wbmt5" inline="true"> <mutation name="OSM"> <arg name="lat"></arg> <arg name="lon"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="O~3vjlaQApGabQ#KZ_Np"> <field name="VAR" id="2]3hGy$Na|L2qX#+=;E8">lat</field> </block> </value> <value name="ARG1"> <block type="variables_get" id=";6In%LVgU8c~ZW=V^#!+"> <field name="VAR" id=".hv$JjjT(QY(0c2!/tuc">lon</field> </block> </value> </block> </value> <next> <block type="debug" id="=kG9Q3BHtv,N12i)o/cd"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="ik1UI0{#imdw4QxI,wuq"> <field name="TEXT">test</field> </shadow> <block type="variables_get" id="ZJbVSK}WTjai..N)v+^}"> <field name="VAR" id="InM51wH+hhRZ1K}Uo6R:">result</field> </block> </value> <next> <block type="debug" id="bXiZr_w6h{,9I,J|QFQm"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="29,6%MJ)T!m#9$n(HA(,"> <field name="TEXT">test</field> </shadow> <block type="get_attr" id="4BRp8)RL(Z,ya1V7L%,k"> <value name="PATH"> <shadow type="text" id="@+Kn.LF%vkB35cm%To%G"> <field name="TEXT">address.road</field> </shadow> </value> <value name="OBJECT"> <block type="variables_get" id="/rsi@S]q*[hct$N@3[U^"> <field name="VAR" id="InM51wH+hhRZ1K}Uo6R:">result</field> </block> </value> </block> </value> <next> <block type="debug" id="dAc9;C;}EM{;795yOx+x"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="/40n%p9iOr{j;fjVE}z7"> <field name="TEXT">test</field> </shadow> <block type="get_attr" id="LpeSM|-_`@#YwXXZj!J@"> <value name="PATH"> <shadow type="text" id="Z^$s~_s3A]lS:_m9AjB("> <field name="TEXT">display_name</field> </shadow> </value> <value name="OBJECT"> <block type="variables_get" id="O[`[O5l$sBBY(*B]Rh9U"> <field name="VAR" id="InM51wH+hhRZ1K}Uo6R:">result</field> </block> </value> </block> </value> <next> <block type="variables_set" id=":iDZr5UyCe,ivtP9v0(}"> <field name="VAR" id=",v4l/N^bA;j*N;f.7`GF">text</field> <value name="VALUE"> <block type="text_join" id="XSLUXB!wN!-ae:pl;O8B"> <mutation items="11"></mutation> <value name="ADD0"> <block type="text" id=")D7vowpY0M+s6mmej`e~"> <field name="TEXT">Location: </field> </block> </value> <value name="ADD1"> <block type="get_attr" id="g3uOcVu;z8aYAY7;8Kti"> <value name="PATH"> <shadow type="text" id="KArLdm/6uO2yf.]RJDW["> <field name="TEXT">address.road</field> </shadow> <block type="text" id="DMfj]B1V*c^r*po?FozS"> <field name="TEXT">address.road</field> </block> </value> <value name="OBJECT"> <block type="variables_get" id="YOh=_SwF-z[BN^8PV(1:"> <field name="VAR" id="InM51wH+hhRZ1K}Uo6R:">result</field> </block> </value> </block> </value> <value name="ADD2"> <block type="text" id="nOZuc!aD}_`wjoaU4!(#"> <field name="TEXT"> </field> </block> </value> <value name="ADD3"> <block type="get_attr" id="eYJy`^;WpK9z`(0#QkYu"> <value name="PATH"> <shadow type="text" id="KArLdm/6uO2yf.]RJDW["> <field name="TEXT">address.road</field> </shadow> <block type="text" id="Faux=fGpEPkIBk=EH[=d"> <field name="TEXT">address.house_number</field> </block> </value> <value name="OBJECT"> <block type="variables_get" id="BQ6I:3SHB|S1AGrNGYIt"> <field name="VAR" id="InM51wH+hhRZ1K}Uo6R:">result</field> </block> </value> </block> </value> <value name="ADD4"> <block type="text" id="A(Z{jjQopfoSud(d$_*C"> <field name="TEXT">, </field> </block> </value> <value name="ADD5"> <block type="get_attr" id="G}a6d%(Qn2WrACG:Ch7|"> <value name="PATH"> <shadow type="text" id="KArLdm/6uO2yf.]RJDW["> <field name="TEXT">address.road</field> </shadow> <block type="text" id="fK{+kZLKFfv~KDF:GIcA"> <field name="TEXT">address.postcode</field> </block> </value> <value name="OBJECT"> <block type="variables_get" id="7!aEUv#yfH7G0qqNh{fh"> <field name="VAR" id="InM51wH+hhRZ1K}Uo6R:">result</field> </block> </value> </block> </value> <value name="ADD6"> <block type="text" id="QDwYvut3T+?ypaI-Qc~q"> <field name="TEXT"> </field> </block> </value> <value name="ADD7"> <block type="get_attr" id="#Qg=qhE{]!C9HFrHH#ER"> <value name="PATH"> <shadow type="text" id="KArLdm/6uO2yf.]RJDW["> <field name="TEXT">address.road</field> </shadow> <block type="text" id="/KcU}U$/=t_c2ob{O_}}"> <field name="TEXT">address.village</field> </block> </value> <value name="OBJECT"> <block type="variables_get" id="O_tQk;@av+BHgqb@VfHp"> <field name="VAR" id="InM51wH+hhRZ1K}Uo6R:">result</field> </block> </value> </block> </value> <value name="ADD8"> <block type="text" id="NenM{G|=MkLu:Y3BXF7?"> <field name="TEXT">: </field> </block> </value> <value name="ADD9"> <block type="get_value" id=":$dM7(mWFkX;dm?xlo_t"> <field name="ATTR">val</field> <field name="OID">tesla-motors.0.LRW3E7FS7PC682851.drive_state.speed_km</field> </block> </value> <value name="ADD10"> <block type="text" id="_WW=xep+.FfqH/kPAHHO"> <field name="TEXT"> km/h</field> </block> </value> </block> </value> <next> <block type="awtrix-light" id="1JNb12R1PMS^CFOxV:hZ"> <field name="INSTANCE"></field> <field name="RAINBOW">TRUE</field> <field name="STACK">TRUE</field> <field name="WAKEUP">TRUE</field> <value name="MESSAGE"> <shadow type="text" id="Upc}*ndVB5vPx7%#%,f?"> <field name="TEXT">haus-automatisierung.com</field> </shadow> <block type="variables_get" id="4@]t:R3T*_K_fnc8;i+?"> <field name="VAR" id=",v4l/N^bA;j*N;f.7`GF">text</field> </block> </value> <value name="COLOR"> <shadow type="colour_picker" id="ZO]ra7*|K.7]$apWfB4c"> <field name="COLOUR">#ffffff</field> </shadow> </value> <value name="SOUND"> <shadow type="logic_null" id="dc-@fFGA7vT5Z[bTy@aO"></shadow> </value> <value name="ICON"> <shadow type="logic_null" id=",u10)OQ,z.E.;7+eAK9:"></shadow> <block type="text" id="n1bTp(7]W[8#UVSbGQcl"> <field name="TEXT">54394</field> </block> </value> <value name="REPEAT"> <shadow type="math_number" id="ldph$rS`hpmxt,B756f!"> <field name="NUM">2</field> </shadow> </value> <value name="DURATION"> <shadow type="math_number" id="8Wgsv0!pZUT@Mg*n?w6y"> <field name="NUM">20</field> </shadow> </value> <next> <block type="control" id="T#!W2tOCAiMZT)Do_^[%"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">javascript.0.scriptEnabled.common.Tesla_Position</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">2</field> <field name="UNIT">sec</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="]yXqp^C@1w9a^uyTmw}6"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </xml> -
Hier noch ein kleines Update, welches ohne das l
ä
stige wait() auskommt. request() wird in eine Funktion gepackt, welche ein Promise zur
ü
ck gibt auf das man mit await warten kann.

-
@fastfoot
ist es auch m
ö
glich
ü
ber die API eine Adresse abzufragen und die Koordinate zu erhalten? -
@fastfoot
ist es auch m
ö
glich
ü
ber die API eine Adresse abzufragen und die Koordinate zu erhalten?@oli
Das hier ist f
ü
r die Richtung "Koordinaten => Adresse".const axios = require('axios'); // Reverse-Geocoding anhand der aktuellen Koordinaten async function getLocation(latitude, longitude) { const url = `https://nominatim.openstreetmap.org/reverse?lat=${latitude}&lon=${longitude}&format=json`; const response = await axios.get(url); if (response.data && response.data.display_name) { log('Standort: ' + response.data.display_name); } } -
@oli
Das hier ist f
ü
r die Richtung "Koordinaten => Adresse".const axios = require('axios'); // Reverse-Geocoding anhand der aktuellen Koordinaten async function getLocation(latitude, longitude) { const url = `https://nominatim.openstreetmap.org/reverse?lat=${latitude}&lon=${longitude}&format=json`; const response = await axios.get(url); if (response.data && response.data.display_name) { log('Standort: ' + response.data.display_name); } }@codierknecht sagte in L
ö
sung f
ü
r GPS-Koordinaten nach Ortsnamen aufschl
ü
sseln?:Das hier ist f
ü
r die Richtung "Koordinaten => AdresseDas ist doch das was wir schon k
ö
nnen oder? Er wollte doch Adresse => Koordinaten oder? -
So z.B.
https://nominatim.openstreetmap.org/search?format=json&q=Berlin, Alexanderplatz 10
Du musst nur schauen, ob du das "Zentrum" der jeweiligen Adresse haben willst oder die Boundingbox.
-
@codierknecht sagte in L
ö
sung f
ü
r GPS-Koordinaten nach Ortsnamen aufschl
ü
sseln?:Das hier ist f
ü
r die Richtung "Koordinaten => AdresseDas ist doch das was wir schon k
ö
nnen oder? Er wollte doch Adresse => Koordinaten oder?@david-g sagte in L
ö
sung f
ü
r GPS-Koordinaten nach Ortsnamen aufschl
ü
sseln?:Das ist doch das was wir schon k
ö
nnen oder? Er wollte doch Adresse => Koordinaten oder?Naja - wenn man Deinen Link und meinen Code kombiniert, k
ö
nnte man auf sowas kommen:const axios = require('axios'); // Geocoding anhand einer gegebenen Adresse async function getLocation(address) { const url = `https://nominatim.openstreetmap.org/search?format=json&q=${encodeURI(address)}`; const response = await axios.get(url); if (response.data && response.data.length > 0) { log(`Latitude: ${response.data[0].lat}, Longitude: ${response.data[0].lon}`); } } -
@david-g sagte in L
ö
sung f
ü
r GPS-Koordinaten nach Ortsnamen aufschl
ü
sseln?:Das ist doch das was wir schon k
ö
nnen oder? Er wollte doch Adresse => Koordinaten oder?Naja - wenn man Deinen Link und meinen Code kombiniert, k
ö
nnte man auf sowas kommen:const axios = require('axios'); // Geocoding anhand einer gegebenen Adresse async function getLocation(address) { const url = `https://nominatim.openstreetmap.org/search?format=json&q=${encodeURI(address)}`; const response = await axios.get(url); if (response.data && response.data.length > 0) { log(`Latitude: ${response.data[0].lat}, Longitude: ${response.data[0].lon}`); } }@codierknecht, @Marc-Berg , @David-G
vielen Dank f
ü
r eure Unterst
ü
tzung es funktioniert
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden
