Sto scrivendo un'applicazione che consentirà agli utenti di disegnare "zone" poligonali geografiche utilizzando l'API di Google Maps e salvarle in un database. Ci può essere una sola zona per utente, quindi sto limitando questo passando alla mano e nascondendo gli strumenti di disegno su overlaycomplete. Dopo aver completato l'overlay, sono in grado di salvare save e salva nel mio database bene, quindi questo bit funziona. Inoltre, sono in grado di recuperare il poligono dal database e visualizzarlo come un poligono modificabile sulla mappa. I problemi che sto avendo però sono:Pre-caricamento di un poligono modificatore disegno in Google Maps
Quando si cerca di trascinare i punti del poligono inserita, ottengono "bloccato" per il mouse e non rilasciano. La mia ipotesi è una sorta di problema di mouseup?
Nonostante un poligono già esistente, sono ancora in grado di disegnarne un altro. Dovrei semplicemente nascondere gli strumenti di disegno all'inizio se un poligono viene caricato dal db?
Come si collega un evento al poligono estratto dal database in modo da poter acquisire le sue coordinate di vertici?
Potete vedere il mio codice corrente qui: http://jsfiddle.net/FUUxz/ o al di sotto:
JS:
var map; // Global declaration of the map
var iw = new google.maps.InfoWindow(); // Global declaration of the infowindow
var lat_longs = new Array();
var markers = new Array();
var drawingManager;
function initialize() {
var myLatlng = new google.maps.LatLng(40.9403762, -74.1318096);
var myOptions = {
zoom: 13,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
drawingManager = new google.maps.drawing.DrawingManager({
drawingMode: google.maps.drawing.OverlayType.POLYGON,
drawingControl: true,
drawingControlOptions: {
position: google.maps.ControlPosition.TOP_CENTER,
drawingModes: [google.maps.drawing.OverlayType.POLYGON]
},
polygonOptions: {editable:true,fillColor:'#ff0000',strokeColor:'#ff0000',strokeWeight:2}
});
drawingManager.setMap(map);
google.maps.event.addListener(drawingManager, "overlaycomplete", function(event) {
var newShape = event.overlay;
newShape.type = event.type;
if (event.type==google.maps.drawing.OverlayType.POLYGON) {
overlayClickListener(event.overlay);$('#polygon').val(event.overlay.getPath().getArray());drawingManager.setOptions({drawingMode:null,drawingControl:false});
}
});
var polygon_plan_0 = [
new google.maps.LatLng(40.9534555976547, -74.0871620178223)
,
new google.maps.LatLng(40.9410084152192, -74.0948867797852)
,
new google.maps.LatLng(40.9411380854622, -74.1165161132812)
,
new google.maps.LatLng(40.9490474888751, -74.1221809387207)
,
new google.maps.LatLng(40.955140973234, -74.124584197998)
,
new google.maps.LatLng(40.9604561066844, -74.1153144836426)
,
new google.maps.LatLng(40.9534555976547, -74.0871620178223)
];
lat_longs.push(new google.maps.LatLng(40.9534555976547, -74.0871620178223));
lat_longs.push(new google.maps.LatLng(40.9410084152192, -74.0948867797852));
lat_longs.push(new google.maps.LatLng(40.9411380854622, -74.1165161132812));
lat_longs.push(new google.maps.LatLng(40.9490474888751, -74.1221809387207));
lat_longs.push(new google.maps.LatLng(40.955140973234, -74.124584197998));
lat_longs.push(new google.maps.LatLng(40.9604561066844, -74.1153144836426));
lat_longs.push(new google.maps.LatLng(40.9534555976547, -74.0871620178223));
var polygon_0 = new google.maps.Polygon({
path: polygon_plan_0,
strokeColor: "#ff0000",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#ff0000",
fillOpacity: 0.3,
editable: true
});
polygon_0.setMap(map);
google.maps.event.addListener(polygon_0, "mouseup", function(event) {
overlayClickListener(event.overlay);$('#polygon').val(event.overlay.getPath().getArray());drawingManager.setOptions({drawingMode:null,drawingControl:false});
});
}
function createMarker(markerOptions) {
var marker = new google.maps.Marker(markerOptions);
markers.push(marker);
lat_longs.push(marker.getPosition());
return marker;
}
initialize();
function overlayClickListener(overlay) {
google.maps.event.addListener(overlay, "mouseup", function(event){
$('#polygon').val(overlay.getPath().getArray());
});
}
HTML:
<div id="map_canvas" style="width:100%; height:450px;"></div>
<form action="http://garbagedayreminder.com/test/save" method="post" accept-charset="utf-8" id="map_form">
<input type="text" name="polygon" value="" id="polygon" />
<input type="submit" name="save" value="Save!" id="save" />
</form>
Sede [questo esempio di lavoro] (http://www.geocodezip.com/blitz-gmap-editor/test5.html), fa tutto questo (tranne la parte del database), basata su [blitz- gmap-editor] (http://code.google.com/p/blitz-gmap-editor/) – geocodezip
dovresti usare ** clic ** invece di ** mouseup ** –
Perché questa domanda è contrassegnata da google-maps- API-2? È collegato solo all'API di Google Maps v3. – geocodezip