Piszę aplikację, która pozwoli użytkownikom narysować "strefy" geograficzne za pomocą Google Maps API i zapisać je w bazie danych. Dla każdego użytkownika może być tylko jedna strefa, więc ograniczam to, przełączając się na dłoń i ukrywając narzędzia do rysowania na overlaycomplete. Po overlaycomplete, jestem w stanie trafić zapisać i zapisuje w mojej bazie danych dobrze - więc ten kawałek działa. Ponadto jestem w stanie pobrać wielokąt z bazy danych i wyświetlić go jako edytowalny wielokąt na mapie. Kwestie Mam mimo to:Wstępne ładowanie edytowalnego wieloboku rysownika w Google Maps
Gdy próbuje przeciągnąć punkty wstawionego wielokąta, dostają „Stuck” na myszy i nigdy nie zwalnia. Zgaduję, że to jakiś problem z mouseupem?
Mimo istniejącego wielokąta nadal mogę narysować inny. Czy powinienem po prostu ukryć narzędzia do rysowania na początku, jeśli wielobok jest ładowany z bazy danych?
Jak dołączyć wydarzenie do wielokątów pobieranych z bazy danych, aby można było uchwycić współrzędne jego wierzchołków?
Można zobaczyć mój aktualny kod tutaj: http://jsfiddle.net/FUUxz/ lub poniżej:
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>
See [ten przykład działa] (http://www.geocodezip.com/blitz-gmap-editor/test5.html), ma to wszystko (z wyjątkiem części bazy danych), na podstawie [blitz- edytor gmap] (http://code.google.com/p/blitz-gmap-editor/) – geocodezip
powinieneś użyć ** click ** zamiast ** mouseup ** –
Dlaczego to pytanie jest oznaczone jako google-maps- api-2? Jest to związane tylko z Google Maps API v3. – geocodezip