ماتریس مسیر، آرایهای دوبعدی از اطلاعات مسیر است که در آن ردیفها مربوط به مبدأها و ستونها مربوط به مقصدها هستند. با داشتن لیستی از مبدأها و مقصدها، کلاس 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();
جاوا اسکریپت
// 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();
سیاساس
/* * 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>
<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 محدودیتهای درخواست زیر را برای نقاط مسیر با استفاده از نمونههای آدرس یا مکان و برای اقلام اعمال میکند. اقلام، مسیرهای بین هر مبدأ و مقصد در یک ماتریس مسیر هستند، بنابراین تعداد اقلام برابر با تعداد مبدأها ضربدر تعداد مقصدها است. به عنوان مثال، اگر 10 مبدأ و 10 مقصد داشته باشید، 100 کالا خواهید داشت:
- تعداد اقلام برای مسیرهایی که مسیرهای
TRANSITنیستند، نمیتواند از ۶۲۵ تجاوز کند. - اگر یک مسیر
TRANSITمشخص کنید ، تعداد اقلام نمیتواند از ۱۰۰ تجاوز کند. - اگر
TRAFFIC_AWARE_OPTIMALرا مشخص کنید ، تعداد موارد نمیتواند از ۱۰۰ بیشتر شود. - اگر مبداها یا مقصدها را با استفاده از آدرسها یا نمونههای مکان مشخص کنید ، میتوانید حداکثر تا ۵۰ مورد را به این روش مشخص کنید.
برای جزئیات بیشتر، به «دریافت مسیر حمل و نقل» مراجعه کنید.
مثال درخواست ماتریس مسیر
مثال زیر یک ComputeRouteMatrixRequest را نشان میدهد. این مثال موارد زیر را انجام میدهد:
- نشان میدهد که آرایهای از دو نقطه مبدا و دو نقطه مقصد مشخص شده است. این متد مسیری را از هر مبدا به هر مقصد محاسبه میکند، بنابراین پاسخ شامل چهار مسیر است.
در آرایه، عنصر اول دارای اندیس ۰، عنصر دوم دارای اندیس ۱ و به همین ترتیب است. - فیلدهایی که باید برگردانده شوند را مشخص میکند. در این مثال، درخواست طوری پیکربندی شده است که برای هر مسیر،
durationMillis،distanceMetersوconditionرا برگرداند.
تایپ اسکریپت
const request = { origins: [origin1, origin2], destinations: [destinationA, destinationB], travelMode: 'DRIVING', units: google.maps.UnitSystem.METRIC, fields: ['distanceMeters', 'durationMillis', 'condition'], };
جاوا اسکریپت
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 که مسیر محاسبه شده از مبدا در اندیس ۱ و مقصد ۰ در درخواست را توصیف میکند، در عنصر دوم آرایه 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();
جاوا اسکریپت
// 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();
سیاساس
/* * 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>
<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 محدودیتهای درخواست زیر را برای نقاط مسیر با استفاده از نمونههای آدرس یا مکان و برای اقلام اعمال میکند. اقلام، مسیرهای بین هر مبدأ و مقصد در یک ماتریس مسیر هستند، بنابراین تعداد اقلام برابر با تعداد مبدأها ضربدر تعداد مقصدها است. به عنوان مثال، اگر 10 مبدأ و 10 مقصد داشته باشید، 100 کالا خواهید داشت:
- تعداد اقلام برای مسیرهایی که مسیرهای
TRANSITنیستند، نمیتواند از ۶۲۵ تجاوز کند. - اگر یک مسیر
TRANSITمشخص کنید ، تعداد اقلام نمیتواند از ۱۰۰ تجاوز کند. - اگر
TRAFFIC_AWARE_OPTIMALرا مشخص کنید ، تعداد موارد نمیتواند از ۱۰۰ بیشتر شود. - اگر مبداها یا مقصدها را با استفاده از آدرسها یا نمونههای مکان مشخص کنید ، میتوانید حداکثر تا ۵۰ مورد را به این روش مشخص کنید.
برای جزئیات بیشتر، به «دریافت مسیر حمل و نقل» مراجعه کنید.
مثال درخواست ماتریس مسیر
مثال زیر یک ComputeRouteMatrixRequest را نشان میدهد. این مثال موارد زیر را انجام میدهد:
- نشان میدهد که آرایهای از دو نقطه مبدا و دو نقطه مقصد مشخص شده است. این متد مسیری را از هر مبدا به هر مقصد محاسبه میکند، بنابراین پاسخ شامل چهار مسیر است.
در آرایه، عنصر اول دارای اندیس ۰، عنصر دوم دارای اندیس ۱ و به همین ترتیب است. - فیلدهایی که باید برگردانده شوند را مشخص میکند. در این مثال، درخواست طوری پیکربندی شده است که برای هر مسیر،
durationMillis،distanceMetersوconditionرا برگرداند.
تایپ اسکریپت
const request = { origins: [origin1, origin2], destinations: [destinationA, destinationB], travelMode: 'DRIVING', units: google.maps.UnitSystem.METRIC, fields: ['distanceMeters', 'durationMillis', 'condition'], };
جاوا اسکریپت
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 که مسیر محاسبه شده از مبدا در اندیس ۱ و مقصد ۰ در درخواست را توصیف میکند، در عنصر دوم آرایه 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درخواست کنید.
درباره مسیرهای ترانزیت بیشتر بدانید.