Re: [Talk-de] POIs und Openlayers

2008-01-15 Diskussionsfäden Andreas Titz
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


Re: [Talk-de] POIs und Openlayers

2008-01-13 Diskussionsfäden Andreas Hubel
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.
 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));

oder bei der Funktion hier:

   function setPosition(lat, lon, zoom) {
 var centre = lonLatToMercator(new OpenLayers.LonLat(lon, lat));

 map.setCenter(centre, zoom);

 if (marker)
   removeMarkerFromMap(marker);

 marker = addMarkerToMap(centre, getArrowIcon());
   }

Ich hoffe, das ich weiter helfen konnte, ansonsten zeig einfach mal 
deinen Code.

MfG Andreas Hubel


___
Talk-de mailing list
Talk-de@openstreetmap.org
http://lists.openstreetmap.org/cgi-bin/mailman/listinfo/talk-de


[Talk-de] POIs und Openlayers

2008-01-12 Diskussionsfäden mallok
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.
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


___
Talk-de mailing list
Talk-de@openstreetmap.org
http://lists.openstreetmap.org/cgi-bin/mailman/listinfo/talk-de