2009-04-21 7 views

Antwort

3

Je nach Layer haben Sie immer eine Art von Baselayer (die Karte), die Sie nicht wirklich konvertieren können. Wenn Sie Daten (Marker, Geo Json Zeug, etc) auf dieser Karte hinzufügen möchten, müssen Sie sie in die Projektion konvertieren, die der Baselayer verwendet.

// defining our coordinate systems 
var google = new OpenLayers.Projection("EPSG:900913"), 
    latlon = new OpenLayers.Projection("EPSG:4326"); 

// transforming the location to the right coordinate system 
var location = new OpenLayers.LonLat(10, 10).transform(latlon, google); 

// assuming you made an icon and marker layer 
var marker = new OpenLayers.Marker(location, icon);  

markerLayer.addMarker(marker); 

Schauen Sie sich die Openlayers-Dokumentation von einem System zum anderen über die Umwandlung Lage:

dies für Marker können easyly durch erfolgen.

2

Wenn die Karte Server bieten verschiedene Rastern dann können Sie von Glück.

Wenn sie jedoch Vektoren (z. B. KML-Dateien) oder JavaScript-geschriebene Kartenobjekte (z. B. Dres Antwort) bereitstellen, können Sie zwischen verschiedenen Projektionen umwandeln, so dass alle Daten in derselben Projektion und demselben Koordinatensystem angezeigt werden als Basiskarte. OpenLayers hat die Haken dafür (siehe Dre's Antwort), aber Sie müssen wahrscheinlich die Proj4JS-Bibliothek mit einschließen, die die Funktionalität zur Verfügung stellt.

Oder Sie könnten verwenden Proj4JS sich die Koordinaten zu transformieren vor dem Plotten.

2

Dies ist eine alte Frage, aber ich stieß auf eine Suche und dachte, ich könnte hineinspielen, falls das für andere hilfreich ist.

Dies kann von der Situation in der gestellten Frage abweichen, aber ich stieß in letzter Zeit auf eine ähnliche Situation. In meinem Fall musste ich die Ausgabe von zwei verschiedenen WMS-Anbietern auf einer Karte zeigen. Eine erbrachte ihre Dienste in EPSG: 900913, die andere in EPSG: 3857. Ich wusste, dass diese are functionally equivalent, ich dachte, wenn ich sie nur auf eine Weise anfordern könnte, die die Dienste funktionierte, dass die Karte in der Lage sein würde, mit der Ausgabe zu arbeiten. Meine Karte befindet sich in 900913 (und die anderen Dienste fordern daher standardmäßig die Verwendung dieser Projektion an).

Wie konnte ich das andere Service angefordert werden zu lassen, war richtig wie folgt (mit Ihren Daten gefüllt):

var myLayer = new OpenLayers.Layer.WMS(
    "Name", 
    "URL", { 
     "layer": "layer" 
    }); 

myLayer.projection = "EPSG:3857"; 

Normalerweise ?request=getCapabilities an den Dienst-URL anfügt ermöglicht es Ihnen, zu sehen, was Projektionen vorhanden sind aus dem Dienst in den CRS-Tags einer gewünschten Schicht.

Verwandte Themen