Klick auf die Karte zeigt die Koordinate

Ich möchte auf einer OpenLayers-Karte irgendwo klicken können, und danach erscheint ein Popup mit der Koordinate dieses Punktes. Popups via Markers nach der Anleitung hier habe ich geschafft, aber wie ich das mit dem Klick und der Koordinate hinkriege nicht. Hat schon mal jemand etwas ähnliches gemacht, gibt es irgendwo ein Beispiel?

Wyo

Moin,

hast anscheinend noch nicht auf http://openlayers.org/ in die Dokumentation und die Beispiele, hier insbesondere click.html geschaut! :wink:

Gruß
Georg

Doch aber click.html muss ich wohl übersehen haben, danke.

Wyo

Was mich allerdings wundert, dass die dabei angezeigten Werte gegenüber denen des MousePosition Controls vertauscht sind und leicht differieren. Zudem haben die Zahlenwerte überhaupt keine Änlichkeit mit lat/lon. Wie kann ich das korrigieren.

http://www.orpatec.ch/osm/tools/main.php

Wyo

Versuchs doch mal noch so umzurechnen:


var lonlat = map.getLonLatFromViewPortPx(e.xy).transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326"));

Danke. Ich habe den Code direkt aus dem click.html von OpenLayers übernommen, da hat es diesen transform nicht drinnen. Trotzdem wird dort die richtige Koordinate angezeigt, wie kann das gehen?

Ich frage mehr zum Verständnis und weil auch das MousePosition Control bei mir komische Werte anzeigt.

Übrigens wie sucht man am besten nach einem Beispielcode auf OpenLayers?

Wyo

click.html hat alles als EPSG:4326. Du hast EPSG:900913.

Was beim Markerklicken abläuft weiss ich nicht, aber die Anzeige von MousePosition() hält sich an die displayProjection der OpenLayers.Map. Wenn Du Deine Karte mit

new OpenLayers.Map ("infomap",
                                {theme:    null,
                                 projection: new OpenLayers.Projection("EPSG:900913"),
                                 displayProjection: new OpenLayers.Projection("EPSG:4326"),
                                 controls:.... 

baust, solltest Du die Koordinaten in Lat/Lon angezeigt bekommen. Beim Klicken weiss ichs grad nicht…

Grüße, Max

Hmm, ich muss ehrlich zugeben, das mit Projektionen verstehe ich nicht. Und auch nicht wieso EPSG:4326 hat, vielleicht wegen der Verendung von http://vmap0.tiles.osgeo.org/? Was sind den die Vorteile von EPSG:900913, dass OSM diese verwendet?

Vermutlich gibt es irgendwo eine Beschreibung über solche Basissachen, nur wo? Eigentlich möchte ich nicht nur wissen, wie man OpenLayers einsetzt sondern auch wieso was.

Wyo

Ich fürchte, bei Basissachen ist Opernlayers eher schlecht dokumentiert. Und auch sonst hat die Doku mehr was von Textadventure… Ich probiers mal:

“EPSG:4326” ist WGS84, die Karten sind Plattkarten. Nicht schwierig zu rechnen, deshalb gern für einfache Kartenzeichnerei verwendet: Der Punkt an der Koordinate X,Y liegt nX Pixel rechts vom Mittelpunkt und nY Pixel über dem Mittelpunkt. Das Koordinatensystem ist Lat,Lon. Weltkarten erkennt man daran, dass sie 2:1-Format haben und Grönland oben in die Breite gezerrt sind.

“EPSG:900913” ist eine Mercatorprojektion, in der besonders einfachen Version, wie sie die Firma Google (cool als Nummer geschrieben auch “900913”) gerne verwendet. Die ist komplizierter zu rechnen, Tileserver mögen die aber, warum war hier neulich Thema. Weltkarten erkennt man an ihrer eher quadratischen Form, am stark vergrösserten Grönland, und dass sie irgendwo bei 85° N/S abgeschnitten sind. Das Koordinatensystem dazu ist bei OL standardmässig eine Angabe der Art “X Meter über dem Äquator, Y Meter rechts vom Nullmeridian” (diese grossen Zahlen in Deinem Beispiel), allerdings projiziert, also nicht so einfach zum Rechnen geeignet.

Daneben gibts noch viele andere Projektionen, alle mit einer EPSG-Nummer versehen: Wikipedia, Kartennetzentwurf.

Die Projektionen haben auch alle definierte Formen, Koordinaten anzugeben. Das ist die Angabe von “units” in Openlayers. Da würde ich aber lieber nichts dran rumdrehen…

In Openlayers schleichen sich die Projektionen hinterrücks über die defaultwerte der Layer ein. Üblicherweise hat man 4326 (steht bei Map). Sobald man aber einen Layer mit “OpenLayers. Layer.OSM” einbindet, hat man 900913 als Projektion. Das steht in der Beschreibung von Layer.XYZ versteckt unter dem Punkt “sphericalMecator”.

displayProjection” ist die Projektion, die von der Map an Control-Elemente weitergegeben wird. Wird die gesetzt, erscheinen die Koordinaten rechts unten als Lat,Lon. Falls die nicht gesetzt ist, gewinnt anscheinend die Projektion des BaseLayers, und das ist bei Dir eben eine Mercator-OSM-Karte.

Ich würde sogar sagen, dass solche Informationen zwingend is OSM Wiki gehörten. Zumindest welche Projektion OSM und andere Dienste verwenden. Das würde einiges klar machen.

Vielen Dank für die Zusammenfassung.

Wyo

Ich bekomme meine Koordinaten in der Regel mit http://m.osmtools.de

Ich habe neulich in einem Thread hier einen Hinweis auf ein OpenLayers-Buch gefunden. Kosten irgendwas zwischen 30 und 40 Euros. Findet man schnell über google.

Ich weiß nicht, wie gut es ist, vielleicht kann hier ja jemand eine Bewertung abgeben?

Sollte das Buch gut sein, könnte man es ja vielleicht als Hilfe zum Erstellen eines Tutorials verwenden. Ist zwar dumm, daß die Ersteller des Tutorials dieses Buch erst mal kaufen müßten, doch vielleicht tut es der eine oder andere ja doch. Schließlich ist das Buch kein Tutorial und sollte (deutlich) darüber hinausgehen. Hängt natürlich vom Buch ab, das ich nicht kenne.

Ein Hinweis auf das Buch inkl. Bewertung wäre ja immerhin auch ein guter Beitrag zum Tutorial – wenn es sonst keine brauchbare Dokumentation gibt – so ungern ich Werbung machen würde.