- Wprowadzenie
- Właściwości symbolu
- Symbole wstępnie zdefiniowane
- Dodawanie symbolu do znacznika
- Dodawanie symbolu do polilinii
- Animowanie symbolu
Wprowadzenie
Symbol
to ikona wektorowa, która może być wyświetlana na obiekcie Marker
lub Polyline
. Kształt symbolu jest zdefiniowany przez ścieżkę w notacji ścieżki SVG.
Chociaż właściwość path
jest jedyną wymaganą właściwością, obiekt Symbol
obsługuje wiele innych właściwości, które umożliwiają dostosowywanie aspektów wizualnych, takich jak kolor i grubość obrysu oraz wypełnienie. Zobacz listę właściwości.
W klasie SymbolPath
dostępnych jest kilka wstępnie zdefiniowanych symboli. Ich listę znajdziesz poniżej.
Właściwości symbolu
Pamiętaj, że domyślne działanie elementu Symbol
różni się nieznacznie w zależności od tego, czy pojawia się on na znaczniku czy na polilinie. Te różnice zostały opisane na liście właściwości poniżej.
Symbol
obsługuje te właściwości:
path
(wymagany) to ścieżka definiująca kształt symbolu. Możesz użyć jednej z wstępnie zdefiniowanych ścieżek wgoogle.maps.SymbolPath
lub zdefiniować ścieżkę niestandardową za pomocą notacji ścieżki SVG. Uwaga: wektorowe ścieżki na linii łamanej muszą mieścić się w kwadracie o wymiarach 22 x 22 piksele. Jeśli ścieżka zawiera punkty poza tym kwadratem, musisz dostosować właściwości symboluscale
do wartości ułamkowej, np.0,2, aby uzyskane punkty po skalowaniu mieściły się w kwadracie.anchor
ustawia pozycję symbolu względem znacznika lub linii łamanej. Współrzędne ścieżki symbolu są przesunięte w górę i w lewo o odpowiednio współrzędne x i y kotwicy. Domyślnie symbol jest zakotwiczony na poziomie(0, 0)
. Pozycja jest wyrażona w tym samym układzie współrzędnych co ścieżka symbolu.fillColor
to kolor wypełnienia symbolu (czyli regionu ograniczonego przez kreskę). Obsługiwane są wszystkie kolory CSS3 z wyjątkiem rozszerzonych kolorów o nazwie. Domyślny kolor symboli na znacznikach to „czarny”. W przypadku symboli na liniach łamanych domyślnie jest używany kolor obrysu odpowiadającej linii łamanej.fillOpacity
określa względną przezroczystość (czyli brak przezroczystości) wypełnienia symbolu. Wartości mieszczą się w zakresie od 0,0 (przezroczystość) do 1,0 (nieprzezroczystość). Wartość domyślna to 0,0.rotation
to kąt obrotu symbolu wyrażony w stopniach zgodnie z ruchem wskazówek zegara. Domyślnie obrót znacznika symbolu wynosi 0, a symbol na polilinii jest obracany o kąt krawędzi, na której się znajduje. Ustawienie rotacji symbolu na polilinii spowoduje, że symbol nie będzie już podążać za krzywizną linii.scale
określa, o ile zmniejszyć rozmiar symbolu. W przypadku znaczników symboli domyślna skala to 1. Po skalowaniu symbol może mieć dowolny rozmiar. W przypadku symboli na polilinii domyślna skala to grubość obrysu polilinii. Po skalowaniu symbol musi mieścić się w kwadracie o wymiarach 22 x 22 piksele, a jego punkt kotwiczenia musi być wyśrodkowany.strokeColor
to kolor obrysu symbolu. Obsługiwane są wszystkie kolory CSS3 z wyjątkiem rozszerzonych kolorów nazwanych. Domyślny kolor symboli na znacznikach to „czarny”. W przypadku symboli na polilinie domyślnym kolorem jest kolor obrysu polilinii.strokeOpacity
określa względną przezroczystość (czyli brak przezroczystości) obrysu symbolu. Wartości mieszczą się w zakresie od 0,0 (przezroczystość) do 1,0 (nieprzezroczystość). W przypadku znaczników symboli domyślna wartość to 1, 0. W przypadku symboli na liniach łamanych domyślnie jest używana krycie obrysu linii.strokeWeight
określa grubość obrysu symbolu. Wartość domyślna toscale
symbolu.
Symbole wstępnie zdefiniowane
Interfejs Maps JavaScript API udostępnia kilka wbudowanych symboli, które możesz dodawać do znaczników lub polilinii za pomocą klasy
SymbolPath
.
Domyślne symbole to koło i 2 typy strzałek. Dostępne są strzałki skierowane do przodu i do tyłu. Jest to szczególnie przydatne w przypadku polilinii, ponieważ orientacja symbolu na polilinii jest stała. Kierunek do przodu to kierunek do punktu końcowego linii łamanej.
Możesz zmodyfikować obrys lub wypełnienie wstępnie zdefiniowanych symboli, korzystając z dowolnych domyślnych opcji symboli.
Dostępne są te wstępnie zdefiniowane symbole:
Nazwa | Opis | Przykład |
---|---|---|
google.maps.SymbolPath.CIRCLE |
okrąg, | |
google.maps.SymbolPath.BACKWARD_CLOSED_ARROW |
Strzałka skierowana wstecz, zamknięta ze wszystkich stron. | |
google.maps.SymbolPath.FORWARD_CLOSED_ARROW |
Strzałka skierowana do przodu, zamknięta ze wszystkich stron. | |
google.maps.SymbolPath.BACKWARD_OPEN_ARROW |
Strzałka skierowana wstecz, która jest otwarta z jednej strony. | |
google.maps.SymbolPath.FORWARD_OPEN_ARROW |
Strzałka skierowana w przód, otwarta z jednej strony. |
Dodawanie symbolu do znacznika
Aby wyświetlić ikonę wektorową na markerze, prześlij literał obiektu Symbol
z żądaną ścieżką do właściwości icon
markera. W tym przykładzie do utworzenia niestandardowej ikony znacznika użyto notacji ścieżki SVG.
TypeScript
// This example uses SVG path notation to add a vector-based symbol // as the icon for a marker. The resulting icon is a marker-shaped // symbol with a blue fill and no border. function initMap(): void { const center = new google.maps.LatLng(-33.712451, 150.311823); const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 9, center: center, } ); const svgMarker = { path: "M-1.547 12l6.563-6.609-1.406-1.406-5.156 5.203-2.063-2.109-1.406 1.406zM0 0q2.906 0 4.945 2.039t2.039 4.945q0 1.453-0.727 3.328t-1.758 3.516-2.039 3.070-1.711 2.273l-0.75 0.797q-0.281-0.328-0.75-0.867t-1.688-2.156-2.133-3.141-1.664-3.445-0.75-3.375q0-2.906 2.039-4.945t4.945-2.039z", fillColor: "blue", fillOpacity: 0.6, strokeWeight: 0, rotation: 0, scale: 2, anchor: new google.maps.Point(0, 20), }; new google.maps.Marker({ position: map.getCenter(), icon: svgMarker, map: map, }); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// This example uses SVG path notation to add a vector-based symbol // as the icon for a marker. The resulting icon is a marker-shaped // symbol with a blue fill and no border. function initMap() { const center = new google.maps.LatLng(-33.712451, 150.311823); const map = new google.maps.Map(document.getElementById("map"), { zoom: 9, center: center, }); const svgMarker = { path: "M-1.547 12l6.563-6.609-1.406-1.406-5.156 5.203-2.063-2.109-1.406 1.406zM0 0q2.906 0 4.945 2.039t2.039 4.945q0 1.453-0.727 3.328t-1.758 3.516-2.039 3.070-1.711 2.273l-0.75 0.797q-0.281-0.328-0.75-0.867t-1.688-2.156-2.133-3.141-1.664-3.445-0.75-3.375q0-2.906 2.039-4.945t4.945-2.039z", fillColor: "blue", fillOpacity: 0.6, strokeWeight: 0, rotation: 0, scale: 2, anchor: new google.maps.Point(0, 20), }; new google.maps.Marker({ position: map.getCenter(), icon: svgMarker, map: map, }); } window.initMap = initMap;
Wypróbuj próbkę
Dodawanie symbolu do linii łamanej
Aby wyświetlić symbole na polilinii, ustaw właściwość icons[]
obiektu PolylineOptions
. Tablica icons[]
przyjmuje co najmniej 1 wartość dosłowną obiektu
IconSequence
z tymi właściwościami:
icon
(wymagany) to symbol do wyrenderowania na linii.offset
określa odległość od początku linii, w której ma zostać wyrenderowana ikona. Odległość może być wyrażona jako odsetek długości linii (np. „50%”) lub w pikselach (np. „50 px”). Wartość domyślna to „100%”.repeat
określa odległość między kolejnymi ikonami na linii. Odległość może być wyrażona jako procent długości linii (np. „50%”) lub w pikselach (np. „50 px”). Aby wyłączyć powtarzanie ikony, użyj wartości „0”. Wartość domyślna to „0”.
Dzięki kombinacji symboli i klasy PolylineOptions
masz dużą kontrolę nad wyglądem i wygodą korzystania z wielokątów na mapie.
Poniżej znajdziesz kilka przykładów dostosowań, które możesz zastosować.
Strzałki
Użyj właściwości IconSequence.offset
, aby dodać strzałki na początku lub na końcu polilinii.
// Define a symbol using a predefined path (an arrow) // supplied by the Google Maps JavaScript API. var lineSymbol = { path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW }; // Create the polyline and add the symbol via the 'icons' property. var line = new google.maps.Polyline({ path: [{lat: 22.291, lng: 153.027}, {lat: 18.291, lng: 153.027}], icons: [{ icon: lineSymbol, offset: '100%' }], map: map });
Linie przerywane
Aby uzyskać efekt przerywanej linii, ustaw przezroczystość polilinii na 0, a następnie nakładaj na nią nieprzezroczysty symbol w regularnych odstępach.
// Define a symbol using SVG path notation, with an opacity of 1. var lineSymbol = { path: 'M 0,-1 0,1', strokeOpacity: 1, scale: 4 }; // Create the polyline, passing the symbol in the 'icons' property. // Give the line an opacity of 0. // Repeat the symbol at intervals of 20 pixels to create the dashed effect. var line = new google.maps.Polyline({ path: [{lat: 22.291, lng: 153.027}, {lat: 18.291, lng: 153.027}], strokeOpacity: 0, icons: [{ icon: lineSymbol, offset: '0', repeat: '20px' }], map: map });
Ścieżki niestandardowe
Symbole niestandardowe umożliwiają dodawanie do polilinii wielu różnych kształtów.
// Define the custom symbols. All symbols are defined via SVG path notation. // They have varying stroke color, fill color, stroke weight, // opacity and rotation properties. var symbolOne = { path: 'M -2,0 0,-2 2,0 0,2 z', strokeColor: '#F00', fillColor: '#F00', fillOpacity: 1 }; var symbolTwo = { path: 'M -1,0 A 1,1 0 0 0 -3,0 1,1 0 0 0 -1,0M 1,0 A 1,1 0 0 0 3,0 1,1 0 0 0 1,0M -3,3 Q 0,5 3,3', strokeColor: '#00F', rotation: 45 }; var symbolThree = { path: 'M -2,-2 2,2 M 2,-2 -2,2', strokeColor: '#292', strokeWeight: 4 }; // Create the polyline and add the symbols via the 'icons' property. var line = new google.maps.Polyline({ path: [{lat: 22.291, lng: 153.027}, {lat: 18.291, lng: 153.027}], icons: [ { icon: symbolOne, offset: '0%' }, { icon: symbolTwo, offset: '50%' }, { icon: symbolThree, offset: '100%' } ], map: map });
Animowanie symbolu
Możesz animować symbol na ścieżce, używając funkcji window.setInterval()
w DOM, aby zmieniać przesunięcie symbolu w określonych odstępach czasowych.
TypeScript
// This example adds an animated symbol to a polyline. function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { center: { lat: 20.291, lng: 153.027 }, zoom: 6, mapTypeId: "terrain", } ); // Define the symbol, using one of the predefined paths ('CIRCLE') // supplied by the Google Maps JavaScript API. const lineSymbol = { path: google.maps.SymbolPath.CIRCLE, scale: 8, strokeColor: "#393", }; // Create the polyline and add the symbol to it via the 'icons' property. const line = new google.maps.Polyline({ path: [ { lat: 22.291, lng: 153.027 }, { lat: 18.291, lng: 153.027 }, ], icons: [ { icon: lineSymbol, offset: "100%", }, ], map: map, }); animateCircle(line); } // Use the DOM setInterval() function to change the offset of the symbol // at fixed intervals. function animateCircle(line: google.maps.Polyline) { let count = 0; window.setInterval(() => { count = (count + 1) % 200; const icons = line.get("icons"); icons[0].offset = count / 2 + "%"; line.set("icons", icons); }, 20); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// This example adds an animated symbol to a polyline. function initMap() { const map = new google.maps.Map(document.getElementById("map"), { center: { lat: 20.291, lng: 153.027 }, zoom: 6, mapTypeId: "terrain", }); // Define the symbol, using one of the predefined paths ('CIRCLE') // supplied by the Google Maps JavaScript API. const lineSymbol = { path: google.maps.SymbolPath.CIRCLE, scale: 8, strokeColor: "#393", }; // Create the polyline and add the symbol to it via the 'icons' property. const line = new google.maps.Polyline({ path: [ { lat: 22.291, lng: 153.027 }, { lat: 18.291, lng: 153.027 }, ], icons: [ { icon: lineSymbol, offset: "100%", }, ], map: map, }); animateCircle(line); } // Use the DOM setInterval() function to change the offset of the symbol // at fixed intervals. function animateCircle(line) { let count = 0; window.setInterval(() => { count = (count + 1) % 200; const icons = line.get("icons"); icons[0].offset = count / 2 + "%"; line.set("icons", icons); }, 20); } window.initMap = initMap;