Zrobiłem aplikację mapującą, która używa menedżera rysunku (i implementuje wybieralne kształty); Program działa w następujący sposób: po zakończeniu rysowania wielokąta po kliknięciu przycisku na ścieżce jest odwzorowywany na wielokącie.wydarzenie po modyfikacji wielokąta w mapach google api v3
Kiedy wielokąt jest edytowany po tym procesie, chcę ponownie wywołać funkcję mapowania. Jednak nie mogę uzyskać tej części pracy;
Próbowałem użyć następującego kodu, ale zawsze pojawia się błąd, ponieważ nie ma jeszcze zaznaczonego kształtu, gdy ten słuchacz zostanie dodany. Co mogę zrobić?
google.maps.event.addListener(selectedShape, 'set_at', function() {
console.log("test");
});
google.maps.event.addListener(selectedShape, 'insert_at', function() {
console.log("test");
});
ważne fragmenty kodu:
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);
}
});
ten może działać z niektórymi mapami, ale należy pamiętać, że spowoduje to uruchomienie dużej ilości wyzwalanych zdarzeń podczas przeciągania obiektu ed. Dla mojego kodu, zbyt wiele do obsłużenia! Musiałem więc trzymać się tylko zdarzeń "kliknij" i "przeciągnij". – jjwdesign
W odniesieniu do komentarza jjwdesign: Miałem ten sam problem i rozwiązałem go, usuwając procedury obsługi zdarzeń na dragstart i dodając je ponownie podczas przeciągania. Na pierwszy rzut oka wydaje się działać jak urok. – Jochem
newShape.getPath nie jest funkcją. Otrzymuję ten błąd ... –