نمای کلی
سرویس «ماتریس فاصله» Google مسافت سفر و مدت سفر را بین چند مبدأ و مقصد بااستفاده از حالت سفر ارائهشده محاسبه میکند.
این سرویس اطلاعات دقیق مسیر را برنمیگرداند. اطلاعات مسیر، ازجمله چندخطیها و مسیرهای متنی، را میتوان با ارسال مبدأ و مقصد تکی موردنظر به سرویس مسیرها بهدست آورد.
درحال شروع کردن
قبلاز استفاده از سرویس Distance Matrix در Maps JavaScript API، ابتدا مطمئن شوید که Distance Matrix API (Legacy) در کنسول Google Cloud، در همان پروژهای که برای Maps JavaScript API راهاندازی کردهاید، فعال باشد.
برای مشاهده فهرست میاناهای برنامهسازی کاربردی فعالشده:
- به کنسول Google Cloud بروید.
- روی دکمه انتخاب پروژه کلیک کنید، سپس همان پروژهای را که برای Maps JavaScript API راهاندازی کردهاید انتخاب کنید و روی باز کردن کلیک کنید.
- از فهرست میاناهای برنامهسازی کاربردی در داشبورد، Distance Matrix API (Legacy) را پیدا کنید.
- اگر API را در فهرست میبینید، همه تنظیمات انجام شده است. اگر میانای برنامهسازی کاربردی در فهرست نیست، آن را در https://console.cloud.google.com/apis/library/distance-matrix-backend.googleapis.com فعال کنید
قیمتگذاری و خطمشیها
قیمتگذاری
برای آشنایی با خطمشیهای قیمتگذاری و استفاده برای سرویس Distance Matrix جاوا اسکریپت، به استفاده و صورتحساب برای Distance Matrix API (قدیمی) مراجعه کنید.
توجه: هر پُرسمانی که به سرویس «ماتریس فاصله» ارسال میشود، براساس تعداد عناصر مجاز محدود میشود، که تعداد مبدأها ضرب در تعداد مقصدها تعداد عناصر را تعریف میکند.
خطمشیها
استفاده از سرویس Distance Matrix باید مطابق با خطمشیهای شرحدادهشده برای Distance Matrix API (قدیمی) باشد.
درخواستهای Distance Matrix
دسترسی به سرویس «ماتریس فاصله» ناهمگام است، زیرا Google Maps API باید با سرور خارجی تماس برقرار کند. به همین دلیل، باید یک روش فراخوانی را برای اجرا پساز تکمیل درخواست ارسال کنید تا نتایج پردازش شود.
شما ازطریق شیء سازنده google.maps.DistanceMatrixService در کدتان به سرویس Distance Matrix دسترسی پیدا میکنید.
روش DistanceMatrixService.getDistanceMatrix()
درخواستی را به سرویس «ماتریس فاصله» آغاز میکند و یک
راستیننماد شیء DistanceMatrixRequest حاوی مبدأها،
مقصدها، و حالت سفر، و همچنین یک روش فراخوانی برای اجرا پساز
دریافت پاسخ را به آن ارسال میکند.
var origin1 = new google.maps.LatLng(55.930385, -3.118425); var origin2 = 'Greenwich, England'; var destinationA = 'Stockholm, Sweden'; var destinationB = new google.maps.LatLng(50.087692, 14.421150); var service = new google.maps.DistanceMatrixService(); service.getDistanceMatrix( { origins: [origin1, origin2], destinations: [destinationA, destinationB], travelMode: 'DRIVING', transitOptions: TransitOptions, drivingOptions: DrivingOptions, unitSystem: UnitSystem, avoidHighways: Boolean, avoidTolls: Boolean, }, callback); function callback(response, status) { // See Parsing the Results for // the basics of a callback function. }
DistanceMatrixRequest شامل فیلدهای زیر است:
origins(الزامی) — آرایهای حاوی یک یا چند رشته نشانی، شیءgoogle.maps.LatLng، یا شیء مکان که فاصله و زمان از آنها محاسبه میشود.destinations(الزامی) — آرایهای حاوی یک یا چند رشته نشانی، اشیاءgoogle.maps.LatLng، یا اشیاء مکان که فاصله و زمان تا آنها محاسبه میشود.-
travelMode(اختیاری) — حالت حملونقل برای استفاده هنگام محاسبه مسیرها. بخش مربوط به حالتهای سفر را ببینید. transitOptions(اختیاری) — گزینههایی که فقط برای درخواستهایی اعمال میشود کهtravelModeTRANSITاست. مقادیر معتبر در بخش مربوط به گزینههای حملونقل عمومی شرح داده شده است.drivingOptions(اختیاری) مقادیری را مشخص میکند که فقط برای درخواستهایی اعمال میشود کهtravelModeدر آنهاDRIVINGاست. مقادیر معتبر در بخش گزینههای رانندگی شرح داده شده است.-
unitSystem(اختیاری) — سیستم واحدی که باید هنگام نمایش فاصله استفاده شود. مقادیر پذیرفتنی عبارتاند از:google.maps.UnitSystem.METRIC(پیشفرض)google.maps.UnitSystem.IMPERIAL
-
avoidHighways(اختیاری) — اگرtrue، مسیرهای بین مبدأ و مقصد بهگونهای محاسبه خواهد شد که تا حد امکان از بزرگراهها اجتناب شود. -
avoidTolls(اختیاری) — اگرtrue، مسیرهای بین نقاط بااستفاده از مسیرهای بدون عوارض محاسبه خواهد شد، هرجا که ممکن باشد.
حالتهای سفر
هنگام محاسبه زمان و مسافت، میتوانید مشخص کنید از کدام وسیله حملونقل استفاده شود. درحالحاضر از حالتهای سفر زیر پشتیبانی میشود:
BICYCLINGدرخواست مسیرهای دوچرخهسواری ازطریق مسیرهای دوچرخه و خیابانهای ترجیحی (درحالحاضر فقط در ایالات متحده و برخی شهرهای کانادا دردسترس است).DRIVING(پیشفرض) نشاندهنده مسیرهای رانندگی استاندارد بااستفاده از شبکه جادهای است.TRANSITدرخواست مسیر ازطریق مسیرهای حملونقل عمومی میکند. این گزینه فقط درصورتی میتواند مشخص شود که درخواست حاوی کلید میانای برنامهسازی کاربردی باشد. برای گزینههای دردسترس در این نوع درخواست، بخش مربوط به گزینههای حملونقل عمومی را ببینید.WALKINGمسیرهای پیادهروی را ازطریق مسیرهای عابر پیاده و پیادهروها (درصورت وجود) درخواست میکند.
گزینههای حملونقل عمومی
«سرویس حملونقل عمومی» درحالحاضر «آزمایشی» است. درطول این مرحله، محدودیتهای نرخ را برای جلوگیری از سوءاستفاده از میانای برنامهسازی کاربردی اعمال خواهیم کرد. درنهایت سقفی برای مجموع پُرسمانها در هر بار بار کردن نقشه براساس استفاده منصفانه از میانای برنامهسازی کاربردی اعمال خواهیم کرد.
گزینههای دردسترس برای درخواست ماتریس فاصله در حالتهای سفر مختلف متفاوت است.
در درخواستهای حملونقل عمومی، گزینههای avoidHighways و
avoidTolls نادیده گرفته میشوند. میتوانید گزینههای مسیریابی مختص حملونقل عمومی را ازطریق راستیننماد شیء TransitOptions مشخص کنید.
درخواستهای حملونقل عمومی به زمان حساس هستند. محاسبات فقط برای زمانهای آینده برگردانده خواهد شد.
راستیننماد شیء TransitOptions شامل فیلدهای زیر است:
{ arrivalTime: Date, departureTime: Date, modes: [transitMode1, transitMode2] routingPreference: TransitRoutePreference }
این فیلدها در زیر توضیح داده شدهاند:
arrivalTime(اختیاری) زمان ورود موردنظر را بهعنوان شیءDateمشخص میکند. اگر زمان رسیدن مشخص شده باشد، زمان حرکت نادیده گرفته میشود.departureTime(اختیاری) زمان حرکت موردنظر را بهعنوان شیءDateمشخص میکند. اگرarrivalTimeمشخص شده باشد،departureTimeنادیده گرفته خواهد شد. اگر مقداری برایdepartureTimeیاarrivalTimeمشخص نشده باشد، بهطور پیشفرض روی «اکنون» (یعنی زمان فعلی) تنظیم میشود.-
modes(اختیاری) آرایهای است که حاوی یک یا چند راستیننماد شیءTransitModeاست. این فیلد فقط درصورتی میتواند گنجانده شود که درخواست حاوی کلید میانای برنامهسازی کاربردی باشد. هرTransitModeحالت ترجیحی حملونقل عمومی را مشخص میکند. مقادیر زیر مجاز هستند:BUSنشان میدهد که مسیر محاسبهشده باید سفر با اتوبوس را ترجیح دهد.RAILنشان میدهد که مسیر محاسبهشده باید سفر با قطار، تراموا، قطار شهری، و مترو را ترجیح دهد.SUBWAYنشان میدهد که مسیر محاسبهشده باید سفر با مترو را ترجیح دهد.TRAINنشان میدهد که مسیر محاسبهشده باید سفر با قطار را ترجیح دهد.TRAMنشان میدهد که مسیر محاسبهشده باید سفر با تراموا و قطار شهری را ترجیح دهد.
-
routingPreference(اختیاری) اولویتها را برای مسیرهای حملونقل عمومی مشخص میکند. بااستفاده از این گزینه، میتوانید گزینههای برگرداندهشده را سوگیری کنید، بهجای اینکه بهترین مسیر پیشفرض انتخابشده توسط API را بپذیرید. این فیلد فقط درصورتی میتواند مشخص شود که درخواست حاوی کلید میانای برنامهسازی کاربردی باشد. مقادیر زیر مجاز هستند:FEWER_TRANSFERSنشان میدهد که مسیر محاسبهشده باید تعداد محدودی تعویض وسیله داشته باشد.LESS_WALKINGنشان میدهد که مسیر محاسبهشده باید مقدار محدودی پیادهروی داشته باشد.
گزینههای رانندگی
از شیء drivingOptions برای مشخص کردن زمان حرکت استفاده کنید تا بهترین مسیر به مقصدتان با درنظر گرفتن شرایط ترافیک موردانتظار محاسبه شود. همچنین میتوانید مشخص کنید که میخواهید زمان تخمینی در ترافیک بدبینانه، خوشبینانه، یا بهترین تخمین براساس شرایط ترافیک گذشته و ترافیک زنده باشد.
شیء drivingOptions حاوی فیلدهای زیر است:
{ departureTime: Date, trafficModel: TrafficModel }
این فیلدها در زیر توضیح داده شدهاند:
departureTime(برای معتبر بودن راستیننماد شیءdrivingOptionsالزامی است) زمان حرکت موردنظر را بهعنوان شیءDateمشخص میکند. مقدار باید روی زمان فعلی یا زمانی در آینده تنظیم شود. نمیتواند در گذشته باشد. (میانای برنامهسازی کاربردی همه تاریخها را به ساعت هماهنگ جهانی تبدیل میکند تا از مدیریت یکسان در مناطق زمانی مختلف مطمئن شود.) اگرdepartureTimeرا در درخواست بگنجانید، API بهترین مسیر را با توجه به شرایط ترافیکی موردانتظار در آن زمان برمیگرداند و زمان پیشبینیشده در ترافیک (duration_in_traffic) را در پاسخ لحاظ میکند. اگر زمان حرکت را مشخص نکنید (یعنی اگر درخواست شاملdrivingOptionsنباشد)، مسیر برگرداندهشده معمولاً مسیر خوبی است که شرایط ترافیک در آن درنظر گرفته نشده است.-
trafficModel(اختیاری) فرضیاتی را که باید هنگام محاسبه زمان در ترافیک استفاده شود مشخص میکند. این تنظیم بر مقدار برگرداندهشده در فیلدduration_in_trafficدر پاسخ تأثیر میگذارد، که حاوی زمان پیشبینیشده در ترافیک براساس میانگینهای سابقه است. پیشفرضها بهbest_guess. مقادیر زیر مجاز هستند:bestguess(پیشفرض) نشان میدهد کهduration_in_trafficبرگرداندهشده باید بهترین تخمین از مدت سفر بااستفاده از اطلاعات موجود درباره شرایط ترافیک گذشته و ترافیک زنده باشد. هرچهdepartureTimeبه زمان فعلی نزدیکتر باشد، ترافیک زنده اهمیت بیشتری پیدا میکند.pessimisticنشان میدهد کهduration_in_trafficبرگرداندهشده باید در اکثر روزها طولانیتر از مدت سفر واقعی باشد، اگرچه در برخی روزها با شرایط ترافیکی بسیار بد ممکن است از این مقدار فراتر رود.optimisticنشان میدهد کهduration_in_trafficبرگرداندهشده باید در اکثر روزها کوتاهتر از مدت سفر واقعی باشد، هرچند در روزهایی که شرایط ترافیک بهطور خاص خوب است، ممکن است سریعتر از این مقدار باشد.
در زیر نمونهای از DistanceMatrixRequest برای مسیرهای رانندگی،
شامل زمان حرکت و مدل ترافیک آورده شده است:
{ origins: [{lat: 55.93, lng: -3.118}, 'Greenwich, England'], destinations: ['Stockholm, Sweden', {lat: 50.087, lng: 14.421}], travelMode: 'DRIVING', drivingOptions: { departureTime: new Date(Date.now() + N), // for the time N milliseconds from now. trafficModel: 'optimistic' } }
پاسخهای Distance Matrix
فراخوانی موفقیتآمیز به سرویس Distance Matrix یک
شیء DistanceMatrixResponse و یک
شیء DistanceMatrixStatus برمیگرداند. این موارد به تابع فراخوانی متقابل که در درخواست مشخص کردهاید منتقل میشوند.
شیء DistanceMatrixResponse حاوی اطلاعات مسافت و مدتزمان برای هر جفت مبدأ/مقصد است که میتوان برای آن مسیر محاسبه کرد.
{ "originAddresses": [ "Greenwich, Greater London, UK", "13 Great Carleton Square, Edinburgh, City of Edinburgh EH16 4, UK" ], "destinationAddresses": [ "Stockholm County, Sweden", "Dlouhá 609/2, 110 00 Praha-Staré Město, Česká republika" ], "rows": [ { "elements": [ { "status": "OK", "duration": { "value": 70778, "text": "19 hours 40 mins" }, "distance": { "value": 1887508, "text": "1173 mi" } }, { "status": "OK", "duration": { "value": 44476, "text": "12 hours 21 mins" }, "distance": { "value": 1262780, "text": "785 mi" } } ] }, { "elements": [ { "status": "OK", "duration": { "value": 96000, "text": "1 day 3 hours" }, "distance": { "value": 2566737, "text": "1595 mi" } }, { "status": "OK", "duration": { "value": 69698, "text": "19 hours 22 mins" }, "distance": { "value": 1942009, "text": "1207 mi" } } ] } ] }
نتایج ماتریس فاصله
فیلدهای پشتیبانیشده در پاسخ در زیر توضیح داده شده است.
originAddressesآرایهای است که مکانهای ارسالشده در فیلدoriginsدرخواست «ماتریس فاصله» را دربرمیگیرد. نشانیها همانطور که توسط زمینکدیاب قالببندی شدهاند برگردانده میشوند.destinationAddressesآرایهای است که حاوی مکانهای ارسالشده در فیلدdestinationsاست، در قالبی که توسط زمینکدیاب برگردانده شده است.rowsآرایهای از اشیایDistanceMatrixResponseRowاست که هر ردیف آن با یک مبدأ مطابقت دارد.elementsفرزندانrowsهستند و با جفت شدن مبدأ ردیف با هر مقصد مطابقت دارند. این عناصر حاوی اطلاعات وضعیت، مدت، فاصله، و کرایه (درصورت وجود) برای هر جفت مبدأ/مقصد هستند.- هر
elementشامل فیلدهای زیر است:status: برای مشاهده فهرست کدهای وضعیت احتمالی، کدهای وضعیت را ببینید.duration: مدت زمانی که طول میکشد تا این مسیر طی شود، به ثانیه (فیلدvalue) و بهصورتtextبیان میشود. مقدار متنی طبقunitSystemمشخصشده در درخواست قالببندی میشود (یا در سنجه، اگر هیچ اولویتبندیای ارائه نشده باشد).duration_in_traffic: مدت زمانی که طول میکشد تا این مسیر را با درنظر گرفتن شرایط ترافیک فعلی طی کنید، به ثانیه (فیلدvalue) و بهصورتtextبیان میشود. مقدار متنی طبقunitSystemمشخصشده در درخواست قالببندی میشود (یا در سنجه، اگر هیچ اولویتبندیای ارائه نشده باشد). duration_in_trafficفقط زمانی برگردانده میشود که دادههای ترافیک دردسترس باشد،modeرویdrivingتنظیم شده باشد، وdepartureTimeبهعنوان بخشی از فیلدdistanceMatrixOptionsدر درخواست گنجانده شده باشد.distance: مسافت کل این مسیر، بیانشده به متر (value) و بهصورتtext. مقدار متنی براساسunitSystemمشخصشده در درخواست قالببندی میشود (یا در سنجه، اگر اولویتی ارائه نشده باشد).fare: حاوی کل کرایه (یعنی کل هزینه بلیت) در این مسیر است. این ویژگی فقط برای درخواستهای حملونقل عمومی و فقط برای ارائهدهندگان حملونقل عمومی که اطلاعات کرایه برای آنها دردسترس است برگردانده میشود. این اطلاعات شامل موارد زیر است:currency: کد ارز ISO 4217 که نشاندهنده ارزی است که مبلغ به آن بیان شده است.value: مبلغ کل کرایه، به واحد پولی که در بالا مشخص شده است.
رمزهای وضعیت
پاسخ Distance Matrix شامل یک کد وضعیت برای پاسخ بهصورت کلی و همچنین یک وضعیت برای هر عنصر است.
کدهای وضعیت پاسخ
کدهای وضعیتی که برای DistanceMatrixResponse اعمال میشوند
در شیء DistanceMatrixStatus ارسال میشوند و شامل موارد زیر هستند:
OK— درخواست معتبر است. این وضعیت میتواند برگردانده شود حتی اگر هیچ مسیری بین هیچیک از مبدأها و مقصدها پیدا نشده باشد. برای اطلاعات وضعیت سطح عنصر، کدهای وضعیت عنصر را ببینید.INVALID_REQUEST— درخواست ارائهشده نامعتبر بود. این مشکل اغلب بهدلیل تکمیل نشدن فیلدهای الزامی است. فهرست فیلدهای پشتیبانیشده را در بالا ببینید.MAX_ELEMENTS_EXCEEDED— حاصلضرب مبدأها و مقصدها از حد مجاز هر پُرسمان فراتر میرود.MAX_DIMENSIONS_EXCEEDED— درخواست شما حاوی بیشاز ۲۵ مبدأ یا بیشاز ۲۵ مقصد بود.OVER_QUERY_LIMIT— برنامه شما در بازه زمانی مجاز، عناصر بسیار زیادی درخواست کرده است. اگر پساز مدت زمان معقولی دوباره امتحان کنید، درخواست باید موفقیتآمیز باشد.REQUEST_DENIED— این سرویس استفاده از سرویس «ماتریس فاصله» را توسط صفحه وب شما رد کرد.UNKNOWN_ERROR— درخواست «ماتریس فاصله» بهدلیل خطای سرور پردازش نشد. اگر دوباره امتحان کنید، ممکن است درخواست موفقیتآمیز باشد.
کدهای وضعیت عنصر
کدهای وضعیت زیر برای اشیاء خاص
DistanceMatrixElement اعمال میشود:
NOT_FOUND— مبدأ و/یا مقصد این جفتسازی زمینکدیابی نشد.OK— پاسخ حاوی نتیجه معتبری است.ZERO_RESULTS— هیچ مسیری بین مبدأ و مقصد پیدا نشد.
درحال تجزیه کردن نتایج
شیء DistanceMatrixResponse حاوی یک
row برای هر مبدأ است که در درخواست ارسال شده است. هر ردیف
حاوی فیلد element برای هر جفتسازی آن مبدأ با
مقصد(های) ارائهشده است.
function callback(response, status) { if (status == 'OK') { var origins = response.originAddresses; var destinations = response.destinationAddresses; for (var i = 0; i < origins.length; i++) { var results = response.rows[i].elements; for (var j = 0; j < results.length; j++) { var element = results[j]; var distance = element.distance.text; var duration = element.duration.text; var from = origins[i]; var to = destinations[j]; } } } }