9 votos

¿Limpiar un Shapefile grande con v.clean para disolver las características?

Estoy teniendo verdaderos problemas para limpiar y reducir el tamaño de un Shapefile que es publicado por la Agencia de Medio Ambiente del Reino Unido .

Muestra las extensiones de los datos abiertos LiDAR que publican: cada polígono es un vuelo topográfico, y hay campos para la resolución, la fecha del vuelo, etc.

Eventualmente me gustaría terminar con un Shapefile disuelto (fusionando todas las características) y simplificado que sea mucho más pequeño en tamaño. Por el momento:

  • El .shp ocupa 360,6 MB
  • El .dbp ocupa 26,9 MB
  • Hay 121.753 polígonos

Creo que una de las razones por las que el archivo es tan grande es que hay muchas pequeñas "motas" de datos (que no son importantes para mis fines):

enter image description here

Lo que he probado hasta ahora:

  1. Disolución con QGIS: esto parecía no progresar en un archivo tan grande así que lo cancelé después de un tiempo
  2. Disolución con OGR ( ogr2ogr dissolved.shp LIDAR_composite_extents_2015.shp -dialect sqlite -sql "SELECT ST_Union(geometry) AS geometry FROM LIDAR_composite_extents_2015" ): al cabo de unas horas me salía un error como el siguiente: GEOS error: TopologyException: Input geom 0 is invalid: Ring Self-intersection at or near point 221912.50000000093 50580.000000001863 at 221912.50000000093 50580.000000001863 - Supongo que este será el primero de muchos errores
  3. Limpiando el Shapefile, primero con Check Geometry Validity de QGIS, luego con v.clean de GRASS (probé con bpol), pero el archivo limpiado sigue fallando al disolver (también probé agregando un buffer cero)
  4. Convirtiendo los polígonos de varias partes en partes individuales, añadiendo una columna de geometría y eliminando las características más pequeñas que un área determinada. Esto redujo el tamaño de los archivos en unos 100MB, pero no afectó a los "agujeros" dentro de los polígonos - para deshacerse de ellos intenté hacer una capa de diferencia, pero la operación de diferencia falla sistemáticamente (si compruebo que se ignora la geometría no válida, crea muchas características que son visibles en la tabla de atributos, pero no las muestra).

Al final simplificaré el archivo, pero no quiero hacerlo antes de la disolución por si introduzco astillas.

¿Debo utilizar una herramienta diferente dentro de v.clean?

Todavía no he intentado dividir el archivo en regiones y disolverlas, y luego disolver las regiones.

0 votos

Me pregunto qué quieres conseguir disolviendo esos polígonos. Por lo que tengo entendido, esta capa sólo te da información sobre dónde se tomaron los datos LIDAR, cuándo y a qué resolución, etc. Y, por supuesto, los polígonos se superponen porque la misma área fue sobrevolada en diferentes momentos.

0 votos

Sugiero simplificar las geometrías antes de disolverlas porque, de lo contrario, no tendrás límites vecinos entre los polígonos. Además, yo utilizaría una combinación de Simplificar las geometrías (primero) y Geometría suave (entonces) herramientas. Si puede utilizar scripts, también puede echar un vistazo aquí .

0 votos

@BerndV. Sí, estos datos son sólo las extensiones del LiDAR. El uso final es una aplicación web, que necesita ilustrar al usuario qué área está cubierta con los datos.

16voto

Joe Puntos 16

Los datos de origen parecen ser bastante difíciles de manejar como vectores, como has podido comprobar. Sin embargo, este trabajo que pasa por un archivo raster intermedio funciona bien y es muy rápido.

1) Utilice gdal_rasterize http://www.gdal.org/gdal_rasterize.html y para hacer una trama en blanco y negro de la capa

gdal_rasterize -burn 100 -ts 1000 1000 -ot byte LIDAR_composite_extents_2015.shp burned.tif

2) Utilizar gdal_polygonize http://www.gdal.org/gdal_polygonize.html para crear polígonos a partir de la trama

gdal_polygonize -f "ESRI Shapefile" burned.tif merged.shp

Seleccione todos los polígonos que tienen "0" como valor del atributo "DN" y elimínelos. Como resultado tendrás un pequeño shapefile de 2 MB sobre la cobertura lidar.

enter image description here

Debido al ciclo de rasterización-poligonización se pierde parte de la precisión de los vectores originales. Aumente el tamaño de la trama de salida si necesita una mejor resolución. Dependiendo de su caso de uso, tal vez pueda utilizar la imagen rasterizada como un índice sin volver a los vectores.

0 votos

Este es un mucho ¡método más eficiente en cuanto a tiempo! La pérdida de datos no es un problema con una resolución ligeramente superior. Al final tengo que volver a los vectores (GeoJSON), pero gdal_polygonize funciona bien para eso. Muchas gracias.

0 votos

Hay algunos posts que me gustaría poder votar más. Tuve un ex colega encargado de hacer exactamente esto - calcular la extensión de la cobertura Lidar en el Reino Unido - y utilizó FME, que se estrelló después de 4 semanas. No critico a FME, solo que es una herramienta equivocada para el trabajo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X