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. из сетевого приемника (то есть: сток речной сети) сначала выполнить поиск в глубине и назначить номера в обратном порядке (самый большой из стока, меньше по мере продвижения вверх по течению).
Я бы создал новый исходный и целевой столбцы для этого. Возможно, есть лучший способ решить эту проблему, но в данный момент он неочевиден.