簡體   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