Маршруты
Построение маршрута
Для того, чтобы проложить маршрут на карте, нужно создать два объекта: TrafficRouter для поиска оптимального маршрута и источник данных RouteMapObjectSource для отображения маршрута на карте.
Чтобы найти маршрут между двумя точками, нужно вызвать метод findRoute(), передав координаты точек в виде объектов RouteSearchPoint и параметры маршрута (RouteSearchOptions). Дополнительно можно указать также список промежуточных точек маршрута (список RouteSearchPoint).
let startPoint = RouteSearchPoint(coordinates: GeoPoint(latitude: 55.759909, longitude: 37.618806))
let finishPoint = RouteSearchPoint(coordinates: GeoPoint(latitude: 55.752425, longitude: 37.613983))
let routeSearchOptions = RouteSearchOptions.car(CarRouteSearchOptions())
let trafficRouter = TrafficRouter(context: sdk.context)
let routesFuture = trafficRouter.findRoute(
startPoint: startPoint,
finishPoint: finishPoint,
routeSearchOptions: routeSearchOptions
)
Вызов вернёт отложенный результат со списком объектов TrafficRoute. Чтобы отобразить найденный маршрут на карте, нужно на основе этих объектов создать объекты RouteMapObject и добавить их в источник данных RouteMapObjectSource.
// Создаём источник данных.
let routeMapObjectSource = RouteMapObjectSource(context: sdk.context, routeVisualizationType: .normal)
map.addSource(source: routeMapObjectSource)
// Ищем маршрут.
self.routeSearchCancellable = routesFuture.sink { routes in
// Ддобавляем их на карту.
for (index, route) in routes.enumerated() {
let routeMapObject = RouteMapObject(
route: route,
isActive: index == 0,
index: RouteIndex(value: UInt64(index)),
displayFlags: nil
)
routeMapObjectSource.addObject(item: routeMapObject)
}
} failure: { error in
print("Не удалось найти маршрут: \(error)")
}