- Omówienie
- Korzystanie z Biblioteki
- Opcje DrawingManager
- Aktualizowanie kontrolki narzędzi do rysowania
- Wydarzenia związane z rysowaniem
Przegląd
Klasa DrawingManager udostępnia graficzny interfejs, który umożliwia użytkownikom rysowanie na mapie wielokątów, prostokątów, linii łamanych, okręgów i markerów.
Korzystanie z biblioteki
Narzędzia do rysowania to samodzielna biblioteka, oddzielona od głównego kodu JavaScript interfejsu Maps API. Aby korzystać z funkcji zawartych w tej bibliotece, musisz najpierw wczytać ją za pomocą parametru libraries w adresie URL inicjowania interfejsu Maps API:
<script async
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&libraries=drawing&callback=initMap">
</script>Po dodaniu parametru bibliotek możesz utworzyć DrawingManagerobiekt w ten sposób:
var drawingManager = new google.maps.drawing.DrawingManager(); drawingManager.setMap(map);
Opcje DrawingManager
Konstruktor DrawingManager przyjmuje zestaw opcji, które określają zestaw wyświetlanych elementów sterujących, ich położenie i początkowy stan rysowania.
- Właściwość
drawingModeobiektuDrawingManagerokreśla początkowy stan rysowania obiektu DrawingManager. Akceptuje stałą wartośćgoogle.maps.drawing.OverlayType. Domyślna wartość tonull. W takim przypadku po zainicjowaniu DrawingManager kursor znajduje się w trybie innym niż rysowanie. - Właściwość
drawingControlobiektuDrawingManagerokreśla widoczność interfejsu wyboru narzędzi do rysowania na mapie. Może mieć wartość logiczną. - Możesz też określić położenie elementu sterującego i rodzaje nakładek, które mają być w nim reprezentowane, za pomocą właściwości
drawingControlOptionselementuDrawingManager.positionokreśla położenie elementu sterującego rysowaniem na mapie i akceptuje stałągoogle.maps.ControlPosition.drawingModesto tablica stałychgoogle.maps.drawing.OverlayType, która określa typy nakładek do uwzględnienia w selektorze kształtów elementu sterującego rysowaniem. Ikona dłoni będzie zawsze widoczna, dzięki czemu użytkownik będzie mógł wchodzić w interakcję z mapą bez rysowania. Kolejność narzędzi w kontrolce będzie zgodna z kolejnością, w jakiej zostały zadeklarowane w tablicy.
- Każdemu typowi nakładki można przypisać zestaw właściwości domyślnych, które określają wygląd nakładki po jej utworzeniu. Są one zdefiniowane we właściwości
{overlay}Optionsnakładki (gdzie{overlay}oznacza typ nakładki). Na przykład właściwości wypełnienia, właściwości obrysu, indeks Z i klikalność okręgu można zdefiniować za pomocą właściwościcircleOptions. Jeśli zostaną przekazane jakiekolwiek wartości rozmiaru, lokalizacji lub mapy, zostaną one zignorowane. Pełne informacje o tym, które właściwości można ustawić, znajdziesz w dokumentacji API.
Uwaga: aby po utworzeniu kształtu można było go edytować, ustaw jego właściwość editable na true.
TypeScript
// This example requires the Drawing library. Include the libraries=drawing // parameter when you first load the API. For example: // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=drawing"> function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { center: { lat: -34.397, lng: 150.644 }, zoom: 8, } ); const drawingManager = new google.maps.drawing.DrawingManager({ drawingMode: google.maps.drawing.OverlayType.MARKER, drawingControl: true, drawingControlOptions: { position: google.maps.ControlPosition.TOP_CENTER, drawingModes: [ google.maps.drawing.OverlayType.MARKER, google.maps.drawing.OverlayType.CIRCLE, google.maps.drawing.OverlayType.POLYGON, google.maps.drawing.OverlayType.POLYLINE, google.maps.drawing.OverlayType.RECTANGLE, ], }, markerOptions: { icon: "https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png", }, circleOptions: { fillColor: "#ffff00", fillOpacity: 1, strokeWeight: 5, clickable: false, editable: true, zIndex: 1, }, }); drawingManager.setMap(map); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// This example requires the Drawing library. Include the libraries=drawing // parameter when you first load the API. For example: // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=drawing"> function initMap() { const map = new google.maps.Map(document.getElementById("map"), { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); const drawingManager = new google.maps.drawing.DrawingManager({ drawingMode: google.maps.drawing.OverlayType.MARKER, drawingControl: true, drawingControlOptions: { position: google.maps.ControlPosition.TOP_CENTER, drawingModes: [ google.maps.drawing.OverlayType.MARKER, google.maps.drawing.OverlayType.CIRCLE, google.maps.drawing.OverlayType.POLYGON, google.maps.drawing.OverlayType.POLYLINE, google.maps.drawing.OverlayType.RECTANGLE, ], }, markerOptions: { icon: "https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png", }, circleOptions: { fillColor: "#ffff00", fillOpacity: 1, strokeWeight: 5, clickable: false, editable: true, zIndex: 1, }, }); drawingManager.setMap(map); } window.initMap = initMap;
Wypróbuj
Aktualizowanie narzędzi do rysowania
Po utworzeniu obiektu DrawingManager możesz go zaktualizować, wywołując setOptions() i przekazując nowe wartości.
drawingManager.setOptions({ drawingControlOptions: { position: google.maps.ControlPosition.BOTTOM_LEFT, drawingModes: ['marker'] } });
Aby ukryć lub wyświetlić element sterujący narzędziami do rysowania:
// To hide: drawingManager.setOptions({ drawingControl: false }); // To show: drawingManager.setOptions({ drawingControl: true });
Aby usunąć element sterujący narzędziami do rysowania z obiektu map:
drawingManager.setMap(null);
Ukrycie elementu sterującego rysowaniem powoduje, że element sterujący narzędziami do rysowania nie jest wyświetlany, ale wszystkie funkcje klasy DrawingManager są nadal dostępne.
W ten sposób możesz wdrożyć własne ustawienie. Usunięcie elementu DrawingManager z obiektu map wyłącza wszystkie funkcje rysowania. Aby przywrócić funkcje rysowania, należy ponownie dołączyć element do mapy za pomocą funkcji drawingManager.setMap(map) lub utworzyć nowy obiekt DrawingManager.
Wydarzenia związane z rysowaniem
Gdy tworzona jest nakładka kształtu, wywoływane są 2 zdarzenia:
{overlay}complete(gdzie{overlay}oznacza typ nakładki, np.circlecomplete,polygoncompleteitp.). Odwołanie do nakładki jest przekazywane jako argument.- Zdarzenie
overlaycomplete. Jako argument przekazywany jest literał obiektu zawierającyOverlayTypei odwołanie do nakładki.
google.maps.event.addListener(drawingManager, 'circlecomplete', function(circle) { var radius = circle.getRadius(); }); google.maps.event.addListener(drawingManager, 'overlaycomplete', function(event) { if (event.type == 'circle') { var radius = event.overlay.getRadius(); } });
Pamiętaj, że podczas rysowania na mapie wyłączone są zdarzenia google.maps.Map, takie jak click i mousemove.