¿Disolver o dividir líneas en atributos comunes en PostGIS o GRASS?

9

Tengo un archivo shape de la línea central de la carretera que tiene carreteras divididas en cada intersección. Sin embargo, me gustaría unir LINESTRING que tienen un conjunto común de atributos en un solo LINESTRING. Mientras el nombre, el límite de velocidad, etc., no cambien, quiero fusionarlos. Esto es para una eventual fusión en OpenStreetMap.

El software ArcGIS for Desktop de Esri parece permitir esto con el comando Disolver y la opción UNSPLIT_LINES.

También encontré un comando Disolver en QGIS, pero parece que solo funciona en polígonos y campos únicos.

Suponiendo que no exista nada para QGIS, ¿alguien sabe cómo hacerlo en PostGIS o GRASS?

joshdoe
fuente
Para PostGIS, consulte gis.stackexchange.com/questions/1387/…
underdark
Si se hiciera esta pregunta hoy, creo que se cerraría como demasiado amplia. En lugar de tratar de cerrarlo ahora, voy a editarlo para adaptar las respuestas existentes y evitar respuestas más amplias.
PolyGeo

Respuestas:

4

Interesante pregunta. No me considero un gurú de PostGIS, pero jugué con su problema y se me ocurrió la siguiente consulta que disuelve los LINESTRINGregistros de autopistas en MULTILINESTRINGregistros cuando tienen valores comunes en múltiples campos (en mi conjunto de datos, hice coincidir los campos namey 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 WHEREclá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 MULTILINESTRINGregistros 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:

ingrese la descripción de la imagen aquí

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. :)

elrobis
fuente
1

En GRASS GIS, eche un vistazo a v.build.polylines

v.build.polylines se puede usar para reconstruir polilíneas rotas

markusN
fuente