动态移动标记

时间:2013-08-30 16:28:25

标签: javascript openlayers layer markers

我正在使用Openlayers.LayerOpenLayers.Marker在地图上显示标记。

它的位置正确,我可以成功地展示并隐藏它:

marker.display(boolean);

但我在显示之前尝试改变其位置,但没有成功。我已经尝试过了:

var projections = {
    g: new OpenLayers.Projection("EPSG:4326"),
    p: new OpenLayers.Projection("EPSG:900913")
};
var newlonlat = new OpenLayers.LonLat(newlon, newlat).transform(projections.g, projections.p);

marker.lonlat = newlonlat
layer.redraw();

(没有触发错误但位置没有改变)

并尝试了这个:

var px = map.getPixelFromLonLat(newlonlat);
marker.moveTo(px);
layer.redraw();

(它在getPixelFromLonLat函数内引发错误。错误:c is null

为什么我不能动态移动标记,最好的方法是什么?

编辑:

使用第二个选项时,问题可能在于我的位置投影转换: new OpenLayers.LonLat(newlon, newlat).transform(projections.g, projections.p);

编辑2

所以,更深入的我发现marker.map属性是null,所以在初始化后我做了:

var marker = new OpenLayers.Marker(lonlat, icon);
marker.map = map;

其中map是OpenLayers.Map对象,现在它正常工作。不知道为什么,但它修复了它。

3 个答案:

答案 0 :(得分:2)

marker.moveTo对我来说很好:

 var px = map.getPixelFromLonLat(new OpenLayers.LonLat(newLon,newLat));
 marker.moveTo(px);

希望这会有所帮助: - )

答案 1 :(得分:1)

解决我遇到的问题:

marker.lonlat = new OpenLayers.LonLat(newlon, newlat);
layer.removeMarker(marker);
layer.addMarker(marker);
layer.redraw();

似乎很愚蠢的删除和添加相同的标记只是更新其位置,但它的工作原理。但是,对一大组标记执行此操作时可能会更慢。

答案 2 :(得分:0)

尝试:

marker.lonlat = new OpenLayers.LonLat(newlon, newlat);
layer.drawMarker(marker);

(不是testet)