我已经使用美国国家地形测量局(我认为这叫做OpenSpace)生成的基于OpenLayers的应用程序接口创建了一个站点link text。我已经有了它,所以你可以点击地图来添加一个标记,然后我希望能够点击标记并在地图上拖动它。有没有一种简单的方法可以使用OpenSpace或OpenLayers apis来实现这一点。
发布于 2009-07-23 15:49:58
OpenLayers应用编程接口允许您向地图添加标记和要素。如果您添加的是功能而不是标记,则可以通过添加以下代码使其可拖动。
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文档OpenLayers api doc
发布于 2011-08-27 01:35:33
更简单的方法是使用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。
https://stackoverflow.com/questions/884692
复制相似问题