[英]OpenLayers.Map setCenter causes misplaced OpenLayers.Vector elements
我有一个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()
似乎根本没有任何效果。
为什么会发生这种情况,如何停止? 失败的话,我该怎么做才能迫使地图自行修复(就像我移动地图时所做的那样)。
您提供的代码段不足以诊断您遇到的问题。
这是在黑暗中拍摄的,但标记放错位置的常见原因是混合使用不同坐标系的地图图层。 OpenLayers使用基于纬度和经度的平面坐标系(EPSG:4326),而Google Maps,Microsoft Virtual Earth,Yahoo Maps和其他商业API提供者使用也称为Spherical Mercator Projection的球坐标系(EPSG:3857)。 在此处和此处查看这些相关的SO问题。
幸运的是,OpenLayers拥有API,可让您在各种投影之间转换坐标,以便所有图层都可以很好地协同工作。 OpenLayers文档将整章专门介绍了“球形墨卡托投影” ,其中包含一些示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.