Dissolver ou não dividir linhas em atributos comuns no PostGIS ou GRASS?

9

Eu tenho um shapefile da linha central da estrada que tem estradas divididas em todos os cruzamentos. No entanto, gostaria de associar LINESTRINGs que possuem um conjunto comum de atributos em um único LINESTRING. Contanto que o nome, o limite de velocidade, etc. não sejam alterados, desejo mesclá-los. Isto é para eventual fusão no OpenStreetMap.

O software ArcGIS for Desktop da Esri parece permitir isso com o comando Dissolve e a opção UNSPLIT_LINES.

Eu também encontrei um comando Dissolve no QGIS, mas parece funcionar apenas em polígonos e campos únicos.

Supondo que nada exista para o QGIS, alguém sabe como fazê-lo no PostGIS ou GRASS?

joshdoe
fonte
Para o PostGIS, verifique gis.stackexchange.com/questions/1387/…
underdark
Se essa pergunta fosse feita hoje, acho que seria fechada demais. Em vez de tentar fechá-lo agora, vou editá-lo para adaptar as respostas existentes e impedir respostas mais amplas.
PolyGeo

Respostas:

4

Pergunta interessante. Eu não me considero um guru do PostGIS, mas brinquei com seu problema e criei a seguinte consulta que dissolve LINESTRINGregistros de rodovias em MULTILINESTRINGregistros quando eles têm valores comuns em vários campos (no meu conjunto de dados, eu correspondi nos campos namee state). Usei o OGR para enviar um shapefile de rodovia (renomeado para ushwys) para o PostGREsql; então meu campo de geometria é chamado wkb_geometry. Tente invadir esta consulta para acomodar seus dados e condições de campo:

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

Se isso funcionar, você poderá usar ogr2ogr para executar esta consulta e exportar os resultados da maioria dos formatos vetoriais que você preferir, como shapefile, GML, CSV ou outro. Para obter informações sobre como chamar consultas SQL a partir do ogr2ogr, consulte a documentação SQL do OGR .

Como referência, revi a instrução PostGIS ST_Collect , bem como este site que demonstra o agrupamento em vários campos.

Se você achar que as redações desta consulta não funcionam para você, entre em contato e eu responderei minha resposta para que ela não permaneça e confunda as pessoas.


PS: Se você não está familiarizado com o ogr2ogr para enviar dados geográficos para o PostGIS, usei o seguinte script ogr2ogr para executar minha importação de dados ( cuidado ao copiar da Web e colar diretamente na janela de comando ogr2ogr, pois achei a formatação da página introduz quebras de linha e substituições de fonte / caractere entre aspas duplas que quebram o script 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

[Atualizar]

Eu queria ver como isso "parecia" no QGIS depois de executar essa consulta, então modifiquei a consulta para aplicar esta WHEREcláusula (que me fornece todas as variantes da US Highway 65 no estado do Missouri):

where u.state = 'MO' and u.name LIKE '%US%65%'

Em seguida, usei o QGIS e o plugin QuickWKT para visualizar todos os oito (8) dos meus MULTILINESTRINGregistros de rodovia resultantes . Como você pode ver na captura de tela, os resultados finais levam a Hwy 65 da fronteira norte de Missoui com Iowa até a fronteira sul com Arkansas:

insira a descrição da imagem aqui

Para mim, essa visualização demonstra que minha consulta não produziu duplicação ou eliminação inesperada de recursos. Então, em seguida, me perguntei "ok, a dissolução retornou oito recursos, mas quantos recursos na tabela original realmente representam a Hwy 65 no Missouri?" Minha próxima consulta respondeu a essa pergunta. Parece que o conjunto de dados original usa trinta e oito (38) recursos para representar a Hwy 65 no Missouri:

SELECT count(*) FROM ushwys WHERE state = 'MO' AND name LIKE '%US%65%';
-- returned 38

Na análise final, a consulta reduziu trinta e oito (38) recursos para oito (8) recursos que compartilhavam valores nos campos de nome e estado. Neste ponto, estou relativamente confiante de que esta consulta é útil e apropriada para dissolver geometros de peça única em geometrias de várias partes quando a tarefa de dissolução precisar considerar vários campos.

Felicidades. :)

elrobis
fonte
3

No PostGIS, existe uma função dedicada para mesclar linhas

ST_LineMerge - Retorna um (conjunto de) LineString (s) formado pela costura de uma MULTILINESTRING.

http://www.postgis.org/docs/ST_LineMerge.html

underdark
fonte
1

No GRASS GIS, consulte v.build.polylines

As v.build.polylines podem ser usadas para reconstruir polilinhas quebradas

markusN
fonte