erstmal muss ich loswerden dass das hier ein geniales Projekt ist. Habe mich selten so für etwas begeistern können.
Nun habe ich das ganze gleich mal auf einer Webseite umgesetzt und stoße dabei auf ein Problem. Wenn ich mir eine Karte mit festgelegten Koordinaten anzeigen lasse funktioniert das super.
Nur wie kann ich das ganze umsetzten wenn ich die Koordinaten aus einer Datenbankabfrage hole?
Ich kann ja nicht einfach die Werte durch die Variablen ersetzten oder?
Wie kann ich denn im folgenden Code meine Koordinaten an “var lon” und “var lat” per PHP übergeben?
var map;
var layer_mapnik;
var layer_tah;
var layer_markers;
function drawmap() {
// Popup und Popuptext mit evtl. Grafik
var popuptext="<font color=\"black\"><b>Mike Helm<br>Schmitzweg<br>Berlin</b><p><img src=\"test.jpg\" width=\"180\" height=\"113
\"></p></font>";
OpenLayers.Lang.setCode('de');
// Position und Zoomstufe der Karte
var lon = 13.31817;
var lat = 52.5100325;
var zoom = 15;
map = new OpenLayers.Map('map', {
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326"),
controls: [
new OpenLayers.Control.MouseDefaults(),
new OpenLayers.Control.LayerSwitcher(),
new OpenLayers.Control.PanZoomBar()],
maxExtent:
new OpenLayers.Bounds(-20037508.34,-20037508.34,
20037508.34, 20037508.34),
numZoomLevels: 18,
maxResolution: 156543,
units: 'meters'
});
schau doch mal in den Quelltext, was dort für Werte stehen, wenn die Seite durch PHP gelaufen ist. Die Webseite weiß von PHP nichts mehr und das Javascript auch nicht. Eventuell stimmt das Zahlenformat nicht.
Zum Testen kann man die Variablen in PHP mit den statischen Werten aus deinem Test belegen. Das muss dann funktionieren.
ich meinte zwar den Quelltext der generierten HTML-Seite, aber ok
So als Schwachstelle fällt mir erstmal so auf, dass die Variablen u.U. leer sein können, wenn die DB-Abfrage nichts zurückliefert. Und ich gehe mal davon aus, dass die Abfrage nur einen Datensatz zurückliefert? Sont überschreiben sich die Werte schön immer selber.
Von einigen “Schweinen” im Code abgesehen, sollte das aber so funktionieren
Nur die Karte zeigt mir den Ort (Berlin) nicht an. Ich bekomme eine Karte dir mir den Mittelmeerraum zeigt. Ich bin da nichtmal annähernd bei Berlin.
Also scheinen doch die Daten nicht übergeben zu werden oder?
Was sind denn übrigens die Schweine???
Mitch
PS: Einen Fehler habe ich schon, meine Zoom-Stufe war zu Hoch. Nun zeigt er mir Berlin an nur leider ein paar Kilometer daneben. Und komischweise immer den gleichen Standort.
Hallo Mitch, gib doch einfach mal die long/lat mittels Alert im Javascript aus, dann kannst Du prüfen ob Sie im Javascript zu dem Zeitpunkt vorhanden sind.
so ähnlich:
alert(“lon/lat = <?php echo $lon $lat ?>”);
Damit die Werte aus der DB überschrieben werden. Das sollte die Seite wieder angezeigen, sie entspricht ja dann deinem statischen Beispiel. Ansonsten, wie gesagt, Quelltext im Browser aufmachen. Vieles sieht man dann schon, was nicht direkt dargestellt wird.
Edit zu spät gesehen. Die Schweine? Nunja, man trennt Code und Darstellung. In deiner Schleife wird $i hochgezählt, aber nicht benutzt. $i ist eine Zahl, da nimmt man auch Zahlen und keine Zeichenketten. Zahlen erhöht man mit $i++ (soll performanter sein…keine Ahnung, ob das schonmal einer ausgetestet hat ;))
Hallo Mitch,
Die Variablen sind nur innerhalb der mzsql-fetch-assoc-Schleife belegt. Setz vor die Schleife ein $long = $lat = 0.0; , dann sollte es funktionieren
Gruss,
Malte
Hallo Mitch, wie wäre es mit einem WIKI-Eintrag als Anleitung für deine Umsetzung?
Eventuell als Ergänzung zur Seite OSM-Anwendungen.
Wenn ich mir die Hits auf deinen Thread anschaue, scheint hier doch einiges Interesse vorhanden zu sein.
Ich finde es immer schön wenn sich “Spezialisten” dazu aufraffen können andere User, die (noch) nicht so tief inder Materie stecken, an ihrem Wissen zu beteiligen.
Hierfür wäre IMHO die o.g. WIKI-Seite ideal geeignet, oder?
Georg
Wichtig ist es auf jeden Fall zu wissen, dass PHP nur den Quelltext generiert, der zum Browser gesendet wird. Wenn da also bei der Darstellung etwas falsch läuft, dann musst du dir den Quelltext im Browser ansehen, und dort den Fehler suchen. Mit der Darstellung selber hat PHP nichts zu tun.
Kommt drauf an, wie man es programmiert. Aktuell bastle ich mir einen Renderer in Flash. Dann ist Flash für die Anzeige verantwortlich. Ev. programmiere ich mir den gleichen Renderer aber auch noch in PHP. PHP kann ebenfalls Grafiken erstellen. Dann bekommt der Browser nur noch ein fertiges Bildchen geliefert. Dann ist PHP für die korrekte Darstellung der OSM-Daten verantwortlich.
Das meiner Meinung nach größte Problem ist, dass PHP keine wirklich vernünftigen Grafik-Anbindungen hat.
-GDLib2 unterstützt sowohl Antialiasing als auch Linienbreite, Linienstil etc meiner Meinung nach nur unzureichend.
-Cairo (die Rendering-Library die Mapnik nutzt) ist nicht vollständig als PHP-binding implementiert.
Weitere Grafik-APIs für PHP sind mir nicht bekannt.
Dann bleibt noch das Problem der Geschwindigkeit. PHP ist extrem langsam im Vergleich zu anderen (auch Server-) Programmiersprachen.
Ich benutze Python mit Cairo für mein Rendering (allerdings bisher nicht auf einem Server), Gary68 nutzt Perl mit GDLib(2?).
Ein weiterer Vorteil von Python ist, dass es auch Mapnik-bindings für Python gibt, sodass man theoretisch nichtmal einen Renderer basteln muss. Mapnik unterstützt inzwischen auch per Plugin (noch beta?) direkt OSM-Dateien und ist in C++ geschrieben, sodass das die zeitgünstigste und wahrscheinlich auch schnellste Möglichkeit sein sollte.
EDIT: Eins habe ich noch vergessen:
-SVG kann man natürlich mit fast jeder Programmiersprache erzeugen. Allerdings kann Mapnik auch das. Ansonsten könnte auch das eine gute Lösung sein, ist halt nur wieder die Browser-Frage…
Ok, du hast natürlich Recht. Da hab ich mich falsch ausgedrückt… Für die funktionstüchtigkeit von OpenLayers ist PHP nicht verantwortlich. In dem Fall muss PHP nur den richtigen Quellcode generieren.