2015-03-02 77 views
2

我很难尝试更改地图视图的默认投影。OpenLayers 3.2.1 - 更改默认投影

这里是一个的jsfiddle:http://jsfiddle.net/qtcpjape/3/

$(document).ready(function() { 
    var proj = new ol.proj.Projection({ 
     code: 'EPSG:4326', 
     units: 'm', 
     extent: [-180.0000, -90.0000, 180.0000, 90.0000] 
    }); 

    var map = new ol.Map({ 
     target: 'map', 
     controls: [], 
     layers: [ 
      new ol.layer.Tile({ 
       source: new ol.source.MapQuest({ 
        layer: 'osm' 
       }) 
      }) 
     ], 
     view: new ol.View({ 
      center: [-90.78885827595732, 38.78662388327825], 
      projection: proj, 
      zoom: 15 
     }) 
    }); 
}); 

我将其以GeoJSON从REST调用是在EPSG未来:4326,我想轻松地映射。

现在,我似乎无法获得地图来更改投影并显示实际中心。

任何帮助,将不胜感激!谢谢!

回答

3

当您使用MapQuest的瓷砖,地图必须处于EPSG:3857因为OL3不支持光栅重投影(因为3.11.0版本光栅重投影支持,但由于性能的原因,通常建议重新投影矢量数据)。但是通过将目标投影设置在vector source上,您的GeoJSON矢量数据可以从EPSG:4326EPSG:3857重新投影。

例如:

var vectorSource = new ol.source.GeoJSON({ 
    ... 
    projection: 'EPSG:3857' 
}); 


var vectorLayer = new ol.layer.Vector({ 
    source: vectorSource 
}); 


var map = new ol.Map({ 
    target: 'map', 
    controls: [], 
    layers: [ 
     new ol.layer.Tile({ 
      source: new ol.source.MapQuest({ 
       layer: 'osm' 
      }) 
     }), 
     vectorLayer 
    ], 
    view: new ol.View({ 
     center: ol.proj.transform([6, 49], 'EPSG:4326', 'EPSG:3857'), 
     zoom: 3, 
     projection: 'EPSG:3857' 
    }) 
}); 

http://jsfiddle.net/qtcpjape/5/

+0

你可以举一个例子说明如何在飞行中做到这一点吗?谢谢! – Primm 2015-03-04 12:19:55

+0

我更新了我的答案。 – tsauerwein 2015-03-05 08:33:38

+0

非常感谢!我尝试过,但使用'EPSG:4326'作为投影,认为它必须是数据的投影。非常感谢! – Primm 2015-03-06 12:21:12

2

用的OpenLayers 3.11.0开始,现在可以重新投影光栅来源。查看release notes

因此,只需在视图(您已经这样做)和所有源(您目前没有)上明确指定投影。其余的OpenLayers!

+0

感谢提示,我更新了答案。 – tsauerwein 2015-11-27 10:21:53