0

我有一个OpenLayers.Map( map),它有一个OpenLayers.Layer.Vector( map.addLayer(vectorLayer)),我使用vectorLayer.addFeatures将一系列OpenLayers.Feature.Vector对象添加到vectorLayer.

过程有点像这样:

var map, vectorLayer;
function initialize()
{
    map = new OpenLayers.Map(/*...*/);
    vectorLayer = new OpenLayers.Layer.Vector(/*...*/);
    map.addLayer(vectorLayer);
}

function populate()
{
    arrayOfStuff.foreach(function(thing, i) // data from an AJAX call
    {
        var feature = new OpenLayers.Feature.Vector(/*...based on thing*/));
        feature.vector_type = 'marker';
        vectorLayer.addFeature(feature);
    }
}

然后,当我map.setCenter用来移动地图时,矢量会错位:有些随地图移动,有些则没有,有些则两者都移动(导致重复),依此类推。手动平移地图甚至可以立即修复这些错位的矢量。不幸的是,简单地调用map.pan不会(始终)具有相同的效果,而且vectorLayer.refresh()似乎根本没有任何效果。

为什么会发生这种情况,我该如何让它停止?如果做不到这一点,我该怎么做才能强制地图自行修复(就像我移动地图时所做的那样)。

4

1 回答 1

1

您提供的代码片段不足以诊断您遇到的问题。

这是在黑暗中拍摄,但标记错位的常见原因是混合使用不同坐标系的地图图层。OpenLayers 使用基于纬度和经度的平面坐标系 (EPSG:4326),而 Google Maps、Microsoft Virtual Earth、Yahoo Maps 和其他商业 API 提供商使用球坐标系 (EPSG:3857),也称为 Spherical Mercator Projection。请在此处此处查看这些相关的 SO 问题。

幸运的是,OpenLayers 有 API 可以让你在不同的投影之间转换你的坐标,这样你的所有层就可以很好地协同工作。OpenLayers 文档专门用一章来介绍“球形墨卡托投影”,其中包含一些示例。

于 2013-07-13T10:01:58.793 回答