我使用基于OpenLayers的Ordnance Survey(我认为这称为OpenSpace)生成的api创建了一个网站link text。我已经得到它所以你可以点击地图添加一个标记,然后我想能够点击标记并将其拖动到地图上。有没有一种简单的方法可以使用OpenSpace或OpenLayers apis。
答案 0 :(得分: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
答案 1 :(得分: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。