Избегайте координат при создании маршрута с помощью Mapbox Direction API - PullRequest
0 голосов
/ 02 июня 2018

Я использую 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 enter image description here

Любая помощь будет принята с благодарностью!

РЕДАКТИРОВАТЬ: Здесьзапрос для определения, есть ли у маршрута точки, которых следует избегать

// $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);

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

После нескольких месяцев работы с API-интерфейсом MapBox мы пришли к выводу, что он не надежен для данного конкретного случая использования.При расчете маршрутов из точки A в точку B с помощью API направления MapBox предлагает параметр includesAlternativeRoutes, если задано значение true, он предоставляет альтернативные маршруты.Однако это не согласуется и в большинстве случаев возвращает только предпочтительный маршрут.

Согласно MapBox:

Если значение этого свойства равно true, сервер пытается найти дополнительныйразумные маршруты, которые посещают путевые точки.Независимо от этого, несколько маршрутов возвращаются только в том случае, если есть возможность посетить путевые точки по другому маршруту без значительного увеличения расстояния или времени в пути.

Поэтому мы перейдем к Google Maps, так как эта функция имеет решающее значение для нашей бизнес-логики.

0 голосов
/ 11 июня 2018

Возможно, я не совсем уверен, но при просмотре API Mapbox у него нет вариантов, которых следует избегать при создании маршрутов, поэтому вам необходимо реализовать некоторую логику выбора маршрута на стороне клиента.

В основномвам нужен алгоритм, который получает набор точек, которых следует избегать, и проверяет, находится ли геометрия вашего маршрута GeoJSON или Polyline в некотором пороговом диапазоне от заданных точек.Если это так - отменить маршрут (или более низкий приоритет маршрута).

Конечно, он может не найти маршрут, если все маршруты, предоставляемые Mapbox, отброшены - Mapbox не знает о ваших ограничениях, поэтомуиспользование веса для маршрутов может быть одним из способов решения этой проблемы.

Эти сообщения могут дать вам несколько советов:

...