Я хочу включить рисование на Картах Google, например (см. этот пример) Когда пользователь закончит рисовать, он нажмет кнопку «Сохранить», чтобы сохранить свои рисунки в базе данных или файле KML, что угодно :) .. Я не знаю, как сохранить часть? Может ли кто-нибудь помочь мне
Как сохранить состояние отрисовки карты (полигон, полилиния, маркеры)
Ответы (2)
Здесь http://jsfiddle.net/X66L4/1/ попробуйте нарисовать несколько кругов, нажмите СОХРАНИТЬ, затем отредактируйте круги. переключившись на курсор в виде руки и снова СОХРАНИТЬ, чтобы увидеть изменения.
Я показываю пример сохранения данных кругов, основная идея состоит в том, чтобы сохранить глобальный массив для каждого типа рисования (линия, многоугольник, маркер, круг) и использовать прослушиватель в диспетчере рисования для обнаружения каждого рисуемого типа (завершено) .
var circles = [];
google.maps.event.addDomListener(drawingManager, 'circlecomplete',
function(circle) {
circles.push(circle);
});
Причина сохранения всей ссылки на нарисованный объект состоит в том, чтобы продолжить отслеживание изменений. Поэтому вам понадобится массив и слушатель для каждого типа рисования.
Затем, когда вы захотите сохранить данные (вы можете делать это при каждом редактировании), выполните итерацию по массивам и извлеките минимальную информацию для их восстановления (центр, радиус, путь, широта и т. д.).
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
html, body, #map_canvas { margin: 0; padding: 0; height: 100% }
</style>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&libraries=drawing"></script>
<script type="text/javascript">
var myOptions = {
center: new google.maps.LatLng(-25,177.5),
zoom: 3,
mapTypeId: google.maps.MapTypeId.SATELLITE
};
var map;
function initialize() {
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
var drawingManager = new google.maps.drawing.DrawingManager({
drawingMode: google.maps.drawing.OverlayType.CIRCLE,
drawingControl: true,
drawingControlOptions: {
position: google.maps.ControlPosition.TOP_CENTER,
drawingModes: [google.maps.drawing.OverlayType.CIRCLE]
},
circleOptions: {
editable: true
}
});
drawingManager.setMap(map);
var circles = [];
google.maps.event.addDomListener(drawingManager, 'circlecomplete', function(circle) {
circles.push(circle);
});
google.maps.event.addDomListener(savebutton, 'click', function() {
document.getElementById("savedata").value = "";
for (var i = 0; i < circles.length; i++) {
var circleCenter = circles[i].getCenter();
var circleRadius = circles[i].getRadius();
document.getElementById("savedata").value += "circle((";
document.getElementById("savedata").value +=
circleCenter.lat().toFixed(3) + "," + circleCenter.lng().toFixed(3);
document.getElementById("savedata").value += "), ";
document.getElementById("savedata").value += circleRadius.toFixed(3) + ")\n";
}
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<button id="savebutton">SAVE</button>
<textarea id="savedata" rows="8" cols="40"></textarea>
<div id="map_canvas"></div>
</body>
</html>
По моему опыту, легче использовать dataLayer карты, чем диспетчер рисования. Попробуйте эту скрипку.
Показ элементов управления:
map.data.setControls(['Polygon']);
map.data.setStyle({
editable: true,
draggable: true
});
в этой функции вы можете увидеть Create, Read (localStorage) и Remove (не в таком порядке):
function loadPolygons(map) {
var data = JSON.parse(localStorage.getItem('geoData'));
map.data.forEach(function (f) {
map.data.remove(f);
});
console.log(data);
map.data.addGeoJson(data)
}