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