2009-05-19 10 views
2

私は、OpenLayersに基づいたOrdnance Survey(これはOpenSpaceと呼ばれる)のAPIを使用してlink textというサイトを作成しました。地図をクリックしてマーカーを追加すると、マーカーをクリックしてマップ上でドラッグできるようになります。 OpenSpaceまたはOpenLayers APIを使用してこれを行う簡単な方法はありますか?Ordnance Survey/Openlayersでマーカーをドラッグapi

答えて

6

OpenLayers APIを使用すると、マーカーとフィーチャーをマップに追加できます。 MarkerではなくFeaturesを追加すると、次のコードを追加することでマーカーをドラッグ可能にすることができます。

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にリスナーを登録できます。例えば、フィーチャーが修正(すなわちドラッグされ、リリースされた)時にリスナーを登録するには、次のコードを使用する必要があります。ベクトル層をとり、これを行うための簡単な方法は、openlayerドラッグコントロールを使用しているとしてOpenLayersをAPIのドキュメントOpenLayers api doc

+0

私はちょうど上記のコードを使用し、1つの問題とは別に問題なく動作します。マーカーをドラッグ/移動してズームインまたはズームアウトすると、ベクター機能が消えます。何か案は? – nickdos

1

を見て聞くことができるイベントの完全なリストについては、

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

ターゲット。

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

map.addControl(drag); 
drag.activate(); 

ドラッグコントロールを使用しての他の利点は次のとおりです、ベクトルと呼ばれるアイコンを含むベクトル層を(これはOLの開発者が使用して思いとどまらマーカーに好まれている)、あなたは、単に行うことができと仮定

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を参照してください。

関連する問題