Як спростити лінійну мережу, зберігаючи топологію?


9

У мене є Shapefile (складається з головних європейських доріг) з приблизно 250 000 сегментів, які я маю спростити для прошивки. Але я, здається, не можу знайти спосіб зробити це належним чином.

Ось як це виглядає:

http://i.stack.imgur.com/qJ2OJ.png

і ось як це має виглядати:

http://i.stack.imgur.com/FN4Z6.png

Мені якось доводиться видаляти кожну точку ліній, яка з'єднана з менш ніж 3 лініями (не є перетином), зберігаючи топологічні зв’язки між рештою точками. Якщо хтось має ідею, це буде дуже вдячно!

З повагою

EDIT: Я спробував реалізувати ідею @dkastl і мені вдалося отримати лише непотрібні вузли (вузли із лише двома сусідніми рядками) з моєї мережі з кодом нижче (генерація мережі взята з блогу Underdark http://underdark.wordpress.com / 2011/02/07 / a-початківці-керівництво-до 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;

Отже, все, що мені зараз потрібно зробити - це злиття ліній. Однак у мене немає поняття, як. Я думаю, що це повинен бути цикл, який для кожного ряду результатів вищезазначеного запиту отримує суміжні рядки і об'єднує їх. Тоді вона б відновила мережу повністю і повторила процес, поки запит вище не поверне порожній результат.


1
Чому ви повинні робити це для pgRouting? Якщо у вас уже призначений ідентифікатор джерела / цілі, ви можете створити нову геометрію, при цьому рядки рядків містять лише джерело та цільовий ідентифікатор. Це має виглядати як ваше друге зображення.
dkastl

Проблема полягає в тому, що рядки сегментовані (якщо ви дивитесь на перше я розміщене зображення, кожна точка, яку ви бачите, починає / закінчує новий сегмент), ваш підхід спрощує геометрію (що добре), але не топологію.
chriserik

1
Я не думаю, що з вашого зображення очевидно, що кожна точка починає нову геометрію рядкових рядків. Ви вже запустили функцію призначення_вертенок_id pgRouting для заповнення вихідних / цільових стовпців? У такому випадку ви можете пізніше виконати деякі запити для виявлення джерел / цільових ідентифікаторів, які існують лише двічі, а це означає, що ви повинні мати змогу об'єднати два сегментних рядків у цей момент. Якщо джерело / цільовий ідентифікатор існує більше, ніж два рази, це повинно бути перетином.
dkastl

@dkastl: Дуже гарна ідея! Я оновив своє запитання, показуючи, як далеко я з цим дістався.
chriserik

Відповіді:


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.