У меня есть шейп-файл (состоящий из основных европейских дорог) с примерно 250 000 сегментов, которые я должен упростить для pgrouting. Но я не могу найти способ сделать это правильно.
Вот как это выглядит:
и вот как это должно выглядеть:
Мне как-то приходится удалять каждую точку линий, которая связана менее чем с 3 линиями (не являясь пересечением), сохраняя при этом топологические связи между остальными точками. Если у кого-то есть идея, она будет очень признательна!
С наилучшими пожеланиями
РЕДАКТИРОВАТЬ: я пытался реализовать идею @dkastl и удалось получить из моей сети только ненужные узлы (узлы только с 2 смежными линейными строками) с помощью приведенного ниже кода (создание сети взято из блога Underunder) http://underdark.wordpress.com / 2011/02/07 / a-beginners-guide-to-pgrouting / ):
SELECT * FROM
(SELECT tmp.id as gid, node.the_geom FROM
(SELECT id, count(*) FROM network
JOIN node
ON (start_id = id OR end_id = id) AND (end_id = id OR start_id = id)
GROUP BY id ORDER BY id) as tmp
JOIN node ON (tmp.id = node.id)
WHERE tmp.count = 2) as unn_node;
Итак, все, что мне теперь нужно сделать, это объединение строк. Тем не менее, я понятия не имею, как. Я предполагаю, что это должен быть цикл, который для каждой строки результата вышеупомянутого запроса получает соседние строки и объединяет их. Затем он полностью перестроит сеть и будет повторять процесс до тех пор, пока приведенный выше запрос не вернет пустой результат.
Ответы:
Вам, безусловно, следует применить фильтр ramer-douglass-peucker к вашим линиям. Он доступен в PostGIS как функция ST_Simplify . Версия с сохранением топологии может быть интересна для вашего случая. Удачи!
источник