2009-05-19 69 views
2

我已經創建了一個基於OpenLayers的使用由Ordnance Survey(我認爲這叫做OpenSpace)生成的API的網站link text。我已經得到了它,所以你可以點擊地圖添加一個標記,然後我想要點擊標記並在地圖上拖動它。有沒有簡單的方法來使用OpenSpace或OpenLayers API進行此操作。使用Ordnance Survey/Openlayers API拖動標記

回答

6

OpenLayers api允許您將標記和要素添加到地圖。如果添加Features而不是Markers,則可以通過添加以下代碼使它們可拖動。

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

+0

我剛剛使用了上面的代碼,除了一個問題之外,它工作得很好:當拖動/移動標記然後放大或縮小時,我的矢量特徵消失。有任何想法嗎? – nickdos 2010-08-20 05:13:23

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瞭解更多詳情。