Матрица маршрутов — это двумерный массив информации о маршруте, где строки соответствуют начальным точкам, а столбцы — конечным точкам. Класс Route Matrix рассчитывает расстояние и длительность маршрута с началом в каждой начальной точке и окончанием в каждой конечной точке по заданному списку начальных точек и конечных точек. Класс Route Matrix используется для расчета расстояния и длительности маршрута с несколькими начальными точками и конечными точками.
Посмотреть полный исходный код примера
В этом примере показано, как использовать класс Route Matrix для расчета расстояний и продолжительности поездок между несколькими пунктами отправления и назначения.
Машинопись
// Initialize and add the map. let map; let markers: google.maps.marker.AdvancedMarkerElement[] = []; let center = { lat: 51.55, lng: -1.8 }; async function initMap(): Promise<void> { // Request the needed libraries. //@ts-ignore const [{Map}, {Place}, {AdvancedMarkerElement, PinElement}, {RouteMatrix}] = await Promise.all([ google.maps.importLibrary('maps') as Promise<google.maps.MapsLibrary>, google.maps.importLibrary('places') as Promise<google.maps.PlacesLibrary>, google.maps.importLibrary('marker') as Promise<google.maps.MarkerLibrary>, google.maps.importLibrary('routes') as Promise<google.maps.RoutesLibrary> ]); const bounds = new google.maps.LatLngBounds(); map = new Map(document.getElementById('map') as HTMLElement, { zoom: 8, center: center, mapId: 'DEMO_MAP_ID', }); // Build the request using Place instances. const origin1 = new Place({ id: "ChIJ83WZp86p2EcRbMrkYqGncBQ", // Greenwich, London, UK }); const origin2 = new Place({ id: "ChIJCSkVvleJc0gR8HHaTGpajKc", // Southampton, UK }); const destinationA = new Place({ id: "ChIJYdizgWaDcUgRH9eaSy6y5I4", // Bristol, UK }); const destinationB = new Place({ id: "ChIJ9VPsNNQCbkgRDmeGZdsGNBQ", // Cardiff, UK }); await Promise.all([ origin1.fetchFields({ fields: ['location', 'displayName']}), origin2.fetchFields({ fields: ['location', 'displayName']}), destinationA.fetchFields({ fields: ['location', 'displayName']}), destinationB.fetchFields({ fields: ['location', 'displayName']}), ]); const request = { origins: [origin1, origin2], destinations: [destinationA, destinationB], travelMode: 'DRIVING', units: google.maps.UnitSystem.METRIC, fields: ['distanceMeters', 'durationMillis', 'condition'], }; // Show the request. (document.getElementById("request") as HTMLDivElement).innerText = JSON.stringify(request, null, 2); // Get the RouteMatrix response. const response = await RouteMatrix.computeRouteMatrix(request); // Show the response. (document.getElementById("response") as HTMLDivElement).innerText = JSON.stringify(response, null, 2); // Add markers for the origins. for (const origin of request.origins) { if (origin.location) { const pin = new PinElement({ //@ts-ignore glyphText: "O", glyphColor: "white", background: "#137333", borderColor: "white", }); const marker = new AdvancedMarkerElement({ map, position: origin.location, content: pin.element, title: `Origin: ${origin.displayName}`, }); markers.push(marker); bounds.extend(origin.location); } } // Add markers for the destinations. for (let i = 0; i < request.destinations.length; i++) { const destination = request.destinations[i]; if (destination.location) { const pin = new PinElement({ //@ts-ignore glyphText: "D", glyphColor: "white", background: "#C5221F", borderColor: "white", }); const marker = new AdvancedMarkerElement({ map, position: destination.location, content: pin.element, title: `Destination: ${destination.displayName}`, }); markers.push(marker); bounds.extend(destination.location); } } // Fit the map to the bounds of all markers. map.fitBounds(bounds); } initMap();
JavaScript
// Initialize and add the map. let map; let markers = []; let center = { lat: 51.55, lng: -1.8 }; async function initMap() { // Request the needed libraries. //@ts-ignore const [{ Map }, { Place }, { AdvancedMarkerElement, PinElement }, { RouteMatrix }] = await Promise.all([ google.maps.importLibrary('maps'), google.maps.importLibrary('places'), google.maps.importLibrary('marker'), google.maps.importLibrary('routes') ]); const bounds = new google.maps.LatLngBounds(); map = new Map(document.getElementById('map'), { zoom: 8, center: center, mapId: 'DEMO_MAP_ID', }); // Build the request using Place instances. const origin1 = new Place({ id: "ChIJ83WZp86p2EcRbMrkYqGncBQ", // Greenwich, London, UK }); const origin2 = new Place({ id: "ChIJCSkVvleJc0gR8HHaTGpajKc", // Southampton, UK }); const destinationA = new Place({ id: "ChIJYdizgWaDcUgRH9eaSy6y5I4", // Bristol, UK }); const destinationB = new Place({ id: "ChIJ9VPsNNQCbkgRDmeGZdsGNBQ", // Cardiff, UK }); await Promise.all([ origin1.fetchFields({ fields: ['location', 'displayName'] }), origin2.fetchFields({ fields: ['location', 'displayName'] }), destinationA.fetchFields({ fields: ['location', 'displayName'] }), destinationB.fetchFields({ fields: ['location', 'displayName'] }), ]); const request = { origins: [origin1, origin2], destinations: [destinationA, destinationB], travelMode: 'DRIVING', units: google.maps.UnitSystem.METRIC, fields: ['distanceMeters', 'durationMillis', 'condition'], }; // Show the request. document.getElementById("request").innerText = JSON.stringify(request, null, 2); // Get the RouteMatrix response. const response = await RouteMatrix.computeRouteMatrix(request); // Show the response. document.getElementById("response").innerText = JSON.stringify(response, null, 2); // Add markers for the origins. for (const origin of request.origins) { if (origin.location) { const pin = new PinElement({ //@ts-ignore glyphText: "O", glyphColor: "white", background: "#137333", borderColor: "white", }); const marker = new AdvancedMarkerElement({ map, position: origin.location, content: pin.element, title: `Origin: ${origin.displayName}`, }); markers.push(marker); bounds.extend(origin.location); } } // Add markers for the destinations. for (let i = 0; i < request.destinations.length; i++) { const destination = request.destinations[i]; if (destination.location) { const pin = new PinElement({ //@ts-ignore glyphText: "D", glyphColor: "white", background: "#C5221F", borderColor: "white", }); const marker = new AdvancedMarkerElement({ map, position: destination.location, content: pin.element, title: `Destination: ${destination.displayName}`, }); markers.push(marker); bounds.extend(destination.location); } } // Fit the map to the bounds of all markers. map.fitBounds(bounds); } initMap();
CSS
/* * Always set the map height explicitly to define the size of the div element * that contains the map. */ /* Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; } #container { height: 100%; display: flex; } #sidebar { flex-basis: 15rem; flex-grow: 1; padding: 1rem; max-width: 30rem; height: 100%; box-sizing: border-box; overflow: auto; } #map { flex-basis: 0; flex-grow: 4; height: 100%; } #sidebar { flex-direction: column; }
HTML
<html>
<head>
<title>Route matrix</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
</head>
<body>
<div id="container">
<div id="map"></div>
<div id="sidebar">
<h3 style="flex-grow: 0">Request</h3>
<pre style="flex-grow: 1" id="request"></pre>
<h3 style="flex-grow: 0">Response</h3>
<pre style="flex-grow: 1" id="response"></pre>
</div>
</div>
<!-- prettier-ignore -->
<script>(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})
({key: "AIzaSyA6myHzS10YXdcazAFalmXvDkrYCp5cLc8", v: "beta"});</script>
</body>
</html>Попробуйте образец
Лимиты запросов
Метод computeRouteMatrix устанавливает следующие ограничения на запросы для путевых точек, использующих адреса или экземпляры Place, а также для элементов. Элементы — это маршруты между каждым пунктом отправления и пунктом назначения в матрице маршрутов, поэтому количество элементов равно количеству пунктов отправления, умноженному на количество пунктов назначения. Например, если у вас 10 пунктов отправления и 10 пунктов назначения, у вас будет 100 элементов:
- Количество элементов не может превышать 625 для маршрутов, не являющихся
TRANSIT. - Если вы указываете маршрут
TRANSIT, количество элементов не может превышать 100. - Если указано
TRAFFIC_AWARE_OPTIMAL, количество элементов не может превышать 100. - Если вы указываете пункты отправления или назначения с помощью адресов или экземпляров мест , таким способом можно указать до 50 мест.
Дополнительную информацию см. в разделе Получение маршрута общественного транспорта .
Пример запроса матрицы маршрута
В следующем примере показан запрос ComputeRouteMatrixRequest . Этот пример выполняет следующие действия:
- Показывает задание массива из двух исходных и двух конечных точек маршрута. Метод рассчитывает маршрут от каждой исходной точки до каждой конечной точки, поэтому ответ содержит четыре маршрута.
В массиве первый элемент имеет индекс 0, второй — индекс 1 и т. д. - Указывает возвращаемые поля. В этом примере запрос настроен на возврат
durationMillis,distanceMetersиconditionдля каждого маршрута.
Машинопись
const request = { origins: [origin1, origin2], destinations: [destinationA, destinationB], travelMode: 'DRIVING', units: google.maps.UnitSystem.METRIC, fields: ['distanceMeters', 'durationMillis', 'condition'], };
JavaScript
const request = { origins: [origin1, origin2], destinations: [destinationA, destinationB], travelMode: 'DRIVING', units: google.maps.UnitSystem.METRIC, fields: ['distanceMeters', 'durationMillis', 'condition'], };
Ответ содержит четыре возможных маршрута для комбинации всех точек отправления и назначения, как показано в следующем примере:
"matrix": { "rows": [ { "items": [ { "condition": "ROUTE_EXISTS", "distanceMeters": 202587, "durationMillis": 10040000 }, { "condition": "ROUTE_EXISTS", "distanceMeters": 252734, "durationMillis": 12240000 } ] }, { "items": [ { "condition": "ROUTE_EXISTS", "distanceMeters": 166135, "durationMillis": 6596000 }, { "condition": "ROUTE_EXISTS", "distanceMeters": 216282, "durationMillis": 8797000 } ] } ] }
Идентифицируйте каждый маршрут в результате, используя индексы отправителя и получателя, чтобы найти соответствующий RouteMatrixItem в двумерном массиве. Например, элемент RouteMatrixItem , описывающий маршрут, рассчитанный от отправителя с индексом 1 до получателя 0 в запросе, будет находиться во втором элементе массива RouteMatrix.rows и в первом элементе массива RouteMatrixRow.items .
В следующем фрагменте кода показано, как идентифицировать RouteMatrixItem для поиска маршрута для определенного пункта отправления и назначения:
// Find the route for origin 'x' and destination 'y'. const {matrix} = await RouteMatrix.computeRouteMatrix(request); const myRouteMatrixItem = matrix.rows[x].items[y];
Выберите поля для возврата
При запросе матрицы маршрутизации необходимо использовать маску поля, чтобы указать, какую информацию должен вернуть ответ.
Использование маски поля также гарантирует, что вы не будете запрашивать ненужные данные, что, в свою очередь, помогает сократить задержку ответа и избежать возврата информации, которая не нужна вашей системе.
Укажите список необходимых полей, установив свойство ComputeRoutesMatrixRequest.fields , как показано в следующем фрагменте:
fields: ['durationMillis', 'distanceMeters', 'condition'],
Определите, какие маски полей использовать
Вот как можно определить, какие поля вы хотите использовать, и создать для них маски полей:
- Запросить все поля , используя маску поля
['*']. - Просмотрите иерархию полей в классе
RouteMatrixItemна предмет необходимых вам полей. Создайте маски полей, используя иерархию полей, показанную на предыдущем шаге, используя следующий формат:
topLevelField[.secondLevelField][.thirdLevelField][...]
Например, для этого RouteMatrixItem :
"travelAdvisory": { "fuelConsumptionMicroliters": 0, "tollInfo": { "estimatedPrices": [ { "currencyCode": "USD", "units": 4, "nanos": 400000000 } ] } },
Если вы хотите вернуть только поле tollInfo для RouteMatrixItem , маска поля будет следующей:
fields: ['travelAdvisory.tollInfo']
Если вместо этого вы хотите запросить расчетный расход топлива, ваша маска поля будет следующей:
fields: ['travelAdvisory.fuelConsumptionMicroliters']
Если вы хотите запросить оба варианта, маска поля будет следующей:
fields: ['travelAdvisory.fuelConsumptionMicroliters', 'travelAdvisory.tollInfo']
А если вы хотите запросить полный набор рекомендаций для путешественников, ваша маска поля выглядит следующим образом:
fields: ['travelAdvisory']
Запросить матрицу транзитных маршрутов
Получите матрицу маршрутов общественного транспорта, которая учитывает доступные в регионе варианты общественного транспорта. В число таких вариантов могут входить автобусы, метро и поезда, среди прочих. Чтобы запросить матрицу маршрутов общественного транспорта:
- Установите
travelModeнаTRANSIT - Запросите поле
travelAdvisory.
Узнайте больше о транзитных маршрутах .
,Матрица маршрутов — это двумерный массив информации о маршруте, где строки соответствуют начальным точкам, а столбцы — конечным точкам. Класс Route Matrix рассчитывает расстояние и длительность маршрута с началом в каждой начальной точке и окончанием в каждой конечной точке по заданному списку начальных точек и конечных точек. Класс Route Matrix используется для расчета расстояния и длительности маршрута с несколькими начальными точками и конечными точками.
Посмотреть полный исходный код примера
В этом примере показано, как использовать класс Route Matrix для расчета расстояний и продолжительности поездок между несколькими пунктами отправления и назначения.
Машинопись
// Initialize and add the map. let map; let markers: google.maps.marker.AdvancedMarkerElement[] = []; let center = { lat: 51.55, lng: -1.8 }; async function initMap(): Promise<void> { // Request the needed libraries. //@ts-ignore const [{Map}, {Place}, {AdvancedMarkerElement, PinElement}, {RouteMatrix}] = await Promise.all([ google.maps.importLibrary('maps') as Promise<google.maps.MapsLibrary>, google.maps.importLibrary('places') as Promise<google.maps.PlacesLibrary>, google.maps.importLibrary('marker') as Promise<google.maps.MarkerLibrary>, google.maps.importLibrary('routes') as Promise<google.maps.RoutesLibrary> ]); const bounds = new google.maps.LatLngBounds(); map = new Map(document.getElementById('map') as HTMLElement, { zoom: 8, center: center, mapId: 'DEMO_MAP_ID', }); // Build the request using Place instances. const origin1 = new Place({ id: "ChIJ83WZp86p2EcRbMrkYqGncBQ", // Greenwich, London, UK }); const origin2 = new Place({ id: "ChIJCSkVvleJc0gR8HHaTGpajKc", // Southampton, UK }); const destinationA = new Place({ id: "ChIJYdizgWaDcUgRH9eaSy6y5I4", // Bristol, UK }); const destinationB = new Place({ id: "ChIJ9VPsNNQCbkgRDmeGZdsGNBQ", // Cardiff, UK }); await Promise.all([ origin1.fetchFields({ fields: ['location', 'displayName']}), origin2.fetchFields({ fields: ['location', 'displayName']}), destinationA.fetchFields({ fields: ['location', 'displayName']}), destinationB.fetchFields({ fields: ['location', 'displayName']}), ]); const request = { origins: [origin1, origin2], destinations: [destinationA, destinationB], travelMode: 'DRIVING', units: google.maps.UnitSystem.METRIC, fields: ['distanceMeters', 'durationMillis', 'condition'], }; // Show the request. (document.getElementById("request") as HTMLDivElement).innerText = JSON.stringify(request, null, 2); // Get the RouteMatrix response. const response = await RouteMatrix.computeRouteMatrix(request); // Show the response. (document.getElementById("response") as HTMLDivElement).innerText = JSON.stringify(response, null, 2); // Add markers for the origins. for (const origin of request.origins) { if (origin.location) { const pin = new PinElement({ //@ts-ignore glyphText: "O", glyphColor: "white", background: "#137333", borderColor: "white", }); const marker = new AdvancedMarkerElement({ map, position: origin.location, content: pin.element, title: `Origin: ${origin.displayName}`, }); markers.push(marker); bounds.extend(origin.location); } } // Add markers for the destinations. for (let i = 0; i < request.destinations.length; i++) { const destination = request.destinations[i]; if (destination.location) { const pin = new PinElement({ //@ts-ignore glyphText: "D", glyphColor: "white", background: "#C5221F", borderColor: "white", }); const marker = new AdvancedMarkerElement({ map, position: destination.location, content: pin.element, title: `Destination: ${destination.displayName}`, }); markers.push(marker); bounds.extend(destination.location); } } // Fit the map to the bounds of all markers. map.fitBounds(bounds); } initMap();
JavaScript
// Initialize and add the map. let map; let markers = []; let center = { lat: 51.55, lng: -1.8 }; async function initMap() { // Request the needed libraries. //@ts-ignore const [{ Map }, { Place }, { AdvancedMarkerElement, PinElement }, { RouteMatrix }] = await Promise.all([ google.maps.importLibrary('maps'), google.maps.importLibrary('places'), google.maps.importLibrary('marker'), google.maps.importLibrary('routes') ]); const bounds = new google.maps.LatLngBounds(); map = new Map(document.getElementById('map'), { zoom: 8, center: center, mapId: 'DEMO_MAP_ID', }); // Build the request using Place instances. const origin1 = new Place({ id: "ChIJ83WZp86p2EcRbMrkYqGncBQ", // Greenwich, London, UK }); const origin2 = new Place({ id: "ChIJCSkVvleJc0gR8HHaTGpajKc", // Southampton, UK }); const destinationA = new Place({ id: "ChIJYdizgWaDcUgRH9eaSy6y5I4", // Bristol, UK }); const destinationB = new Place({ id: "ChIJ9VPsNNQCbkgRDmeGZdsGNBQ", // Cardiff, UK }); await Promise.all([ origin1.fetchFields({ fields: ['location', 'displayName'] }), origin2.fetchFields({ fields: ['location', 'displayName'] }), destinationA.fetchFields({ fields: ['location', 'displayName'] }), destinationB.fetchFields({ fields: ['location', 'displayName'] }), ]); const request = { origins: [origin1, origin2], destinations: [destinationA, destinationB], travelMode: 'DRIVING', units: google.maps.UnitSystem.METRIC, fields: ['distanceMeters', 'durationMillis', 'condition'], }; // Show the request. document.getElementById("request").innerText = JSON.stringify(request, null, 2); // Get the RouteMatrix response. const response = await RouteMatrix.computeRouteMatrix(request); // Show the response. document.getElementById("response").innerText = JSON.stringify(response, null, 2); // Add markers for the origins. for (const origin of request.origins) { if (origin.location) { const pin = new PinElement({ //@ts-ignore glyphText: "O", glyphColor: "white", background: "#137333", borderColor: "white", }); const marker = new AdvancedMarkerElement({ map, position: origin.location, content: pin.element, title: `Origin: ${origin.displayName}`, }); markers.push(marker); bounds.extend(origin.location); } } // Add markers for the destinations. for (let i = 0; i < request.destinations.length; i++) { const destination = request.destinations[i]; if (destination.location) { const pin = new PinElement({ //@ts-ignore glyphText: "D", glyphColor: "white", background: "#C5221F", borderColor: "white", }); const marker = new AdvancedMarkerElement({ map, position: destination.location, content: pin.element, title: `Destination: ${destination.displayName}`, }); markers.push(marker); bounds.extend(destination.location); } } // Fit the map to the bounds of all markers. map.fitBounds(bounds); } initMap();
CSS
/* * Always set the map height explicitly to define the size of the div element * that contains the map. */ /* Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; } #container { height: 100%; display: flex; } #sidebar { flex-basis: 15rem; flex-grow: 1; padding: 1rem; max-width: 30rem; height: 100%; box-sizing: border-box; overflow: auto; } #map { flex-basis: 0; flex-grow: 4; height: 100%; } #sidebar { flex-direction: column; }
HTML
<html>
<head>
<title>Route matrix</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
</head>
<body>
<div id="container">
<div id="map"></div>
<div id="sidebar">
<h3 style="flex-grow: 0">Request</h3>
<pre style="flex-grow: 1" id="request"></pre>
<h3 style="flex-grow: 0">Response</h3>
<pre style="flex-grow: 1" id="response"></pre>
</div>
</div>
<!-- prettier-ignore -->
<script>(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})
({key: "AIzaSyA6myHzS10YXdcazAFalmXvDkrYCp5cLc8", v: "beta"});</script>
</body>
</html>Попробуйте образец
Лимиты запросов
Метод computeRouteMatrix устанавливает следующие ограничения на запросы для путевых точек, использующих адреса или экземпляры Place, а также для элементов. Элементы — это маршруты между каждым пунктом отправления и пунктом назначения в матрице маршрутов, поэтому количество элементов равно количеству пунктов отправления, умноженному на количество пунктов назначения. Например, если у вас 10 пунктов отправления и 10 пунктов назначения, у вас будет 100 элементов:
- Количество элементов не может превышать 625 для маршрутов, не являющихся
TRANSIT. - Если вы указываете маршрут
TRANSIT, количество элементов не может превышать 100. - Если указано
TRAFFIC_AWARE_OPTIMAL, количество элементов не может превышать 100. - Если вы указываете пункты отправления или назначения с помощью адресов или экземпляров мест , таким способом можно указать до 50 мест.
Дополнительную информацию см. в разделе Получение маршрута общественного транспорта .
Пример запроса матрицы маршрута
В следующем примере показан запрос ComputeRouteMatrixRequest . Этот пример выполняет следующие действия:
- Показывает задание массива из двух исходных и двух конечных точек маршрута. Метод рассчитывает маршрут от каждой исходной точки до каждой конечной точки, поэтому ответ содержит четыре маршрута.
В массиве первый элемент имеет индекс 0, второй — индекс 1 и т. д. - Указывает возвращаемые поля. В этом примере запрос настроен на возврат
durationMillis,distanceMetersиconditionдля каждого маршрута.
Машинопись
const request = { origins: [origin1, origin2], destinations: [destinationA, destinationB], travelMode: 'DRIVING', units: google.maps.UnitSystem.METRIC, fields: ['distanceMeters', 'durationMillis', 'condition'], };
JavaScript
const request = { origins: [origin1, origin2], destinations: [destinationA, destinationB], travelMode: 'DRIVING', units: google.maps.UnitSystem.METRIC, fields: ['distanceMeters', 'durationMillis', 'condition'], };
Ответ содержит четыре возможных маршрута для комбинации всех точек отправления и назначения, как показано в следующем примере:
"matrix": { "rows": [ { "items": [ { "condition": "ROUTE_EXISTS", "distanceMeters": 202587, "durationMillis": 10040000 }, { "condition": "ROUTE_EXISTS", "distanceMeters": 252734, "durationMillis": 12240000 } ] }, { "items": [ { "condition": "ROUTE_EXISTS", "distanceMeters": 166135, "durationMillis": 6596000 }, { "condition": "ROUTE_EXISTS", "distanceMeters": 216282, "durationMillis": 8797000 } ] } ] }
Идентифицируйте каждый маршрут в результате, используя индексы отправителя и получателя, чтобы найти соответствующий RouteMatrixItem в двумерном массиве. Например, элемент RouteMatrixItem , описывающий маршрут, рассчитанный от отправителя с индексом 1 до получателя 0 в запросе, будет находиться во втором элементе массива RouteMatrix.rows и в первом элементе массива RouteMatrixRow.items .
В следующем фрагменте кода показано, как идентифицировать RouteMatrixItem для поиска маршрута для определенного пункта отправления и назначения:
// Find the route for origin 'x' and destination 'y'. const {matrix} = await RouteMatrix.computeRouteMatrix(request); const myRouteMatrixItem = matrix.rows[x].items[y];
Выберите поля для возврата
При запросе матрицы маршрутизации необходимо использовать маску поля, чтобы указать, какую информацию должен вернуть ответ.
Использование маски поля также гарантирует, что вы не будете запрашивать ненужные данные, что, в свою очередь, помогает сократить задержку ответа и избежать возврата информации, которая не нужна вашей системе.
Укажите список необходимых полей, установив свойство ComputeRoutesMatrixRequest.fields , как показано в следующем фрагменте:
fields: ['durationMillis', 'distanceMeters', 'condition'],
Определите, какие маски полей использовать
Вот как можно определить, какие поля вы хотите использовать, и создать для них маски полей:
- Запросить все поля , используя маску поля
['*']. - Просмотрите иерархию полей в классе
RouteMatrixItemна предмет необходимых вам полей. Создайте маски полей, используя иерархию полей, показанную на предыдущем шаге, используя следующий формат:
topLevelField[.secondLevelField][.thirdLevelField][...]
Например, для этого RouteMatrixItem :
"travelAdvisory": { "fuelConsumptionMicroliters": 0, "tollInfo": { "estimatedPrices": [ { "currencyCode": "USD", "units": 4, "nanos": 400000000 } ] } },
Если вы хотите вернуть только поле tollInfo для RouteMatrixItem , маска поля будет следующей:
fields: ['travelAdvisory.tollInfo']
Если вместо этого вы хотите запросить расчетный расход топлива, ваша маска поля будет следующей:
fields: ['travelAdvisory.fuelConsumptionMicroliters']
Если вы хотите запросить оба варианта, маска поля будет следующей:
fields: ['travelAdvisory.fuelConsumptionMicroliters', 'travelAdvisory.tollInfo']
А если вы хотите запросить полный набор рекомендаций для путешественников, ваша маска поля выглядит следующим образом:
fields: ['travelAdvisory']
Запросить матрицу транзитных маршрутов
Получите матрицу маршрутов общественного транспорта, которая учитывает доступные в регионе варианты общественного транспорта. В число таких вариантов могут входить автобусы, метро и поезда, среди прочих. Чтобы запросить матрицу маршрутов общественного транспорта:
- Установите
travelModeнаTRANSIT - Запросите поле
travelAdvisory.
Узнайте больше о транзитных маршрутах .