Javascript 使用Armonth Survey/Openlayers api拖动标记

Javascript 使用Armonth Survey/Openlayers api拖动标记,javascript,mapping,openlayers,Javascript,Mapping,Openlayers,我已经创建了一个基于OpenLayers的网站,使用了ArmonthSurvey(我想这叫做OpenSpace)开发的api。我有它,所以你可以点击地图添加一个标记,然后我想能够点击标记并在地图周围拖动它。使用OpenSpace或OpenLayers api有没有一种简单的方法可以做到这一点。OpenLayers api允许您向地图添加标记和功能。如果添加功能而不是标记,则可以通过添加以下代码使其可拖动 var vectorLayer = new OpenLayers.Layer.Vector(

我已经创建了一个基于OpenLayers的网站,使用了ArmonthSurvey(我想这叫做OpenSpace)开发的api。我有它,所以你可以点击地图添加一个标记,然后我想能够点击标记并在地图周围拖动它。使用OpenSpace或OpenLayers api有没有一种简单的方法可以做到这一点。

OpenLayers api允许您向地图添加标记和功能。如果添加功能而不是标记,则可以通过添加以下代码使其可拖动

var vectorLayer = new OpenLayers.Layer.Vector("Vector Layer");
var osMap = new OpenSpace.Map('map');
osMap.addLayer(vectorLayer);

var modifyFeaturesControl = new OpenLayers.Control.ModifyFeature(vectorLayer);
modifyFeaturesControl.mode = OpenLayers.Control.ModifyFeature.RESHAPE;
osMap.addControl(modifyFeaturesControl);
modifyFeaturesControl.activate();
vectorLayer.events.register('featuremodified', vectorLayer, function(feature) {
   //custom behavior
});
这将允许您在地图周围拖动要素。如果要在拖动功能时添加自定义行为,可以在vectorLayer上注册侦听器。例如,要在修改(即拖动和释放)功能时注册侦听器,您需要使用以下代码

var vectorLayer = new OpenLayers.Layer.Vector("Vector Layer");
var osMap = new OpenSpace.Map('map');
osMap.addLayer(vectorLayer);

var modifyFeaturesControl = new OpenLayers.Control.ModifyFeature(vectorLayer);
modifyFeaturesControl.mode = OpenLayers.Control.ModifyFeature.RESHAPE;
osMap.addControl(modifyFeaturesControl);
modifyFeaturesControl.activate();
vectorLayer.events.register('featuremodified', vectorLayer, function(feature) {
   //custom behavior
});

有关可侦听事件的完整列表,请参见OpenLayers api文档,因为更简单的方法是使用openlayer拖动控件,该控件以矢量层为目标

假设一个包含图标的向量层(相对于OL开发人员不鼓励使用的标记,它更受欢迎),称为向量,您可以简单地执行以下操作:

var drag=new OpenLayers.Control.DragFeature(vectors);

map.addControl(drag);
drag.activate();
使用拖动控件的另一个优点是,可以挂接到各种回调,这些回调返回特性和像素位置,例如onStart和onDrag。例如

var drag=new OpenLayers.Control.DragFeature(vectors,{    
     'onDrag':function(feature, pixel){
           console.log(pixel.x);//this can be used to do something else, such as move another feature
     }
});

有关更多详细信息,请参阅。

我刚刚使用了上面的代码,除了一个问题外,它工作得很好:当拖动/移动标记,然后放大或缩小时,我的矢量功能消失。有什么想法吗?