2016-02-29 286 views
0

我想結合OSM OpenLayers示例與我從query.wikidata.org得到的結果,但似乎我做了錯誤的轉換。 什麼是長期和拉特的正確轉變?OpenLayers LonLat轉換

<html><body> 
    <div id="mapdiv"></div> 
    <script src="http://www.openlayers.org/api/OpenLayers.js"></script> 
    <script> 
    map = new OpenLayers.Map("mapdiv"); 
    map.addLayer(new OpenLayers.Layer.OSM()); 

    var lonLat = new OpenLayers.LonLat(40.228055555556, 27.242222222222) 
      .transform(
      new OpenLayers.Projection("EPSG:900913"), // transform from WGS 1984 
      map.getProjectionObject() // to Spherical Mercator Projection 
     ); 

    var zoom=16; 

    var markers = new OpenLayers.Layer.Markers("Markers"); 
    map.addLayer(markers); 

    markers.addMarker(new OpenLayers.Marker(lonLat)); 

    map.setCenter (lonLat, zoom); 
    </script> 
</body></html> 
+1

你是什麼意思?*「好像我在做錯誤的轉變」*?你期望看到什麼,你究竟得到了什麼? – kryger

+0

我正在使用https://www.openstreetmap.org來查看長lat的實際位置。例如亞琛戰役(50.766666666667 6.1)在亞琛戰役。所以我希望它能夠展示亞琛,但它卻顯示出真正不同的標記。 – Spoom

回答

2

轉型是錯誤的:你lonLat變量是EPSG:4326,所以你應該從EPSG改造:4326到EPSG:900913

var lonLat = new OpenLayers.LonLat(27.242222222222, 40.228055555556) 
     .transform(
     new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984 
     map.getProjectionObject() // to Spherical Mercator Projection 
    ); 
+0

謝謝,但我想這仍然是錯誤的,因爲它應該在土耳其的某個地方。 http://www.openstreetmap.org/search?query=40.228055555556%2C%2027.242222222222#map=6/40.229/27.235 – Spoom

+1

我編輯了上面的答案。順序是(lon,lat),而不是(lat,lon),就像在前面版本的代碼段中一樣。 – ahocevar

0

當使用Leaflet也沒有必要做任何轉型。

var map = L.map('map').setView(40.228055555556, 27.242222222222], 
    13); 

L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', { 
    attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors' 
}).addTo(map); 

L.marker([40.228055555556, 27.242222222222]).addTo(map) 
    .bindPopup('A pretty CSS3 popup.<br> Easily customizable.') 
    .openPopup();