Розпустіть чи нерозкладіть рядки на загальних атрибутах у PostGIS чи GRASS?


9

Я маю дорожню форму дорожньої лінії, яка розбиває дороги на кожному перехресті. Однак я хотів би приєднати LINESTRING, які мають загальний набір атрибутів, в єдиний LINESTRING. Поки ім’я, обмеження швидкості тощо не змінюються, я хочу об'єднати їх разом. Це для можливого зв’язку з OpenStreetMap.

Програмне забезпечення ArcGIS для робочого столу Esri, схоже, дозволяє це за допомогою команди Dissolve та опції UNSPLIT_LINES.

Я також знайшов команду Dissolve в QGIS, але, здається, вона працює лише на полігонах та поодиноких полях.

Якщо припустити, що для QGIS нічого не існує, хтось знає, як це зробити в PostGIS або GRASS?


Для перевірки PostGIS gis.stackexchange.com/questions/1387/…
underdark

Якби сьогодні було задано це запитання, я вважаю, що воно було б закритим як занадто широким. Замість того, щоб спробувати закрити його зараз, я збираюся відредагувати його, щоб оновити існуючі відповіді та запобігти більш широким відповідям.
PolyGeo

Відповіді:


4

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

Ура. :)



1

У GRASS GIS подивіться на v.build.polylines

v.build.polylines можна використовувати для відновлення зламаних поліліній

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