pgRouting назначить номер источника и цели

У меня есть шейп-файл речной сети, и я использую pgRouting 2.0 для его маршрутизации. Я использую следующий SQL-код, чтобы сделать его маршрутизируемым,

alter table tc_15000_w_area add column source integer;
alter table tc_15000_w_area add column target integer;
select pgr_createTopology('tc_15000_w_area', 0.0001, 'the_geom', 'gid');

Все, что мне нужно, это маршрутизируемая таблица, содержащая источник / цель, и направление от всех источников к целям совпадает с направлением реки. Вот схематическое фото,

введите описание изображения здесь

фиолетовая линия - река

красные точки - это узлы (вершины)

красные цифры - номера узлов

каждый сегмент реки имеет свой источник (узел) и цель

Но я проверяю полученную таблицу и нахожу, что узел № 11 всегда является целью. Это приведет к тому, что по крайней мере один из краев будет иметь неправильное направление (направление потока).

введите описание изображения здесь

Может ли pgRouting назначить номера источника и цели и сделать направление от источника к цели таким же, как направление потока? Если нет, что я могу сделать?

Я использовал разные допуски в коде SQL, но получил тот же результат, и я также получил тот же результат, используя версию 1.x pgRouting под PostgreSQL 8.4.

1 ответ

Допуск определяет минимальное расстояние между двумя точками, которые будут объединены в одну точку. Например, если у вас есть две точки, а расстояние между ними в единицах базы данных меньше допуска, они будут считаться одной и той же точкой, и им будет присвоен один и тот же номер.

заданный сегмент ребра в вашей таблице геометрии перед запуском pgr_createtopology(), как узнать направление потока? на основе направления оцифровки? Мы не смотрим на это при присвоении номеров. Числа присваиваются в порядке поступления, так как мы обрабатываем края.

Чтобы решить вашу проблему, вам, вероятно, нужно написать алгоритм перенумерации узлов, который работает примерно так: 1. запустить pgr_createtopology() 2. из сетевого приемника (то есть: сток речной сети) сначала выполнить поиск в глубине и назначить номера в обратном порядке (самый большой из стока, меньше по мере продвижения вверх по течению).

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

Другие вопросы по тегам