このガイドでは、Route クラスの新しいレンダリング方法に移行する方法について説明します。Directions サービス(レガシー)では、レンダリング メソッドは DirectionsRenderer
クラスの一部でした。Route クラス(ベータ版)に、createPolylines
と createWaypointAdvancedMarkers
という 2 つの新しいレンダリング メソッドが追加されました。
以前の DirectionsRenderer
Directions サービス(レガシー)では、レンダリング メソッドは DirectionsRenderer
クラスの一部でした。DirectionsRenderer
クラスは、ポリライン、関連付けられたマーカー、ステップのテキスト表示を処理します。次のメソッドがあります。
setDirections()
- 提供されたルート案内レスポンスをレンダリングします。setMap()
- 経路レスポンスをレンダリングする地図を設定します。setPanel()
- パネルに一連のテキストによるステップとしてルートを表示します。
次の例は、DirectionsRenderer
クラスを使用して地図上にルートを表示する方法を示しています。
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); } }); }
Route
クラス(ベータ版)
Route クラス(ベータ版)には、次の新しいレンダリング メソッドが用意されています。これらのメソッドは、以前の DirectionsRenderer
クラスメソッドに代わるものです。
createPolylines
createWaypointAdvancedMarkers
Route
クラスには、以前の DirectionsRenderer
クラスの setPanel()
メソッドに相当するものはありません。テキスト形式の手順を表示するには、HTML 要素を手動で作成して DOM に挿入する必要があります。次の例は、Route クラスを使用して地図上にルートを表示し、テキスト形式の手順を表示する HTML 要素を手動で作成する方法を示しています。
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();