Meine Antwort bezieht sich auf folgende Mail vom Montag, 14. Januar 2008 00:20: > mallok schrieb: > > Hallo, > > ich habe gemaess dem Beispiel im wiki versucht mit POIs in einer > > Textdatei und openlayers, diese in OSM zeichnen zu lassen. Habe auch > > brav die lat lons in mercator umgerechnet (ebenfalls wie im wiki > > beschrieben). Meine POIs landen allerdings in Italien und nicht in > > Muenchen, wo sie hingehoeren.
Italien statt München geht ja noch fast unter Messungenauigkeit durch ;-) (Meine POI waren anfangs in der Nähe vom Kap der guten Hoffnung gelandet statt 15km nördlich von Berlin). > > Ich habe die letzten 6 Stunden mit suchen > > im Netz zugebracht aber keine fuer brauchbaren beispiele gefunden. Eine > > Umrechnung der im wiki angegebenen Punkte transportiert die weit in den > > Norden und nicht nach Muenchen. Ich bin inzwischen so weit. dass ich > > weis. dass ich ein Problem mit der Projektion habe; nur habe ich leider > > keine Ahnung, welche Formel(n) ich anwenden soll. Weiss hier jemand > > weiter? > > > > Gruesse > > mallok > > Ja des ist ne zimlich seltsamme Sache, bin damals auch dran gescheitert. > Die von OSM auf der Seite benutzte OpenLayers Variante benutzt intern > keine Koordinaten, sondern Meter zwischen -20037508 und 20037508. > > Aber in deren JavaScripts gibts auch ne Funktion die die normalen > Lat/Lon Koordinaten entsprechnd umwandelt, wie man z.B. bei der > Centerfunktion sieht: > > var centre = lonLatToMercator(new OpenLayers.LonLat(10.688571882011752, > 48.87896240236462)); > Die Umrechnungsfunktion selbst steht ja auch im Wiki auf der Seite mit dem POI-Beispiel[1]. Allerdings war ich mit dieser Funktion auch nicht zum Ziel gekommen (s.o.). Inzwischen habe ich jedoch mit den Umrechnungsformeln aus der Wikipedia[2] eine Lösung für die Projektion LatLon <-> Mercator gefunden, die zumindest bei mir für verschiedene Regionen der Welt zu passen scheint. Zu beachten ist, dass die Umrechnungsformeln, wie sie in der Wikepedia dargestellt sind, mit Bogenmaß (Radiant) arbeiten und nicht mit Grad. Anschließend muss dann noch der Winkel in Meter auf dem angenommenen Erdumfang umgerechnet werden. [1]<http://wiki.openstreetmap.org/index.php/Openlayers_POI_layer_example> [2]<http://de.wikipedia.org/wiki/Mercator-Projektion> Hier mal die entscheidenden JavaScript-Schnipsel aus meiner Seite: ----------8<---------------------------- // Umrechnung Lat/Lon -> interne Koordinaten function lonToMercator(l) { return lon = l * 20037508.34 / 180; }; function latToMercator(l) { // Umrechnung Graß -> rad l = l * Math.PI / 180; // Projektion Erdkugel -> Mercator var lat = Math.log( (1+Math.sin(l)) / (1-Math.sin(l)) ); // Umrechnung rad -> Meter lat = lat * 20037508.34 / 2 / Math.PI; return lat; }; // Umrechnung interne Koordinaten -> Lat/Lon function MercatorToLonLat(ll) { var lon = ll.lon / 20037508.34 * 180; // Umrechnung Meter -> rad var lat = ll.lat / 20037508.34 * 180 * ( Math.PI / 180 ); // Projektion Mercator -> Erdkugel lat = ( Math.pow(Math.E, lat) - Math.pow(Math.E, -lat) ) / 2; // = Math.sinh(lat) lat = Math.atan( lat ); // Umrechnung rad -> Grad lat = lat * 180 / Math.PI; return new OpenLayers.LonLat(lon, lat); } ----------->8-------------------------------- Bitte beachten, dass die Umrechung in Interne Koordinaten für Latitude und Longitude mit getrennten Funktionen erfolgt. Die Gegenrichtung erwartet dagegen ein OpenLayers.LonLat-Objekt als Argument. Möglicherweise haben noch die folgenden Zeilen Einfluss auf die Projektion der POIs auf die Karte: <!-- Einbindung des JavaScripts von OSM --> <script src="http://openstreetmap.org/openlayers/OpenStreetMap.js"></script> <script> map = new OpenLayers.Map('map', { maxExtent: newOpenLayers.Bounds(-20037508,-20037508,20037508,20037508), maxResolution:156543, units:'m', projection: "EPSG:41001", numZoomLevels:18, } ); // von OSM vorgegebene Objekte für die Kartenlayer verwenden var layerTah = new OpenLayers.Layer.OSM.Osmarender("Osmarender"); var layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik"); </script> HTH, Gruß Andreas _______________________________________________ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/cgi-bin/mailman/listinfo/talk-de