6

Googleはv3.11をマップしているので、draggableプロパティをPolygon、、Circleに設定することができRectangleます。例:new google.maps.Polygon({ draggable: true })

Circleと、Rectangleのようなイベントがありradius_changed、変更があった場合はサブスクライブします。center_changedbounds_changed

ただし、Polygonの場合、サブスクライブできるのは、、set_atおよびinsert_atremove_atイベントのみですpolygon.getPath()

そのため、ポリゴンをドラッグした後、ポリゴンの位置が変更/編集/移動された後、問題が発生しますが、この変更をリッスンするイベントはありません。

4

3 に答える 3

10

これを達成するためのより良い方法があります。パス位置の変更とパスへの新しいポイントを聞きたい場合は、次のコードを使用します。

place_polygon = new google.maps.Polygon({/*...*/});
var place_polygon_path = place_polygon.getPath()
google.maps.event.addListener(place_polygon_path, 'set_at', polygonChanged);
google.maps.event.addListener(place_polygon_path, 'insert_at', polygonChanged);

function polygonChanged(){
    console.log('Changed');
}
于 2014-04-20T05:51:13.527 に答える
8

「ドラッグ」イベントはどうですか?

それは私のために働く

于 2013-03-22T05:58:38.493 に答える
0

上記の回答で述べたように、dragstart/dragendイベントを使用してドラッグ中の最初と最後の位置を取得し、ポリゴンのパス座標を更新して更新することができます(polygonPath)。

私たちはこのようなことをすることができます:

let posInit: ILatLng;
let posLast: ILatLng;

this.area.addListener('dragstart', (event) => {
  posInit = event.latLng.toJSON();
});
this.area.addListener('dragend', (event) => {
  posLast = event.latLng.toJSON();
  polygonPath.forEach((p) => {
    p.lat += posLast.lat - posInit.lat;
    p.lng += posLast.lng - posInit.lng;
  });
});
于 2021-10-14T20:32:22.053 に答える