OSM - Найти все дополнительные маршруты в определенных ограничивающих рамках - PullRequest
0 голосов
/ 22 октября 2018

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

В случае на изображении: RouteExample:дополнительные маршруты:

  • 1-2, 1-4
  • 2-1, 2-3, 2-5
  • 3-2, 3-6
  • 4-1, 4-5
  • 5-4, 5-2, 5-6
  • 6-5, 6-3

До сих пор я пробовал этот код на узле overpass-turbo:

[bbox:{{bbox}}];
way[highway~"^(residential)$"]->.minor;
node(w.minor)(w.minor);
out;

Выходные данные - это пересечения, но:

  1. Список не содержит всех пересечений
  2. Мне нужны маршруты = соединение пар пересечений

1 Ответ

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

Если вам удобно использовать Java, рассмотрите возможность взглянуть на Atlas.Atlas - это представление данных OSM в памяти, которое позволит вам создать график, представляющий сеть улиц.Существует уровень API Atlas для подключения, маршрутизации и пространственного поиска.Для ваших конкретных потребностей - существует концепция Route , которая поддерживает пути и узлы OSM, определяющие путь между двумя узлами или путями.Есть способы получить наиболее оптимальный маршрут или получить все возможные маршруты.

Для начала я рекомендую следующее:

  1. Настройка и ознакомление с проектом Atlas
  2. Извлечение файла OSM или PBF с интересующей областью
  3. Создание файла Atlas из PBF, запуск применимого алгоритма маршрутизации

Пример кода для загрузки файла OSM:

public class TestAtlasTestRule extends CoreTestRule 
{
    @TestAtlas(loadFromJosmOsmResource = "yourOsmFile.osm")
    private Atlas yourAtlasFile;

    public Atlas getAtlasFile()
    {
        return this.yourAtlasFile;
    }
}

Пример кода для получения маршрутов:

// To get the shortest route
final Route shortestRoute = AStarRouter.dijkstra(yourAtlasFile, distanceThreshold).route(startNode, endNode);

// To get all the routes
final Set<Route> allRoutes = AllPathsRouter.allRoutes(startEdge, endEdge, comparatorThatEnforcesRouteOrdering);
...