Я пытаюсь разработать приложение, в котором пользователь может нарисовать многоугольник на картах Google и добавить дополнительную информацию о нем в всплывающем окне.После ввода информации пользователь должен нажать «сохранить», чтобы сохранить информацию, или «удалить», если полигон должен быть удален.Под удаленным я имею в виду, что он больше не виден на карте.
Я попытался следующий код безуспешно.Похоже, проблема заключается в области действия функции deletePolygon внизу.Если я ввожу polygon.setMap(null);
в функции google.maps.event.addListener
, он удаляет многоугольник с карты, но я не знаю, как вызвать его там при нажатии кнопки.
PS: я вставил весь скрипт всекция "html" в JSFiddle, что, вероятно, неправильно.Извините!
<!DOCTYPE html>
<html>
<head>
<title>Drawing Tools</title>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<style>
/* Always set the map height explicitly to define the size of the div
* element that contains the map. */
#map {
width: 1200px;
height: 800px;
}
/* Optional: Makes the sample page fill the window. */
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
</style>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&libraries=drawing&callback=initMap" async defer></script>
<script>
// hier die Einstellungen für den Schutz vor CSRF
var map;
var infoWindow;
//Einstellungen der Grundkarte
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
center: {
lat: 49.819227,
lng: 19.230721
},
zoom: 13
});
//Einstellungen des Drawing Managers
var drawingManager = new google.maps.drawing.DrawingManager({
drawingMode: google.maps.drawing.OverlayType.null, //Zeichnen Standardmäßig nicht ausgewählt wenn die Karte geladen wird (alternativ: polygon, marker etc)
drawingControl: true, //drawing manger wird angezeigt
drawingControlOptions: {
position: google.maps.ControlPosition.TOP_CENTER, //position des drawing managers
drawingModes: ['polygon'] // Auswahlmöglichkeiten der Werkzeuge :'marker', 'circle', 'polygon', 'polyline', 'rectangle'
},
//Optionen zur Darstellung Polygon
polygonOptions: {
fillColor: '#ffff00', //Farbwahl
fillOpacity: 0.5,
strokeWeight: 3,
clickable: false, //erweiterte Funktion
editable: false,
zIndex: 1
}
});
drawingManager.setMap(map);
//Erstellung einer Infobox zur Bennenung der Probe
function polygonCenter(poly) {
var lowx,
highx,
lowy,
highy,
lats = [],
lngs = [],
vertices = poly.getPath();
for (var i = 0; i < vertices.length; i++) {
lngs.push(vertices.getAt(i).lng());
lats.push(vertices.getAt(i).lat());
}
lats.sort();
lngs.sort();
lowx = lats[0];
highx = lats[vertices.length - 1];
lowy = lngs[0];
highy = lngs[vertices.length - 1];
center_x = lowx + ((highx - lowx) / 2);
center_y = lowy + ((highy - lowy) / 2);
return (new google.maps.LatLng(center_x, center_y));
}
//InfoBox Text
html = "<table>" +
"<tr>" +
"<td>Bezeichnung:</td>" +
"<td><input type='text' id='feldbezeichnung'/> </td>" +
"</tr>" +
"<tr>" +
"<td><input type='button' value='save' onclick='saveData()'/></td>" +
"<td><input type='button' value='delete' onclick='deletePolygon()'/></td>" +
"</tr>";
//Erstellung einer Infobox wenn ein Feld eingezeichnet wurde
google.maps.event.addListener(drawingManager, 'polygoncomplete', function(polygon) {
drawingManager.setDrawingMode(null);
//Öffnen der Infobox
var InfoBoxLoc = polygonCenter(polygon); //Koordinaten der Infobox zur Beschriftung
infowindow = new google.maps.InfoWindow({
content: html,
position: InfoBoxLoc,
});
infowindow.open(map);
//it works here but how to trigger it on button press from the infowindow?
//##################polygon.setMap(null);
});
//Ende Drawing manager
} //Ende Init Map
//funktion zum speichern der Daten
function saveData() {
var FieldName = escape(document.getElementById("feldbezeichnung").value);
console.log(FieldName)
//schließt das InfoWindo nach erfolgreicher Eingabe
infowindow.close();
}
//funktion zum löschen des Polygon bei falscher Eingabe
function deletePolygon() {
infowindow.close();
console.log(polygon)
polygon.setMap(null);
}
</script>
</head>
<body>
<!--Einbinden von Google Maps -->
<div id="map"></div>
</body>
</html>