我有OpenLayers.Map
(map
)OpenLayers.Layer.Vector
(map.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()
似乎根本没有任何效果。
为什么会发生这种情况,如何让它停止?如果做不到这一点,我该如何强制地图自行修复(就像我移动地图时一样)。
答案 0 :(得分:1)
您提供的代码段不足以诊断您遇到的问题。
它是在黑暗中拍摄的,但是错位标记的常见原因是混合使用不同坐标系的地图图层。 OpenLayers使用基于纬度和经度的平面坐标系统(EPSG:4326),而谷歌地图,微软虚拟地球,雅虎地图和其他商业API提供商使用球面坐标系统(EPSG:3857),也称为球面墨卡托投影。请参阅这些相关的SO问题here和here。
幸运的是,OpenLayers拥有的API允许您在各种投影之间转换坐标,以便所有图层可以很好地协同工作。 OpenLayers文档专门用了'Spherical Mercator Projection'一章,其中包含一些示例。