¿Eliminar polígonos de astilla (definidos) usando PostGIS? [cerrado]

9

¿Cómo escribo SQL (para PostGIS en PostgreSQL) para eliminar polígonos de astilla (incluidos astillas largas y estrechas y algunos pequeños polígonos irregulares que eran 'espacios' erróneos en el conjunto de datos original) de mi conjunto de datos fusionándolos con un polígono adyacente con el borde más largo?

Tengo un conjunto de datos (nombre de tabla: "Vegetación" que contiene varios miles de polígonos identificados como una astilla o un polígono 'real' en una columna de descripción (nombre de columna: "desc") como "astilla" o "principal". para importar mi conjunto de datos a PostGIS, lo limpié importándolo a GRASS (que también es cómo convertí todos los huecos en pequeños polígonos, que posteriormente fusioné con el conjunto de datos principal. Descubrí que si aumentaba la tolerancia de ajuste y el área mínima más allá ' 1 'en la importación GRASS, comencé a perder las características deseadas.]

Entiendo que es posible que necesite los siguientes pasos:

  1. Identifique el polígono (Vegetation.desc = "main") adyacente a cada astilla (Vegetation.desc = "astilla") que comparte el borde más largo.
  2. Identifique el borde entre cada astilla y su polígono principal adyacente que comparte el borde más largo identificado en el Paso 1. (Posiblemente usando ST_Relate)
  3. Elimine el borde entre cada astilla y su polígono principal adyacente que comparte el borde más largo con el identificador de borde devuelto en el Paso 2. (Posiblemente usando ST_RemEdgeModFace)

Solo tengo una comprensión muy básica de SQL y el proceso anterior está más allá de mi capacidad.

DavidM
fuente
extensión "topología postgis", si he entendido bien, solo crear topología con mayor tolerancia que su astilla de avarage limpiará geometrías. pero no he hecho nada así
simplexio
Creo que perdería mucha resolución al crear una topología con una tolerancia lo suficientemente grande debido al tamaño de algunos de los 'fragmentos' (ver aclaración en el texto). Esto puede deberse a mi comprensión limitada, y las soluciones más simples son muy bienvenidas.
DavidM
bienvenido a gis y limpieza de datos. ¿Tienes acceso a FME? ese es bastante fácil de usar y tiene alguna opción para eliminar astillas de polígonos. Alternativas a gis.stackexchange.com/questions/24365/… y google parece encontrar respuestas pl / pgsql a su pregunta (no tengo idea de lo buenas que son). Dicho esto, no hay una manera súper fácil de hacerlo que yo sepa, limpiarlo a mano es la forma "más fácil" de hacerlo, pero puedo tomarme mucho tiempo
simplexio
¿Las cosas plateadas lo dejan agujeros si crea una unión o habrá artefactos intersectenibles o ambos tipos de "errores de redondeo"?
huckfinn
1
He resuelto temporalmente mi problema (para el proyecto actual) utilizando la prueba ARCGIS y aplicando la función de eliminación. Esto funcionó bien. Todavía estaría interesado en encontrar una solución SQL usando postgis.
DavidM

Respuestas:

3

Lo uso cuando agrego las formas del conjunto de datos GADM2 en SQL Server:

SET @g2 = @g1.STBuffer(1).Reduce(1).STBuffer(-1).Reduce(1)

Las reduce()borra los objetos extendidos y acelera las cosas en un factor de 100 veces - un poco peligrosa, pero bueno para aproximaciones.

Daniel
fuente