¿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:
- Identifique el polígono (Vegetation.desc = "main") adyacente a cada astilla (Vegetation.desc = "astilla") que comparte el borde más largo.
- 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)
- 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.
fuente
Respuestas:
Lo uso cuando agrego las formas del conjunto de datos GADM2 en SQL Server:
Las
reduce()
borra los objetos extendidos y acelera las cosas en un factor de 100 veces - un poco peligrosa, pero bueno para aproximaciones.fuente