Markieren von Orten auf Karte

cr4m0

Angesehenes Mitglied
Ich möchte gerne auf einer Karte bestimmte Orte anzeigen, deren Koordinaten ich genau kenne. Als Hintergrundbild habe ich eine Karte, auf der nur Grenzen eingezeichnet sind. Darauf sollen dann kleine Grafiken platziert werden, die die Orte markieren. Die Grafiken werden mit CSS (left:x; top:y) an der richtigen Position angezeigt.
Meine Frage: Wie kann ich das genau umsetzen? Soll ich eine Datenbank aufbauen, in denen ich allen Koordinaten bestimmte Top- und Left-Werte zuweise? Oder gibt es noch eine andere Möglichkeit?
Danke für eure Hilfe im Voraus!
 
Dafür kannst du auch eine Funktion einsetzen:

Für meine schweizer Karte geht das:

"Grad-Stunden-Minuten-Sekunden" oder irgendwie so:

$x=explode('-',$f[1]);
$y=explode('-',$f[2]);

$x_loc=round(0.034*((($x[0]*3600)+($x[1]*60)+$x[2])-22104)+(-564),0);
$y_loc=round(-0.047726055*((($y[0]*3600)+($y[1]*60)+$y[2])-171711)+(-348),0);

Die rechnet Längen - und Breitengrade ziemlich genau in pixel um.
Musst halt schauen, dass die Konstanten für jede Karte richtig gesetzt sind.
(Massstab, linker Rand, rechter Rand)

Bei grösserem Masstäben müsstest du noch die unterschiedliche Breite der Längengrade mit einbeziehen. Die sind hier konstant breit. Die Schweiz ist halt klein
wink.gif


Gruss Tümmel
 
OK, danke schonmal. Das sieht ganz gut aus. Aber es wäre nett, wenn du dazu noch etwas erklären könntest. Denn ich verstehe bisher überhaupt nichts davon (Welche Variable ist was? Wo muss ich die Konstanten setzen?).
smile.gif
 
Gute Frage, das habe ich irgendwann letztes Jahr berechnet.

$x_loc=round(0.034*((($x[0]*3600)+($x[1]*60)+$x[2])-22104)+(-564),0);
$y_loc=round(-0.047726055*((($y[0]*3600)+($y[1]*60)+$y[2])-171711)+(-348),0);

22104 war glaub ich der westlichste Zipfel in Sekunden.
und 171711 der nördlichste Punkt in Sekunden

Das ist also beides 0 auf der Karte.

564px ist die Breite der Karte und 348px die Höhe.
0.034 und -0.047726055 müssten massstababhängig sein, bin mir aber nicht sicher.

So bleibt der Punkt mit position:relative auch bei verschiedenen Bildschirmauflösungen gleich.

Ausserdem kann man auch 1/10 und 1/100 s setzen, obwohl 1/100 bei round(xy,0) eigentlich keine Rolle mehr spielen.

Probier halt mal ein bisschen rum oder vielleicht hat ja jemand eine Lösung für das genaue Setzen bei jedem Masstab.
cool.gif
 
Ich würde in Erwägung ziehen, Google Maps zu benutzen. Da kannst Du einfach die Koordinaten übergeben und gut ist.

 
QUOTE (Alain Aubert @ Di 18.03.2008, 00:12) Ich würde in Erwägung ziehen, Google Maps zu benutzen. Da kannst Du einfach die Koordinaten übergeben und gut ist.

Das ruiniert aber die Seitenladezeit.
wink.gif
 
QUOTE Für phpBB Foren gibt es ein tool, geomap -



Der das zip file ist mit 1.77mb ziemlich gross.
Sind da die Bilder gleich mitgeliefert ?

Die Funktion oben ist schon nicht schlecht.
Es war nur kein Bedarf die Breite der Längengrade genauer zu definieren, da die Erdkrümmung bei 250km vernachlässigbar ist.

Wer trotzdem Lust hat:

1 $px_absolut=$meter * $masstab / $sekunden

(Länge einer Sekunde am Äquator.)

Dann einfach den Umfang des jeweiligen Breitengrades in Meter sodass man die Breite eines Längengrades in Metern berechnen kann.

Dann ist 1 $px_lokal=$meter_local * $masstab / $sekunden

1px=$px_lokal/$px_absolut


Damit wäre dann die dritte Zeile fertig.

Viel Spass.

Wenn einer Interesse hat, und das nicht selbst ausrechnen will
huh.gif

pm wie gehabt: 100.- chr Computer einschalten und 10.- chr die Rechnung
 
Zurück
Oben