2

我使用基于 OpenLayers 的 Ordnance Survey(我认为这称为 OpenSpace)生成的 api创建了一个站点链接文本。我已经有了它,因此您可以单击地图以添加标记,然后我希望能够单击标记并将其拖到地图上。是否有使用 OpenSpace 或 OpenLayers api 的简单方法来执行此操作。

4

2 回答 2

6

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 上注册侦听器。例如,要在修改功能(即拖动和释放)时注册监听器,您需要使用以下代码。

vectorLayer.events.register('featuremodified', vectorLayer, function(feature) {
   //custom behavior
});

有关可以收听的事件的完整列表,请参阅 OpenLayers api doc OpenLayers api doc

于 2009-07-23T15:49:58.053 回答
1

更简单的方法是使用 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
     }
});

有关详细信息,请参阅http://trac.osgeo.org/openlayers/browser/trunk/openlayers/lib/OpenLayers/Control/DragFeature.js 。

于 2011-08-26T17:35:33.330 回答