Interesante pregunta. No me considero un gurú de PostGIS, pero jugué con su problema y se me ocurrió la siguiente consulta que disuelve los LINESTRING
registros de autopistas en MULTILINESTRING
registros cuando tienen valores comunes en múltiples campos (en mi conjunto de datos, hice coincidir los campos name
y state
). Usé OGR para empujar un archivo de formas de autopistas (renombrado a ushwys) en PostGREsql; entonces mi campo de geometría se llama wkb_geometry
. Intente hackear esta consulta para acomodar sus datos y condiciones 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
Si esto funciona, puede usar ogr2ogr para realizar esta consulta y exportar los resultados a cualquier formato vectorial que prefiera, como shapefile, GML, CSV u otros. Para obtener información sobre cómo llamar consultas SQL desde ogr2ogr, consulte la documentación de SQL de OGR .
Como referencia, revisé la instrucción PostGIS ST_Collect , así como este sitio que muestra la agrupación en múltiples campos.
Si encuentra que las redacciones de esta consulta no funcionan para usted, hágamelo saber y responderé para que no se demore y confunda a las personas.
PD: si no está familiarizado con el uso de ogr2ogr para insertar geodatos en PostGIS, utilicé el siguiente script ogr2ogr para realizar mi importación de datos ( tenga cuidado de copiar desde la web y pegar directamente en la ventana de comandos de ogr2ogr, ya que encontré el formato de página introduce saltos de línea y sustituciones de fuente / carácter para comillas dobles que rompen el guión 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
[Actualizar]
Quería ver cómo se "veía" esto en QGIS después de ejecutar esa consulta, por lo que modifiqué la consulta para aplicar esta WHERE
cláusula (que me da todas las variantes de US Highway 65 en el estado de Missouri):
where u.state = 'MO' and u.name LIKE '%US%65%'
Luego utilicé QGIS y el complemento QuickWKT para visualizar los ocho (8) de mis MULTILINESTRING
registros de carreteras resultantes . Como puede ver en la captura de pantalla, los resultados finales toman la autopista 65 desde la frontera norte de Missoui con Iowa hasta su frontera sur con Arkansas:
Para mí, esta visualización demuestra que mi consulta no produjo ninguna duplicación o eliminación inesperada de características. Entonces, me pregunté "ok, la disolución devolvió ocho características, pero ¿cuántas características en la tabla original realmente representan la autopista 65 en Missouri?" Mi siguiente consulta respondió a esa pregunta. Parece que el conjunto de datos original usa treinta y ocho (38) características para representar la autopista 65 en Missouri:
SELECT count(*) FROM ushwys WHERE state = 'MO' AND name LIKE '%US%65%';
-- returned 38
En el análisis final, la consulta redujo treinta y ocho (38) características a ocho (8) características que compartían valores en los campos de nombre y estado. En este punto, estoy relativamente seguro de que esta consulta es útil y apropiada para disolver geometrías de una sola parte en geometrías multiparte cuando la tarea de disolución necesita considerar múltiples campos.
Salud. :)