OpenLayers.Map setCenter导致错误放置的OpenLayers.Vector元素

时间:2013-07-09 21:21:05

标签: javascript maps openlayers

我有OpenLayers.MapmapOpenLayers.Layer.Vectormap.addLayer(vectorLayer)),我使用vectorLayer.addFeatures添加一系列{OpenLayers.Feature.Vector 1}}对象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()似乎根本没有任何效果。

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

1 个答案:

答案 0 :(得分:1)

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

它是在黑暗中拍摄的,但是错位标记的常见原因是混合使用不同坐标系的地图图层。 OpenLayers使用基于纬度和经度的平面坐标系统(EPSG:4326),而谷歌地图,微软虚拟地球,雅虎地图和其他商业API提供商使用球面坐标系统(EPSG:3857),也称为球面墨卡托投影。请参阅这些相关的SO问题herehere

幸运的是,OpenLayers拥有的API允许您在各种投影之间转换坐标,以便所有图层可以很好地协同工作。 OpenLayers文档专门用了'Spherical Mercator Projection'一章,其中包含一些示例。