2009-12-02 3 views
8

OpenLayers.Feature.VectorのAPIドキュメントでは、Vector自体にはメソッドがまったくないことが記載されています。OpenLayers Vectorをプログラム的に移動するには?

私は、OpenLayers.Control.DragFeatureコントロールをマップに追加することで、ユーザーがベクターを移動させる方法を知っています。したがって、ユーザーがVectorを移動できる場合は、プログラムで移動する方法もあります。しかし、私はそれを行う方法を理解することはできません。

答えて

11

OpenLayers.Feature.Vectorオブジェクトは、geometryオブジェクトのメソッドを呼び出して移動します。ベクター自体は移動しません。これらのメソッドには、移動、回転、サイズ変更、および変換が含まれます。

OpenLayers.Geometryベースオブジェクトで定義されたメソッドはありませんが、適切な子オブジェクト(OpenLayersジオメトリ内に複数のレベルの継承があることに注意してください)のみでは見つかりません。 OpenLayers.Geometry.Collectionは良い例です。

プログラムでOpenLayersベクトルhereを移動する素晴らしい例があります。

+1

よしを、私は今、いくつかの量によって機能を移動するには、 'OpenLayers.Geometry.Point.move()'メソッドを使用することができています。しかし、その機能を特定の場所に移動する必要があります。それを行う簡単な方法はありますか、それを移動する必要がある量を計算しなければなりません。 –

+0

moveメソッドは、ジオメトリのxおよびyプロパティをオフセットすることによって機能します。ポイントを使用している場合は、上記のようにしてください。 function movePoint(point、x、y){ point.x = x; point.y = y; point.clearBounds(); あなたがここでのポイントを移動するためのソースを見てとることができ } :http://trac.openlayers.org/browser/trunk/openlayers/lib/OpenLayers/Geometry/Point.js より複雑な形状を使用した作業より多くの作業が必要になります。コレクションの移動実装については、こちらをご覧ください:http://trac.openlayers.org/browser/trunk/openlayers/lib/OpenLayers/Geometry/Collection.js – atogle

+0

ありがとう、movePoint()funktionはうまくいきます。 –

6

これは私の仕事:

geometry.move(Y_NextPosition - Y_CurrentPosition, X_NextPosition - X_CurrentPosition) 
+0

不必要な計算を避けるために、ポイントの 'x'と' y'値を直接設定できるようです。 –

+0

ジオメトリオブジェクトfeature.geometryまたはsth elseですか?私はこれを試してみましたが、うまくいかなかった理由は何ですか?var feature = vectorLayer.getFeatureById(id); feature.geometry.move(lon、lat); @ダニエルB –

関連する問題