Suche Beispiel für die Berechnung der BBOX aus einer long/lat

Von der ISS bekommt man die aktuellen Koordinaten

http://api.open-notify.org/iss-now.json

{"iss_position": {"longitude": "-89.9651", "latitude": "17.9963"}, "timestamp": 1597581446, "message": "success"}

Jetzt möchte ich dies in einer iFrame auf einer WebSeite anzeigen. Das klappt (wohl) nur per bbox in dieser Form

<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://www.openstreetmap.org/export/embed.html?bbox=-239.58984375000003,-55.7765730186677,15.820312500000002,71.58053179556504&layer=mapnik" style="border: 1px solid black"></iframe>

Wie kommt man jetzt von long/lat
longitude: “-89.9651”
latitude: “17.9963”

auf diese Eckwerte der Bbox?
-239.589
-55.776
15.82031
71.58

Gefunden habe ich diese Seite dazu, aber verstanden habe ich es leider nicht:
https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Lon…2Flat._to_bbox
https://wiki.openstreetmap.org/wiki/DE:Bounding_Box

Kann mir das jemand möglichst einfach erklären?

Danke und Grüße
Thomas

Mal die Werte ein wenig zur Erklärung vereinfacht/gerundet (in Klammern):

Hier mal eine Grafik, was die Werte letztlich bedeuten:

  -240           -90              15
-50 a━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
    ┃             ┊               ┃
    ┃             ┊               ┃
    ┃             ┊               ┃
 20 ┃┈┈┈┈┈┈┈┈┈┈┈┈┈x               ┃
    ┃                             ┃
    ┃                             ┃
    ┃                             ┃
 70 ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━b

In der Mitte ist das x, das ist der Ort der ISS (willst ja in der Mitte haben). Für die Karte brauchst du letztlich 2 Eckpunkte vom 4-Eck mit jeweils long/lat. Jetzt musst halt einmal defininieren, “wieviel” Karte du um die ISS in der Mitte rum haben willst (Zoom sozusagen).
In Nord/Süd ist das in dem Falle halt etwa “60” (in einem Falle 70 [nach Norden], im anderen 50 [nach Süden]). Und Ost/West ist es ~120 (150 nach Westen und 105 nach Osten).
Sprich:
-90 - 120 = -210 … hier halt -240
-90 +120 = 30 … hier halt 15

Und halt:
20 - 60 = -40 … -50
20 + 60 = 80 … 70

Nur ist die Erde halt leider weder eine Scheibe und schon gar nicht ein Rechteck (wirklich nicht!). Daher muss man halt hierbei die Erdkrümmung bzw. weil’s ja letztlich um die Karte geht, die Kartenprojektion mit berücksichtigen. Die Verzerrung ist halt zu den Polen hin stärker als am Äquator, muss im Prinzip alles mit berücksichtigt werden.
Daher dann die komplexere Berechnung. Für den Anfang kannst aber halt einfach die long/lat von der ISS nehmen und für die Eckpunkte feste Werte abziehen/addieren.

Gruß,
asca

Hier ein Beispiel aus ein bash-script, ich hoffe das hilft ein Bißchen:

#!/bin/bash

LAT=$1 ; LON=$2
RADIUS=2.0 # default radius = 2 nautical mile

D_LAT=$(bc -l <<< "scale=6 ;"$RADIUS"/60")
D_LON=$(bc -l <<< "scale=6 ;"$RADIUS"/60")
#D_LON=$(bc -l <<< "scale=6 ;"${RADIUS}"* c("${LAT}"*180/4/a(1))/60")
# echo $LAT $LON $D_LON $RADIUS
FM_LAT=$(bc <<< "scale=6 ;"${LAT}" - "${D_LAT})
TO_LAT=$(bc <<< "scale=6 ;"${LAT}" + "${D_LAT})
FM_LON=$(bc <<< "scale=6 ;"${LON}" - "${D_LON})
TO_LON=$(bc <<< "scale=6 ;"${LON}" + "${D_LON})

LAT und LON sind als Parameter mitzugeben, RAD bedeutet die “Weite” und “Höhe” des zu lesen Gebiets. Eine typische Invokation des Scripts geht so:

meinscript.sh 51.5 4.6 -r 3 

das gibt dan meine Umgebung, plus und minus 3 Seemeilen.

Es war meine Absicht noch zu kompensieren für die Erdkrümmung, das habe ich aber nie richtig gekriegt, und für diese Anwendung ist es auch nicht kritisch. An diesem Tag, vielleicht, wenn ich wirklich Zeit habe…

NB für diese Art Arbeiten ist es praktisch, in Seemeilen zu rechnen, denn eine Seemeile entspricht einer Bogenminute auf einem Großkreis. Verlangt man Kilometer, so ist mit 1,852 zu kompensieren.

NB Rechtschreibungsfehler bitte vergeben, ich bin kein Geburtssprächer

@the-asca: Tolle Beschreibung! :sunglasses: +1

@the-asca
@Jan Olieslagers

Vielen Dank für die schöne ErKlärung. Damit kann ich was anfangen. Ein wirklich einfacher Einstieg in das Thema!!

Sehr motivieren… :slight_smile:

Danke und Grüße
Thomas

Der zusammengesetze Link sieht jetzt so aus.

https://www.openstreetmap.org/export/embed.html?bbox=-22%2C68%2C-112%2C8&layer=mapnik&mlat=-52&mlon=98

Was scheinbar nicht klappt, ist das setzen eines Marker (Position der ISS) mit Hilfe von mlat und mlon.

Danke und Grüße
Thomas

ich vermute das geht nicht weil Du das & escaped hast (html escaped), das muss einfach nur & anstatt & heißen.
Der Layerparameter geht vermutlich auch nicht, nur dass mapnik sowieso der Default ist, daher fällt es nicht auf…

Danke, ich habe den Link wie folgt korrigiert, war aber nicht die Lösung:

https://www.openstreetmap.org/export/embed.html?bbox=-22,68,-112,8&layer=mapnik&mlat=-52&mlon=98

Danke und Grüße
Thomas

Unter https://forum.openstreetmap.org findet man rechts unter Teilen folgenden html-code für iframes:

<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"
src="https://www.openstreetmap.org/export/embed.html?bbox=-63.80859375000001%2C17.056784609942554%2C70.48828125000001%2C66.08936427047088&layer=mapnik&marker=46.830133640447414%2C3.33984375" style="border: 1px solid black"></iframe>
<br/><small><a href="https://www.openstreetmap.org/?mlat=46.83&mlon=3.34#map=4/46.83/3.34">Größere Karte anzeigen</a></small>

danach sieht es so aus, dass statt mlon/mlat hier marker=lat,lon verwendet werden muss.

Leider war es das nicht, schade… Der Positionsmarker erscheint bei mir nicht.

https://www.openstreetmap.org/export/embed.html?bbox=34%2C80%2C-100%2C20&layer=mapnik&marker=-39.5510%2C154.4566

Doch, er ist vorhanden, nämlich zw. Australien und Neuseeland.
Bbox und Marker passen nicht zusammen!

Das tückische ist, dass die Reihenfolge von lat/lon bei bbox und marker unterschiedlich ist, siehe
https://www.openstreetmap.org/export/embed.html?bbox=9.0530776,48.7088,9.1842,48.755&marker=48.7319,9.1186

PS: Warum willst Du mit bbox arbeiten? Mit Kartenzentrum = Markerposition + zoom-Level geht es doch auch.

Tatsache, Du hast recht!! Jetzt sehe ich den Marker auch… :slight_smile:

Da ich das Ganze in einer iframe anzeigen möchte scheint die bbox die richtige Lösung zu sein und ja, die Berechnung der bbox ist sehr rudimentär (siehe weiter oben im Thread). Es tut, aber wohl zu ungenau…

Geht deine Lösung auch in einem iframe? Ich habe nicht exakt verstanden, was Du meinst mit Kartenzentrum = Markerposition + zoom-Level

Danke und Grüße
Thomas

Kartenzentrum = Markerposition + zoom-Level
https://www.openstreetmap.org/?mlat=48.7683&mlon=9.1694#map=15/48.7683/9.1694
scheint aber nicht in iframes zu funktionieren.

So jetzt klappt es einigermassen… puuuh :slight_smile: Was man nicht alles falsch machen kann.

https://www.openstreetmap.org/export/embed.html?bbox=-207%2C102%2C2%2C-7&layer=mapnik&marker=51.6183%2C-106.9515

Nun kann ich mich um das feintunig kümmern!!

Danke und Grüße
Thomas

ist egal. iframe hat damit nichts zu tun.

Fast, wenn ich so einen Link in den iFrame einbaue

dann steigt der Firefox mit einem CSP (Content-Security-Policy) Problem aus, da vermutlich der OpenStreetmapServer nicht die passenden CSP Header schickt.

Wird der Link passende zur (bbox) aufgebaut, dann wird wohl der passende CSP Header vom OpenStreetmapServer geschickt, damit Firefox beruhig ist.

Grüße
Thomas