当您在不同投影的基本地图之间切换时,如何重新投影矢量图层

时间:2010-08-24 01:57:08

标签: javascript openlayers proj4js mercator

我有两个基础层的OpenLayers地图:MetaCarta(EPSG:4326)和谷歌地图(墨卡托)。 sphericalMercator = false,单位为度。地图上还有一些标记,方框和矢量数据。

当我在基础图层(具有不同投影)之间切换时,简单的几何图形(例如标记或框)会自动重新投影并正确显示。然而,矢量图层(折线)只是移位而不是重新投影。我认为我需要调用某种“重建”功能或添加一些参数,以便OpenLayers在基础层投影更改时自动执行此操作。但我不知道该怎么做。

我阅读了关于球形墨卡托(http://docs.openlayers.org/library/spherical_mercator.html)并查看OpenLayers示例,但未找到解决方案。

我的代码部分在下面(vector.json中的所有坐标都是度数):

var metaCarta = new OpenLayers.Layer.WMS("MetaCarta",
    "http://labs.metacarta.com/wms/vmap0?",
    {layers: "basic"}
);

var gmap = new OpenLayers.Layer.Google(
    "Google Streets",
    {numZoomLevels: 40}
);

map.addLayers([metaCarta, gmap]);
map.setCenter(new OpenLayers.LonLat(139.8, 35.7), 11);


// Load vector data
var jsonFormat = new OpenLayers.Format.GeoJSON();

var vectorLayer = new OpenLayers.Layer.Vector("vector", {
    style: {strokeColor: "gray",strokeWidth: 2}
});

OpenLayers.loadURL("vector.json", {}, null, function(response) {
    var features = jsonFormat.read(response.responseText);
    vectorLayer.addFeatures(features);
});

map.addLayer(vectorLayer);

1 个答案:

答案 0 :(得分:1)

您需要在OpenLayers中定义投影和合适的转换。反过来,您需要包含Proj4JS库(OpenLayers使用它来执行这些投影转换)