Pergunta interessante. Eu não me considero um guru do PostGIS, mas brinquei com seu problema e criei a seguinte consulta que dissolve LINESTRING
registros de rodovias em MULTILINESTRING
registros quando eles têm valores comuns em vários campos (no meu conjunto de dados, eu correspondi nos campos name
e 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 WHERE
clá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 MULTILINESTRING
registros 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:
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. :)