Интересный вопрос Я не считаю себя PostGIS гуру, но я поиграл с вашей проблемой и придумал следующий запрос , который растворяет шоссе LINESTRING
запись в MULTILINESTRING
запись , когда они имеют общие ценности в различных областях (в моем наборе данных, я соответствовал на name
и state
полей). Я использовал OGR, чтобы вставить шейп-файл шоссе (переименованный в ushwys) в PostGREsql; так называется мое поле геометрии wkb_geometry
. Попробуйте взломать этот запрос, чтобы учесть ваши данные и условия поля:
SELECT
u.name,
u.state,
ST_AsText( ST_Multi( ST_Collect( u.wkb_geometry ) ) ) as multilines
FROM ushwys u
GROUP BY u.name, u.state
ORDER BY u.state
LIMIT 100; --########### DROP THE LIMIT WHEN YOU'RE DONE EXPERIMENTING
Если это работает, вы можете использовать ogr2ogr для выполнения этого запроса и экспортировать результаты практически в любой векторный формат, который вы предпочитаете, например, шейп-файл, GML, CSV или другой. Информацию о вызове SQL-запросов из ogr2ogr можно найти в документации по OGR SQL .
Для справки я рассмотрел инструкцию PostGIS ST_Collect , а также этот сайт, который демонстрирует группирование по нескольким полям.
Если вы обнаружите, что редактирование этого запроса не работает для вас, пожалуйста, дайте мне знать, и я напишу свой ответ, чтобы он не задерживался и не запутывал людей.
PS Если вы не знакомы с использованием ogr2ogr для отправки геоданных в PostGIS, я использовал следующий сценарий ogr2ogr для выполнения импорта данных ( остерегайтесь копирования из Интернета и вставки непосредственно в командное окно ogr2ogr, так как я обнаружил форматирование страницы вводит разрывы строк и замену шрифтов / символов для двойных кавычек, которые нарушают скрипт ogr ):
ogr2ogr -f "PostGreSQL" PG:"host=127.0.0.1 user=postgres dbname=gisdb password=my_password"
"E:\GISData\UnitedStates\highways.shp" -nln ushwys -nlt geometry
[Обновить]
Я хотел посмотреть, как это «выглядело» в QGIS после выполнения этого запроса, поэтому я изменил запрос, чтобы применить это WHERE
предложение (которое дает мне все варианты шоссе США 65 в штате Миссури):
where u.state = 'MO' and u.name LIKE '%US%65%'
Затем я использовал QGIS и плагин QuickWKT, чтобы визуализировать все восемь (8) моих полученных MULTILINESTRING
записей шоссе . Как вы можете видеть на скриншоте, окончательные результаты приводят Hwy 65 от северной границы Миссуи до Айовы до ее южной границы с Арканзасом:
Для меня эта визуализация показывает, что мой запрос не привел к неожиданному дублированию или устранению функций. Поэтому в следующий раз я подумал: «Хорошо, растворение вернуло восемь функций, но сколько функций в исходной таблице фактически представляет Hwy 65 в Миссури?» Мой следующий запрос ответил на этот вопрос. Кажется, что оригинальный набор данных использует тридцать восемь (38) функций для представления Hwy 65 в Миссури:
SELECT count(*) FROM ushwys WHERE state = 'MO' AND name LIKE '%US%65%';
-- returned 38
В конечном итоге, запрос сократил тридцать восемь (38) функций до восьми (8) функций, которые имели общие значения в полях имени и состояния. На данный момент, я относительно уверен, что этот запрос полезен и подходит для растворения однокомпонентных геометров в составные геометрии, когда задача растворения должна учитывать несколько полей.
Приветствия. :)