7 votos

Polígono de cobertura de datos de Rasters

Tengo algunas miles baldosas TIF y necesito extraer polígonos de la cobertura real de datos desde dentro de estos TIFs (ver abajo para la imagen que muestra cómo se ve la cobertura). La geometría resultante será cargada en una tabla de Postgres.

Debido a la cantidad de TIFs, y al hecho de que el conjunto de datos será actualizado regularmente, necesito que el proceso sea lo más eficiente y automatizado posible.

He intentado gdal_polygonize.py, pero esto me da un resultado como este:

introducir descripción de la imagen aquí

Luego tendría que 'disolver' estos polígonos, o ejecutar ST_Union con PostGIS para obtener el resultado que quiero, que se ve así:

introducir descripción de la imagen aquí

La disolución es muy lenta, y parece innecesaria cuando seguramente debe haber una forma de omitir el resultado de múltiples polígonos de gdal_polygonize.

¿Alguien tiene alguna idea de cómo podría hacerlo en un solo paso, o simplemente hacer el proceso más rápido/más eficiente?

0 votos

Por favor, echa un vistazo a mi respuesta. Es más una solución temporal y no sé si podría adaptarse bien a tu caso.

4voto

Geoffrey Puntos 228

Lo siguiente es un método que funcionó bien para mí hace algún tiempo, pero no es completamente automático.

Intenta seguir este flujo de trabajo:

  1. ejecuta el algoritmo de Polígonos a líneas desde la Caja de herramientas de Procesamiento (tu capa de polígonos como entrada);
  2. ejecuta el algoritmo de Línea a polígonos desde la Caja de herramientas de Procesamiento (el resultado anterior como entrada).

Este flujo de trabajo (que puedes implementar fácilmente utilizando el Modelador de QGIS o algunas líneas de código) es realmente rápido y conducirá a la creación de un nuevo polígono, que es más pequeño en términos de tamaño en relación con el primero. Almacena varias características y solo necesitas seleccionar la más baja, que deberías encontrar fácilmente. Si consideras que este último paso es problemático para tus necesidades, puedes intentar ejecutar nuevamente la herramienta de disolución después del segundo paso del flujo de trabajo: podría ser menos consumidor de tiempo en relación a ejecutarlo como lo hiciste anteriormente.

3voto

jlehenbauer Puntos 7749

Luego tendría que 'disolver' estos polígonos, o ejecutar ST_Union con PostGIS para obtener el resultado que quiero, que se ve así:

¿Qué versión de PostGIS y PostgreSQL estás usando? PostGIS en 2009 obtuvo una enorme mejora de velocidad en ST_Union. Y, de nuevo en 2016 con PostGIS 2.3 con funciones paralelas usando ST_MemUnion

Intenta usar ST_MemUnion y ajusta

SET max_parallel_degree=2; (o la cantidad de núcleos que tengas)

Y si estás usando PostgreSQL 9.6 no olvides configurar tu max_parallel_workers_per_gather. En Pg9.6 las consultas paralelas están deshabilitadas por defecto.

0 votos

Gracias por tu respuesta @Evan. Por el momento estoy usando Postgres 9.4 y PostGIS 2.1.4. ¡Voy a actualizar y ver qué tan rápido son las cosas!

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