Ecco come lo faccio. Trova il centro approssimativo del poligono e aggiungi un marcatore, quindi aggiungi un indicatore di trascinamento all'indicatore. Al cambio lat/lng, sottrarre la differenza dal marcatore originale lat/lng, sottrarre la differenza a ciascuno dei percorsi, quindi impostare la posizione originale nella nuova posizione. Assicurarsi che nella chiamata API JavaScript che avete biblioteca = geometria, disegno
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;
}
Se avete domande, non esitate a contattarmi.
fonte
2012-06-08 07:06:58
Come ripensamento: ho scoperto che i miei oggetti Polygon venivano eseguiti molto più velocemente degli oggetti GPolygon in V2 - Non so come si comportano in V3, ma ho scoperto che creare i propri poligoni direttamente con SVG/VML si traduce in un oggetto molto più leggero che hai più controllo direttamente. Non sono sicuro che Google stia utilizzando SVG/VML o Canvas per disegnare i loro poligoni: è cambiato un paio di volte in tutte le versioni. – John