1

我正在使用Openlayers.LayerandOpenLayers.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对象,现在它工作正常。不知道为什么,但它修复了它。

4

3 回答 3

2

marker.moveTo 对我来说很好用:

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

希望这可以帮助 :-)

于 2013-09-02T21:33:12.223 回答
1

要解决我所做的问题:

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

删除和添加相同的标记来更新其位置似乎很愚蠢,但它确实有效。但是,对一大组标记执行此操作可能会更慢。

于 2013-08-30T22:42:49.107 回答
0

尝试:

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

(不是睾丸)

于 2013-09-02T14:26:57.383 回答