Hướng dẫn này cho bạn biết cách di chuyển sang các phương thức kết xuất mới cho lớp Tuyến đường.
Trong dịch vụ Chỉ đường (Phiên bản cũ), các phương thức kết xuất là một phần của lớp DirectionsRenderer
. Lớp Route (Beta) cung cấp 2 phương thức kết xuất mới: createPolylines
và createWaypointAdvancedMarkers
.
Cũ DirectionsRenderer
Trong dịch vụ Chỉ đường (Phiên bản cũ), các phương thức kết xuất là một phần của lớp DirectionsRenderer
. Lớp DirectionsRenderer
xử lý việc hiển thị đường nhiều đoạn, mọi điểm đánh dấu được liên kết, cũng như việc hiển thị các bước bằng văn bản; lớp này có các phương thức sau:
setDirections()
– Kết xuất phản hồi chỉ đường được cung cấp.setMap()
– Đặt bản đồ để hiển thị phản hồi chỉ đường.setPanel()
– Hiển thị chỉ đường dưới dạng một chuỗi các bước bằng văn bản trong một bảng điều khiển.
Ví dụ sau đây cho biết cách sử dụng lớp DirectionsRenderer
để hiển thị chỉ đường trên bản đồ.
function initMap() { var directionsService = new google.maps.DirectionsService(); var directionsRenderer = new google.maps.DirectionsRenderer(); var chicago = new google.maps.LatLng(41.850033, -87.6500523); var mapOptions = { zoom:7, center: chicago } var map = new google.maps.Map(document.getElementById('map'), mapOptions); // Set the map on the directions renderer. directionsRenderer.setMap(map); // Set the panel to display the directions as a series of textual steps. directionsRenderer.setPanel(document.getElementById('directionsPanel')); } function calcRoute() { var start = document.getElementById('start').value; var end = document.getElementById('end').value; var request = { origin: start, destination: end, travelMode: 'DRIVING' }; // Call the directions service to get the directions. directionsService.route(request, function(response, status) { if (status == 'OK') { // Render the polyline and markers on the map. directionsRenderer.setDirections(response); } }); }
Lớp Route
(Thử nghiệm)
Lớp Tuyến đường (Beta) cung cấp các phương thức kết xuất mới sau đây, thay thế các phương thức lớp DirectionsRenderer
cũ:
createPolylines
createWaypointAdvancedMarkers
Lớp Route
không có phương thức nào tương đương với phương thức setPanel()
trong lớp DirectionsRenderer
cũ. Để hiển thị các bước bằng văn bản, bạn phải tạo các phần tử HTML theo cách thủ công và chèn chúng vào DOM. Ví dụ sau đây cho thấy cách hiển thị chỉ đường trên bản đồ bằng lớp Route và cách tạo các phần tử HTML theo cách thủ công để hiển thị các bước bằng văn bản.
let map; let mapPolylines = []; let markers = []; let center = { lat: 37.447646, lng: -122.113878 }; // Palo Alto, CA // Initialize and add the map. async function initMap() { // Request the needed libraries. const { Map } = await google.maps.importLibrary('maps') as google.maps.MapsLibrary; const { Route } = await google.maps.importLibrary('routes') as google.maps.Routes; map = new Map(document.getElementById("map"), { zoom: 12, center, mapTypeControl: false, mapId: 'DEMO_MAP_ID', }); // Define a simple directions request. const request = { origin: 'Mountain View, CA', destination: 'San Francisco, CA', travelMode: 'DRIVING', fields: ['legs'], }; // Call computeRoutes to get the directions. const { routes } = await Route.computeRoutes(request); // Use createPolylines to create polylines for the route. mapPolylines = routes[0].createPolylines(); // Add polylines to the map. mapPolylines.forEach((polyline) => polyline.setMap(map)); fitMapToPath(routes[0].path); // Add markers to start and end points. const markers = await routes[0].createWaypointAdvancedMarkers({map}); // Render navigation instructions. const directionsPanel = document.getElementById("directions-panel"); if (!routes || routes.length === 0) { if (directionsPanel) { directionsPanel.textContent = "No routes available."; } } const route = routes[0]; if (!route.legs || route.legs.length === 0) { if (directionsPanel) { directionsPanel.textContent = "The route has no legs."; } return; } const fragment = document.createDocumentFragment(); route.legs.forEach((leg, index) => { const legContainer = document.createElement("div"); legContainer.className = "directions-leg"; legContainer.setAttribute("aria-label", `Leg ${index + 1}`); // Leg Title const legTitleElement = document.createElement("h3"); legTitleElement.textContent = `Leg ${index + 1} of ${route.legs.length}`; legContainer.appendChild(legTitleElement); if (leg.steps && leg.steps.length > 0) { // Add steps to an ordered list const stepsList = document.createElement("ol"); stepsList.className = "directions-steps"; leg.steps.forEach((step, stepIndex) => { const stepItem = document.createElement("li"); stepItem.className = "direction-step"; stepItem.setAttribute("aria-label", `Step ${stepIndex + 1}`); // Maneuver if (step.maneuver) { const maneuverNode = document.createElement("p"); maneuverNode.textContent = step.maneuver; maneuverNode.className = "maneuver"; stepItem.appendChild(maneuverNode); } // Distance and Duration if (step.localizedValues) { const distanceNode = document.createElement("p"); distanceNode.textContent = `${step.localizedValues.distance} (${step.localizedValues.staticDuration})`; distanceNode.className = "distance"; stepItem.appendChild(distanceNode); } // Instructions if (step.instructions) { const instructionsNode = document.createElement("p"); instructionsNode.textContent = step.instructions; instructionsNode.className = "instruction"; stepItem.appendChild(instructionsNode); } stepsList.appendChild(stepItem); }); legContainer.appendChild(stepsList); } fragment.appendChild(legContainer); directionsPanel?.appendChild(fragment); }); } // Helper function to fit the map to the path. async function fitMapToPath(path) { const { LatLngBounds } = await google.maps.importLibrary('core') as google.maps.CoreLibrary; const bounds = new LatLngBounds(); path.forEach((point) => { bounds.extend(point); }); map.fitBounds(bounds); } initMap();