Javascript 动态移动标记
我正在使用Javascript 动态移动标记,javascript,openlayers,layer,markers,Javascript,Openlayers,Layer,Markers,我正在使用Openlayers.Layer和Openlayers.Marker在地图上显示一个标记 它的位置正确,我可以通过以下操作成功地显示和隐藏它: marker.display(布尔值) 但我试图在展示它之前改变它的位置,但没有成功。我已经试过了: var projections = { g: new OpenLayers.Projection("EPSG:4326"), p: new OpenLayers.Projection("EPSG:900913") }; var
Openlayers.Layer
和Openlayers.Marker
在地图上显示一个标记
它的位置正确,我可以通过以下操作成功地显示和隐藏它:
marker.display(布尔值)代码>
但我试图在展示它之前改变它的位置,但没有成功。我已经试过了:
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);
var px = map.getPixelFromLonLat(newlonlat);
marker.moveTo(px);
layer.redraw();
(未触发错误,但位置不变)
还试过这个,
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);
var px = map.getPixelFromLonLat(newlonlat);
marker.moveTo(px);
layer.redraw();
(它在getPixelFromLonLat
函数中抛出错误。错误:c为null
)
为什么我不能动态移动标记?最好的方法是什么
编辑:
使用第二个选项时,问题可能存在于我的位置投影变换中:
newopenlayers.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
对象,现在工作正常。不知道为什么,但它解决了它。为了解决这个问题,我做了:
marker.lonlat = new OpenLayers.LonLat(newlon, newlat);
layer.removeMarker(marker);
layer.addMarker(marker);
layer.redraw();
删除并添加相同的标记以更新其位置似乎很愚蠢,但它确实有效。但是,对大量标记执行此操作时,速度可能较慢。请尝试:
marker.lonlat = new OpenLayers.LonLat(newlon, newlat);
layer.drawMarker(marker);
(不是测试者)marker.moveTo对我来说很好:
var px = map.getPixelFromLonLat(new OpenLayers.LonLat(newLon,newLat));
marker.moveTo(px);
希望这能有所帮助:-)一个点击后向东移动10°的标记:如果有任何问题,请告诉我know@letiagoalves编辑了小提琴,现在标记从鼠标光标上跑开了:-)如果您的代码仍然无法运行,在使用map.getPixelFromLonLat
之前,我需要做newopenlayers.LonLat(newlon,newlat)。transform(projections.g,projections.p)
我想这就产生了一个问题,你在哪个投影之间转移?我在EPSG 4326和4324上试过这个,它似乎有效。参见中的函数randomLonLat,您可以在问题中看到投影。地图也是用这些投影创建的。