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,您可以在问题中看到投影。地图也是用这些投影创建的。