У меня есть сетевой график, который мне нужно упростить в смысле уменьшения количества ребер . Идея состоит в том, чтобы объединить узлы, которые расположены близко друг к другу, и удалить короткие соединительные ребра.
Как этого достичь в PostGIS или GRASS? Или есть ли лучшие подходы для автоматического упрощения такой сети?
Я уже попробовал функцию ST_SnapToGrid, но я не доволен результатами (серый = оригинальный, черный = привязанный):
Ответы:
Самое близкое, что я зашел, это:
Он ломает дороги с допуском 5 метров и удаляет все линии нулевой длины. Это не оптимальное решение, так как кажется, что оно привязано к некоторой вершине случайным образом.
источник
Вы пробовали GRASS v.generalize ?
v.generalize
позволяет выбрать алгоритм обобщения с атрибутом метода . Существует множество: douglas, douglas_reduction, lang, Reduction, Reumann, Boyle, Sliding_averaging, distance_weighting, Chaiken, Hermite, Snakes, Network, смещения .И дополнительные параметры , как
threshold
,degree_thresh
,angle_thresh
( в зависимости от выбранного алгоритма) может помочь вам получить точный результат.Здесь идет учебник .
источник
Я этого не делал, но думаю, что могу предложить направление.
ST_ModEdgeHeal объединит одно ребро с другим. ST_NewEdgeHeal заменит оба с новым ребром.
Руководство по топологии PostGIS
источник
@underdark, я вижу, что вы написали инструмент для уплотнения строк в Sextante. Поэтому я предлагаю следующий алгоритм, чтобы избежать «случайной» привязки одной из ваших точек.
Выберите отрезки, от которых вы хотите избавиться, исходя из их длины.
Для каждого из этих сегментов создайте точку в средней точке
Удалить маленький сегмент
Теперь вы можете использовать ST_Snap в PostGIS (см. Пример здесь )
РЕДАКТИРОВАТЬ: обратите внимание, что в вашем случае, вы также могли бы сначала использовать v.net для удаления псевдо-узлов (узел, который соединяет только две линии)
источник
Расскажите, как Микаэль Мишо проанализировал это в списке разработчиков OpenJUMP:
источник