محاسبات مسیر (ازجمله تغییر مسیر) مسیری را برمیگرداند که کمترین زمان را برای پیمایش بهعنوان بهترین مسیر پیشفرض نیاز دارد. اما میتوانید راهبرد مسیریابی را تغییر دهید تا بهجای آن، کوتاهترین مسیر جایگزین برگردانده شود.
اصطلاح کوتاهتر بهمعنای مسیری است که براساس مدل هزینه پیشفرض ما، کوتاهترین مسیر در میان مسیرهای بهینه است. مسیر کوتاهتر ممکن است مطلقاً کوتاهترین مسیر نباشد، زیرا آن گزینه ممکن است جایگزین ضعیفی باشد. برای مثال، اگر کوتاهترین مسیر مطلق ۱۰ کیلومتر باشد و پیمایش آن ۵۰ دقیقه طول بکشد و مسیر دیگری ۱۵ کیلومتر باشد، اما پیمایش آن فقط ۲۰ دقیقه طول بکشد، انتخاب دوم بهینه است، زیرا صرف ۳۰ دقیقه برای کاهش پنج کیلومتر معامله خوبی نیست.
وقتی استراتژی مسیریابی را برای سفری تنظیم میکنید، تا زمانی که سفر تکمیل نشود، تغییر نخواهد کرد. برای تغییر استراتژی مسیریابی برای سفر موجود، باید مقصدها را پاک کنید و آنها را دوباره با استراتژی مسیریابی جدید بازنشانی کنید.
دریافت جزئیات مسیر
برای تعیین اینکه کدام استراتژی مسیر انتخاب بهینه برای یک نقطهمسیر معین است،
getRouteInfoForDestination() را فراخوانی کنید تا جزئیات مسیر را برای هر دو مسیر
بهترین مسیر پیشفرض و مسیر مطلقاً کوتاهتر دریافت کنید. جزئیات شامل مدتزمان و فاصله تا نقطهمسیر مقصد است.
این جزئیات از
GMSNavigationRouteInfo
در فراخوانی برگشتی میآید.
مثال
نمونه کد زیر نشان میدهد که چگونه جزئیات مسیر را برای هریک از دو استراتژی مسیریابی دریافت کنید.
Swift
let routingOptions = GMSNavigationRoutingOptions()
navigator?.getRouteInfoForDestination(destination,
routingOptions: routingOptions) { routeInfo in
...
}
آبجکتیو-سی
GMSNavigationRoutingOptions *routingOptions =
[[GMSNavigationRoutingOptions alloc] init];
[navigator getRouteInfoForDestination:destination
withRoutingOptions:routingOptions
callback:^(GMSNavigationRouteInfo *routeInfo){...}];
تنظیم استراتژی مسیریابی
میتوانید راهبرد مسیریابی را بااستفاده از GMSNavigationRoutingOptions پیکربندی کنید،
و routingStrategy را هنگام تماس با setDestinations() تنظیم کنید.
routingStrategy یکی از مقادیر شمارشی زیر را میگیرد:
| ارزش فهرست | شرح |
|---|---|
| GMSNavigationRoutingStrategyDefaultBest | مسیرها را براساس مدل هزینه پیشفرض کیت توسعه نرمافزار پیمایش رتبهبندی میکند. این استراتژی رهیابی پیشفرض است. |
| GMSNavigationRoutingStrategyShorter | مسیرها را براساس فاصله رتبهبندی میکند. مسیر دارای بالاترین رتبه کوتاهترین مسیر از بین مسیرهای برگرداندهشده است. |
مثال
نمونه کد زیر نحوه تنظیم استراتژی مسیریابی کوتاهتر را نشان میدهد.
Swift
let routingOptions = GMSNavigationRoutingOptions(routingStrategy: .shorter)
navigator?.setDestinations(destinations,
routingOptions: routingOptions) { routeStatus in
...
}
آبجکتیو-سی
GMSNavigationRoutingOptions *routingOptions = [[GMSNavigationRoutingOptions alloc] initWithRoutingStrategy:GMSNavigationRoutingStrategyShorter];
[navigator setDestinations:destinations
routingOptions:routingOptions
callback:^(GMSRouteStatus routeStatus){...}];
مسیرهایی که شامل کشتی است
بهطور پیشفرض، Navigation SDK for iOS مسیرهایی را که شامل کشتیهای مسافربری هستند مستثنی میکند. اگر ترجیح میدهید
گزینههای کشتی را بهعنوان بخشی از مسیرهایتان اضافه کنید، میتوانید این اولویت
مسیریابی را با تنظیم avoidsFerries روی
false تغییر دهید تا سفر در بخشهای کشتی نمایش داده شود.
مثال
Swift
self.mapView.navigator?.avoidsFerries = false
آبجکتیو-سی
self.mapView.navigator.avoidsFerries = NO
قالب نوشته راهنمای مسیر
در استراتژی مسیریابی کوتاهتر، توضیحات درطول مسیر جزئیات مسافت را نمایش میدهد. اما میتوانید بهجای آن از توضیحات زمان تخمینی ورود استفاده کنید.
درحال پیکربندی قالب نوشته راهنمای مسیر
میتوانید قالب بالانویس مسیر را با تنظیم routeCalloutFormat در
GMSMapView تغییر دهید. routeCalloutFormat یکی از مقادیر شمارشی زیر را میگیرد:
| ارزش فهرست | شرح |
|---|---|
| GMSNavigationRouteCalloutFormatDefault | زمان باقیمانده را هنگام استفاده از استراتژی مسیریابی بهترین مسیر پیشفرض نمایش میدهد. هنگام استفاده از استراتژی مسیریابی کوتاهتر، فاصله باقیمانده را نمایش میدهد |
| GMSNavigationRouteCalloutFormatTime | زمان باقیمانده را نمایش میدهد. |
| GMSNavigationRouteCalloutFormatDistance | مسافت باقیمانده را نشان میدهد. |
مثال
نمونه کد زیر نحوه پیکربندی قالب فراخوانی مسیر را نشان میدهد.
Swift
self.mapView.routeCalloutFormat = .time
آبجکتیو-سی
_mapView.routeCalloutFormat = GMSNavigationRouteCalloutFormatTime;