为什么openlayers会在地图点击时返回投影坐标?

时间:2015-11-11 03:51:41

标签: javascript openlayers-3

我参与了ol3的地图项目(v 3.10) 我将地图的投影(我猜)更改为" epsg 4258"这是ETRS89。

var customExtent = [-0.6172644,39.3868231,-0.43508204,39.44951748];
var etrs89 = new ol.proj.Projection({
      code: 'EPSG:4258',
      // The extent is used to determine zoom level 0. Recommended values for a
      // projection's validity extent can be found at http://epsg.io/.
      extent: customExtent,
      units: 'degrees'
    });

现在我使用此投影设置我的地图。

var map = new ol.Map({
      controls: ol.control.defaults({
            attributionOptions: /** @type {olx.control.AttributionOptions} */ ({
              collapsible: false,
              units: 'degrees'
            })
       }).extend([mousePositionControl,new ol.control.FullScreen()]),
       target: 'map',
       view: new ol.View({
            center: ol.proj.fromLonLat([-0.4685, 39.4315]),
            zoom: 14           
       }),
       layers: [
         ortofoto,
         muni_torrent
       ]
});

最终点击监听器如下所示:

var onclick = function(e){
    alert(e.coordinate);
};
map.on('click', onclick);

我得到的输出是:

[-53391.90122271185, 4785457.359197952]

但我期待的是:

[-0.4, 39.9]

我也尝试了以下相同的结果:

var onclick = function(e){
    var lonlat = map.getCoordinateFromPixel(e.pixel)
    alert('longitud: ' + lonlat[0]+ '; latitud: ' + lonlat[1]);
};

点击事件看起来不会输出地图投影中的坐标。 一些想法? 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

默认视图是EPSG:3857(球形墨卡托),这就是你所看到的坐标。

您需要指定EPSG:4258作为视图投影。有关如何指定自定义视图投影的示例,请参阅:http://openlayers.org/en/v3.10.1/examples/sphere-mollweide.html?q=mollweide

答案 1 :(得分:-1)

coordsDiv.textContent =' lat:' + Math.round(event.latLng.lat())+',' +' lng:' + Math.round(event.latLng.lng());