Kullanıcıların Google Haritalar API'sını kullanarak coğrafi çokgen "bölgeleri" oluşturmasına ve bunları bir veritabanına kaydetmesine olanak tanıyan bir uygulama yazıyorum. Her kullanıcı için yalnızca bir bölge olabilir, bu yüzden bunu el ile değiştirerek ve çizim araçlarını üst üste bindirerek sınırlandırıyorum. Bindirme tamamlandıktan sonra, kaydetme işlemini yapabildiğim ve veritabanımda sadece iyi kaydedebildiğim - bu yüzden bu bit çalışıyor. Dahası, poligonu veritabanından alıp haritada düzenlenebilir bir çokgen olarak görüntüleyebiliyorum. Gerçi karşılaşıyorum sorunlar şunlardır:Düzenlenebilir bir çizim yönetmeni poligonunu Google Haritalar'da ön yükleme
sokulan çokgenin noktalarını sürüklemeye çalışıyordu, onlar fareye "sıkışmış" olsun ve bırakın asla. Benim tahminim bir çeşit fareçık sorunu mu?
Halihazırda var olan bir çokgene rağmen, hala bir tane daha çizebilirim. Db'den çokgen yüklüyse çizim araçlarını daha önce saklamalı mıyım?
Veritabanından çekilen çokgen için bir olayı nasıl ekleyebilirim böylece köşedeki koordinatlarını yakalayabilirim?
Burada benim şimdiki kodunu görebilirsiniz: Aşağıdaki http://jsfiddle.net/FUUxz/ veya:
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: bu biraz eski ama biliyorum
<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>
bakınız [bu çalışma örneği] (http://www.geocodezip.com/blitz-gmap-editor/test5.html), (veritabanı parçası hariç) bütün bunlar, blitz- [göre etmez gmap-editörü] (http://code.google.com/p/blitz-gmap-editor/) – geocodezip
** ** ** yerine ** kullanmanız gerekir mouseup ** –
Neden bu soru google-map- etiketli api-2? Bu yalnızca Google Haritalar API'sı v3 ile ilgilidir. – geocodezip