私は描画マネージャを使用するマッピングアプリケーションを作成しました(そして選択可能なシェイプを実装しています)。プログラムは次のように動作します。ボタンをクリックした後にポリゴンを描画するとパスがポリゴンにマップされます。Googleマップのポリゴンを変更した後のイベントapi v3
このプロセスの後にポリゴンを編集すると、マッピング関数を再度呼び出す必要があります。しかし、私はこの部分を働かせることはできません。
私は次のコードを使用しようとしましたが、このリスナーが追加されたときにまだ形状が選択されていないため、常にエラーが発生します。私に何ができる?
google.maps.event.addListener(selectedShape, 'set_at', function() {
console.log("test");
});
google.maps.event.addListener(selectedShape, 'insert_at', function() {
console.log("test");
});
コードの
重要な部分:
function showDrawingManager(){
var managerOptions = {
drawingControl: true,
drawingControlOptions: {
position: google.maps.ControlPosition.TOP_CENTER,
drawingModes: [google.maps.drawing.OverlayType.MARKER,google.maps.drawing.OverlayType.POLYLINE,google.maps.drawing.OverlayType.POLYGON]
},
markerOptions: {
editable: true,
icon : '/largeTDGreenIcons/blank.png'
},
polygonOptions: {
fillColor:"#1E90FF",
strokeColor:"#1E90FF",
},
polylineOptions: {
strokeColor:"#FF273A"
}
}
var drawingManager = new google.maps.drawing.DrawingManager(managerOptions);
drawingManager.setMap(map);
return drawingManager;
}
function clearSelection() {
if (selectedShape) {
console.log("clearSelection");
selectedShape.setEditable(false);
selectedShape = null;
numberOfShapes--;
}
}
function setSelection(shape) {
console.log("setSelection");
clearSelection();
selectedShape = shape;
shape.setEditable(true);
numberOfShapes++;
//getInformation(shape);
}
function initialize(){
//....
var drawingManager = showDrawingManager();
google.maps.event.addListener(drawingManager, 'overlaycomplete', function(e) {
if (e.type != google.maps.drawing.OverlayType.MARKER) {
// Switch back to non-drawing mode after drawing a shape.
drawingManager.setDrawingMode(null);
// Add an event listener that selects the newly-drawn shape when the user
// mouses down on it.
var newShape = e.overlay;
newShape.type = e.type;
google.maps.event.addListener(newShape, 'click', function() {
setSelection(newShape);
});
setSelection(newShape);
}
});
このいくつかのマップではうまくいくかもしれませんが、オブジェクトがドラグしているときに大量のトリガイベントが発生することに注意してくださいed。私のコードでは、扱うには多すぎる!だから私はちょうど 'クリック'と 'ドラッグ'イベントに固執しなければならなかった。 – jjwdesign
jjwdesignのコメントに関して:私は同じ問題を抱えていました。これを解決するには、dragstartでイベントハンドラを削除し、dragendでそれらを再度追加します。一見すると魅力的に働くようです。 – Jochem
newShape.getPathは関数ではありません。私はこのエラーが発生しています... –