Цікаве запитання. Я не вважаю себе гуру 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 для виконання цього запиту та експорту результатів у найбільш бажаний векторний формат, такий як shapefile, 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) функцій, які розділяли значення в полях імені та стану. На даний момент я відносно впевнений, що цей запит є корисним і підходящим для розчинення одночастотних геометрій у багаточастотних геометріях, коли завдання розв’язування потребує врахування декількох полів.
Ура. :)