Así es como lo hago. Encuentre el centro aproximado del polígono y agregue un marcador, luego agregue un detector de arrastre al marcador. En el cambio lat/lng, reste la diferencia del marcador original lat/lng, reste la diferencia a cada una de las rutas, luego, establezca la posición original en la nueva posición. Asegúrese de que en su llamada a la API Javascript que tiene la biblioteca = geometría, dibujo
google.maps.event.addListener(draw, 'overlaycomplete', function(shape) {
// POLYGON
if (shape.type == 'polygon') {
var bounds = new google.maps.LatLngBounds(); var i;
var path = shape.overlay.getPath();
for (i = 0; i < path.length; i++) { bounds.extend(path.getAt(i)); }
shape.latLng = bounds.getCenter();
marker = getMarker(map,shape);
shape.overlay.marker = marker;
markers.push(marker);
}
google.maps.event.addListener(marker, 'drag', function(event) {
shape.overlay.move(event.latLng, shape, path);
});
google.maps.event.addListener(shape.overlay, 'rightclick', function() {
this.setMap(null);
this.marker.setMap(null);
draw.setDrawingMode('polygon');
});
});
}
google.maps.Polygon.prototype.move = function(latLng, shape, p) {
var lat = latLng.lat();
var lng = latLng.lng();
latDiff = shape.latLng.lat()-lat;
lngDiff = shape.latLng.lng()-lng;
for (i = 0; i < p.length; i++) {
pLat = p.getAt(i).lat();
pLng = p.getAt(i).lng();
p.setAt(i,new google.maps.LatLng(pLat-latDiff,pLng-lngDiff));
}
shape.latLng = latLng;
}
function getMarker(map,shape){
var infowindow = new google.maps.InfoWindow();
if(shape.type=='polygon'){ latLng = shape.latLng; }
marker = new google.maps.Marker({
position: latLng,
map:map,
draggable:true,
clickable: true,
animation: google.maps.Animation.DROP
});
shape.overlay.marker = marker;
shape.overlay.bindTo('center',marker,'position');
google.maps.event.addListener(marker, 'click', (function(marker) {
return function() {
infowindow.setContent('polygon');
infowindow.open(map, marker);
toggleBounce(marker);
}
})(marker));
google.maps.event.addListener(infowindow,'closeclick', (function(marker) {
return function() {
marker.setAnimation(null);
}
})(marker));
return marker;
}
Si tienes alguna pregunta, no dude en ponerse en contacto conmigo.
Como una idea de último momento: descubrí que mis objetos Polygon funcionaban mucho más rápido que los objetos de GPolygon en V2. No sé cómo funcionan en V3, pero descubrí que la creación de tus propios polígonos directamente con SVG/VML da como resultado un objeto mucho más liviano tienes más control sobre directamente. No estoy seguro si Google está usando SVG/VML o Canvas ahora para dibujar sus polígonos; ha cambiado un par de veces en todas las versiones. – John