У меня есть шейп-файл осевой линии дороги, у которого дороги разбиты на каждом перекрестке. Однако я хотел бы объединить LINESTRING, которые имеют общий набор атрибутов, в одну LINESTRING. Пока имя, ограничение скорости и т. Д. Не меняются, я хочу объединить их вместе. Это для возможного объединения в OpenStreetMap.
Похоже, что программное обеспечение Esri ArcGIS for Desktop позволяет это с помощью команды Dissolve и опции UNSPLIT_LINES.
Я также нашел команду Dissolve в QGIS, но она работает только с полигонами и отдельными полями.
Предполагая, что для QGIS ничего не существует, кто-нибудь знает, как это сделать в PostGIS или GRASS?
postgis
openstreetmap
grass
dissolve
joshdoe
источник
источник
Ответы:
Интересный вопрос Я не считаю себя PostGIS гуру, но я поиграл с вашей проблемой и придумал следующий запрос , который растворяет шоссе
LINESTRING
запись вMULTILINESTRING
запись , когда они имеют общие ценности в различных областях (в моем наборе данных, я соответствовал наname
иstate
полей). Я использовал OGR, чтобы вставить шейп-файл шоссе (переименованный в ushwys) в PostGREsql; так называется мое поле геометрииwkb_geometry
. Попробуйте взломать этот запрос, чтобы учесть ваши данные и условия поля:Если это работает, вы можете использовать ogr2ogr для выполнения этого запроса и экспортировать результаты практически в любой векторный формат, который вы предпочитаете, например, шейп-файл, GML, CSV или другой. Информацию о вызове SQL-запросов из ogr2ogr можно найти в документации по OGR SQL .
Для справки я рассмотрел инструкцию PostGIS ST_Collect , а также этот сайт, который демонстрирует группирование по нескольким полям.
Если вы обнаружите, что редактирование этого запроса не работает для вас, пожалуйста, дайте мне знать, и я напишу свой ответ, чтобы он не задерживался и не запутывал людей.
PS Если вы не знакомы с использованием ogr2ogr для отправки геоданных в PostGIS, я использовал следующий сценарий ogr2ogr для выполнения импорта данных ( остерегайтесь копирования из Интернета и вставки непосредственно в командное окно ogr2ogr, так как я обнаружил форматирование страницы вводит разрывы строк и замену шрифтов / символов для двойных кавычек, которые нарушают скрипт ogr ):
[Обновить]
Я хотел посмотреть, как это «выглядело» в QGIS после выполнения этого запроса, поэтому я изменил запрос, чтобы применить это
WHERE
предложение (которое дает мне все варианты шоссе США 65 в штате Миссури):Затем я использовал QGIS и плагин QuickWKT, чтобы визуализировать все восемь (8) моих полученных
MULTILINESTRING
записей шоссе . Как вы можете видеть на скриншоте, окончательные результаты приводят Hwy 65 от северной границы Миссуи до Айовы до ее южной границы с Арканзасом:Для меня эта визуализация показывает, что мой запрос не привел к неожиданному дублированию или устранению функций. Поэтому в следующий раз я подумал: «Хорошо, растворение вернуло восемь функций, но сколько функций в исходной таблице фактически представляет Hwy 65 в Миссури?» Мой следующий запрос ответил на этот вопрос. Кажется, что оригинальный набор данных использует тридцать восемь (38) функций для представления Hwy 65 в Миссури:
В конечном итоге, запрос сократил тридцать восемь (38) функций до восьми (8) функций, которые имели общие значения в полях имени и состояния. На данный момент, я относительно уверен, что этот запрос полезен и подходит для растворения однокомпонентных геометров в составные геометрии, когда задача растворения должна учитывать несколько полей.
Приветствия. :)
источник
В PostGIS есть специальная функция для объединения строк
http://www.postgis.org/docs/ST_LineMerge.html
источник
В GRASS GIS взгляните на v.build.polylines
источник