繁体   English   中英

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

[英]OpenLayers.Map setCenter causes misplaced OpenLayers.Vector elements

我有一个OpenLayers.Mapmap有一个) OpenLayers.Layer.Vectormap.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM