Una pregunta interesante. No me considero un gurú de PostGIS, pero he jugado con tu problema y he dado con la siguiente consulta que disuelve la carretera LINESTRING
registros en MULTILINESTRING
registros cuando tienen valores comunes en varios campos (en mi conjunto de datos, coincidí con el name
y state
campos). Utilicé OGR para introducir un archivo shape de carreteras (renombrado como ushwys) en PostgreSQL; así que mi campo de geometría se llama wkb_geometry
. Intente modificar esta consulta para adaptarla a 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, puedes utilizar ogr2ogr para realizar esta consulta y exportar los resultados a cualquier formato vectorial que prefieras, como shapefile, GML, CSV o cualquier otro. Para obtener información sobre cómo llamar a las consultas SQL desde ogr2ogr, echa un vistazo a la página OGR SQL documentación.
Como referencia, he revisado el PostGIS ST_Collect de la instrucción, así como de este sitio que demuestra la agrupación en múltiples campos.
Si encuentras que las redacciones de esta consulta no te sirven, por favor házmelo saber y tacharé mi respuesta para que no se quede por ahí y confunda a la gente.
Si no estás familiarizado con el uso de ogr2ogr para introducir geodatos en PostGIS, he utilizado el siguiente script ogr2ogr para realizar mi importación de datos ( cuidado con copiar de la web y pegar directamente en la ventana de comandos de ogr2ogr, ya que he descubierto que el formato de la página introduce saltos de línea y sustituciones de fuentes/caracteres para las comillas dobles que rompen el script de 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
Quería ver cómo se "veía" esto en QGIS después de ejecutar esa consulta, así que modifiqué la consulta para aplicar esto WHERE
cláusula (que me da todas las variantes de la US Highway 65 en el estado de Missouri):
where u.state = 'MO' and u.name LIKE '%US%65%'
A continuación, utilicé QGIS y el plugin QuickWKT para visualizar las ocho (8) carreteras resultantes MULTILINESTRING
registros. Como se puede ver en la captura de pantalla, los resultados finales llevan a 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. A continuación me pregunté: "De acuerdo, la disolución devolvió ocho características, pero ¿cuántas características de la tabla original representan realmente la autopista 65 en Missouri?". Mi siguiente consulta respondió a esta pregunta. Parece que el conjunto de datos original utiliza treinta y ocho (38) características para representar la carretera 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 adecuada para disolver geometrías de una sola parte en geometrías de varias partes cuando la tarea de disolución debe tener en cuenta varios campos.