Я использую Mapbox для своего приложения, чтобы генерировать маршрут и пошаговую навигацию, и это работает хорошо.Однако я хотел бы избежать прохождения некоторых координат маршрута, но я не могу понять это.
Код для получения маршрута:
Directions.shared.calculate(options) { [unowned self] (waypoints, routes, error) in
// Take first route and customize it in a way to get around some coordinates
}
Вот сценарий:
1- Местоположение пользователя latitude = 37.332331410000002, longitude = -122.0312186
2- Пользователь собирается на Santa Clara Unified School
, расположенный на latitude = 37.354100000000003,longitude = -121.9552
3- Api создает следующий маршрут:
[0] = {
latitude = 37.332329999999999
longitude = -122.03118000000001
}
[1] = {
latitude = 37.332619999999999
longitude = -122.03118000000001
}
[2] = {
latitude = 37.332609999999995
longitude = -122.03097000000001
}
[3] = {
latitude = 37.332609999999995
longitude = -122.03076000000001
}
[4] = {
latitude = 37.332199999999993
longitude = -122.03076000000001
}
[5] = {
latitude = 37.331689999999995
longitude = -122.03076000000001
}
[6] = {
latitude = 37.331689999999995
longitude = -122.03190000000002
}
[7] = {
latitude = 37.331719999999997
longitude = -122.03199000000002
}
[8] = {
latitude = 37.331759999999996
longitude = -122.03205000000003
} ...
4- Предположим, что сгенерированный маршрут проходит через East Homestead Rd, я хотел бы иметь возможность избежать этой дороги и создать новый маршрут, даже если он более длинный. На экране ниже избегайте маршрутакрасным, потому что вы проходите через East Homestead Rd и выбираете следующий самый быстрый маршрут, не проходя через East Homestead Rd
Любая помощь будет принята с благодарностью!
РЕДАКТИРОВАТЬ: Здесьзапрос для определения, есть ли у маршрута точки, которых следует избегать
// $linestring is the array of coordinates from the route in the string format of (lng lat,lng2 lat2,lng3 lat3,lng4 lat4....)
$query = $this->em->createQuery('
SELECT count(i) as counter
FROM HitsBundle:Hit i
WHERE i.datetime BETWEEN :lastMonth AND :now
AND
MBRCovers(
ST_Buffer(
ST_GeomFromText(\'LineString('.$linestring.')\') ,
0.00001
),
i.coordinates
) = 1
GROUP BY i.coordinates
HAVING counter > 1
')
->setParameter('lastMonth', $lastMonth)
->setParameter('now', new \DateTime())
->setMaxResults(1);