- Giới thiệu
- Tính chất của biểu tượng
- Ký hiệu được xác định trước
- Thêm một biểu tượng vào điểm đánh dấu
- Thêm biểu tượng vào hình nhiều đường
- Tạo ảnh động cho một biểu tượng
Giới thiệu
Symbol
là biểu tượng dựa trên vectơ có thể được hiển thị trên
Marker
hoặc
Polyline
. Hình dạng của biểu tượng được xác định bằng một đường dẫn sử dụng
Ký hiệu đường dẫn SVG.
Mặc dù path
là thuộc tính bắt buộc duy nhất, nhưng
Đối tượng Symbol
hỗ trợ nhiều thuộc tính cho phép bạn
tuỳ chỉnh các khía cạnh trực quan, chẳng hạn như màu sắc và độ đậm của nét vẽ và
điền. Xem danh sách tài sản.
Một số biểu tượng được xác định trước có sẵn thông qua SymbolPath
. Xem danh sách bên dưới.
Thuộc tính của biểu tượng
Lưu ý hành vi mặc định của Symbol
có thay đổi đôi chút
tuỳ thuộc vào việc vị trí đó xuất hiện trên điểm đánh dấu hay hình nhiều đường. Các phương sai này
được mô tả trong danh sách các thuộc tính dưới đây.
Symbol
hỗ trợ các thuộc tính sau:
path
(bắt buộc) là đường dẫn xác định hình dạng của biểu tượng. Bạn có thể sử dụng một trong các đường dẫn được xác định trước tronggoogle.maps.SymbolPath
hoặc xác định đường dẫn tuỳ chỉnh bằng cách sử dụng Ký hiệu đường dẫn SVG. Lưu ý: Đường dẫn vectơ trên hình nhiều đường phải vừa với hình vuông có kích thước 22x22px. Nếu đường dẫn của bạn bao gồm các điểm bên ngoài hình vuông này, thì bạn phải điều chỉnh thuộc tínhscale
của biểu tượng thành một giá trị phân số, chẳng hạn như 0,2, sao cho các điểm được điều chỉnh theo tỷ lệ thu được sẽ vừa với hình vuông.anchor
đặt vị trí của biểu tượng so với điểm đánh dấu hoặc hình nhiều đường. Toạ độ của đường đi của biểu tượng được dịch sang trái và lên trên theo toạ độ x và y của neo tương ứng. Theo mặc định, một biểu tượng là neo tại(0, 0)
. Vị trí được thể hiện theo cùng một hệ toạ độ làm đường dẫn của biểu tượng.fillColor
là màu nền của biểu tượng (màu là vùng có nét gạch). Tất cả màu CSS3 đều được hỗ trợ, ngoại trừ các màu được đặt tên mở rộng. Đối với các biểu tượng trên điểm đánh dấu, giá trị mặc định là "đen". Đối với biểu tượng trên hình nhiều đường, mặc định là màu nét của hình nhiều đường tương ứng.fillOpacity
xác định độ mờ tương đối (tức là thiếu trong suốt) của màu nền của biểu tượng. Các giá trị nằm trong khoảng từ 0 (hoàn toàn) trong suốt) đến 1.0 (mờ hoàn toàn). Giá trị mặc định là 0.0.rotation
là góc để xoay biểu tượng, được biểu thị theo chiều kim đồng hồ theo độ. Theo mặc định, điểm đánh dấu biểu tượng có vòng xoay là 0 và biểu tượng trên hình nhiều đường bị xoay theo góc của cạnh mà nó tạo thành nói dối. Đặt xoay biểu tượng trên hình nhiều đường sẽ sửa thao tác xoay của ký hiệu sao cho không còn đi theo đường cong của đường đó nữa.scale
đặt mức tỷ lệ kích thước của biểu tượng. Đối với điểm đánh dấu biểu tượng, tỷ lệ mặc định là 1. Sau khi chia tỷ lệ, ký hiệu có thể là mọi kích thước. Đối với các ký hiệu trên hình nhiều đường, tỷ lệ mặc định là độ đậm nét của hình nhiều đường. Sau khi chia tỷ lệ, biểu tượng phải nằm bên trong hình vuông 22x22px, chính giữa vào điểm neo của biểu tượng.strokeColor
là màu đường viền của biểu tượng. Tất cả CSS3 các màu được hỗ trợ, ngoại trừ các màu được đặt tên mở rộng. Đối với ký hiệu trên điểm đánh dấu, giá trị mặc định là "đen". Đối với các biểu tượng trên hình nhiều đường, màu mặc định là màu nét của hình nhiều đường.strokeOpacity
xác định độ mờ tương đối (tức là thiếu độ trong suốt) của nét vẽ trong biểu tượng. Các giá trị nằm trong khoảng từ 0 (hoàn toàn) trong suốt) đến 1.0 (mờ hoàn toàn). Đối với điểm đánh dấu biểu tượng, giá trị mặc định là 1,0. Đối với các biểu tượng trên hình nhiều đường, mặc định là độ mờ nét vẽ của hình nhiều đường.strokeWeight
xác định độ đậm của đường viền biểu tượng. Chiến lược phát hành đĩa đơn mặc định làscale
của biểu tượng.
Ký hiệu được xác định trước
API JavaScript của Maps cung cấp một số biểu tượng được tích hợp sẵn mà bạn có thể
thêm vào điểm đánh dấu hoặc hình nhiều đường qua
Lớp SymbolPath
.
Các biểu tượng mặc định bao gồm một vòng tròn và hai loại mũi tên. Cả hai phía trước và mũi tên quay về sau. Điều này đặc biệt hữu ích cho hình nhiều đường vì hướng của biểu tượng trên hình nhiều đường cố định. Về phía trước được coi là theo hướng điểm cuối của hình nhiều đường.
Bạn có thể sửa đổi nét vẽ hoặc tô màu nền của các ký hiệu được xác định trước sử dụng bất kỳ thao tác nào tùy chọn biểu tượng mặc định.
Bao gồm các ký hiệu được xác định trước sau đây:
Tên | Mô tả | Ví dụ: |
---|---|---|
google.maps.SymbolPath.CIRCLE |
Hình tròn. | |
google.maps.SymbolPath.BACKWARD_CLOSED_ARROW |
Mũi tên chỉ về phía sau đóng ở mọi phía. | |
google.maps.SymbolPath.FORWARD_CLOSED_ARROW |
Mũi tên chỉ về phía trước được đóng ở tất cả các phía. | |
google.maps.SymbolPath.BACKWARD_OPEN_ARROW |
Mũi tên chỉ về phía sau đang mở ở một bên. | |
google.maps.SymbolPath.FORWARD_OPEN_ARROW |
Mũi tên chỉ về phía trước mở ở một bên. |
Thêm một biểu tượng vào điểm đánh dấu
Để hiển thị biểu tượng dựa trên vectơ trên
điểm đánh dấu, truyền một
Đối tượng Symbol
có đường dẫn mong muốn đến điểm đánh dấu
thuộc tính icon
. Ví dụ sau đây sử dụng
Ký hiệu đường dẫn SVG
để tạo biểu tượng tuỳ chỉnh cho một điểm đánh dấu.
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;
Thử dùng mẫu
Thêm biểu tượng vào hình nhiều đường
Để hiển thị biểu tượng trên hình nhiều đường, hãy đặt thuộc tính icons[]
của
đối tượng PolylineOptions
. Mảng icons[]
sẽ nhận
một hoặc nhiều
Đối tượng IconSequence
bằng chữ, với các giá trị sau
thuộc tính:
icon
(bắt buộc) là biểu tượng kết xuất đường kẻ.offset
xác định khoảng cách từ đầu đường kẻ tại đó một biểu tượng sẽ được hiển thị. Khoảng cách này có thể được biểu thị dưới dạng phần trăm độ dài của dòng (ví dụ: "50%") hoặc tính bằng pixel (ví dụ: ví dụ: "50px"). Giá trị mặc định là "100%".repeat
xác định khoảng cách giữa các biểu tượng liên tiếp trên đường kẻ. Khoảng cách này có thể được biểu thị dưới dạng phần trăm chiều dài của đường (ví dụ: "50%") hoặc tính bằng pixel (ví dụ: "50 px"). Để tắt tính năng lặp lại của biểu tượng, hãy chỉ định "0". Giá trị mặc định là "0".
Với sự kết hợp giữa các ký hiệu và lớp PolylineOptions
,
bạn có nhiều quyền kiểm soát giao diện của hình nhiều đường trên bản đồ của mình.
Dưới đây là một số ví dụ về các cách tuỳ chỉnh mà bạn có thể áp dụng.
Mũi tên
Sử dụng thuộc tính IconSequence.offset
để thêm mũi tên vào
điểm bắt đầu hoặc kết thúc của hình nhiều đường.
// 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 });
Đường nét đứt
Bạn có thể có được hiệu ứng đường nét đứt bằng cách đặt độ mờ của hình nhiều đường bằng 0 và phủ một biểu tượng mờ lên đường kẻ ngắt quãng.
// 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 });
Đường dẫn tùy chỉnh
Biểu tượng tuỳ chỉnh cho phép bạn thêm nhiều hình dạng vào một hình nhiều đường.
// 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 });
Tạo ảnh động cho một biểu tượng
Bạn có thể tạo ảnh động cho các biểu tượng dọc theo đường dẫn bằng cách sử dụng giao diện DOM
Hàm window.setInterval()
dùng để thay đổi độ lệch của biểu tượng
theo khoảng thời gian cố định.
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;