5 votos

Calcular el área de intersección de polígonos dentro de severals la superposición de búferes

Estoy trabajando con..

  • un punto inicial de la capa (en azul) llamado : centroid_layer.shp
  • una primera capa de polígono (en verde) de bosque llamado : wood_zone.shp

..y necesito obtener el área de interceptó wood_zone dentro de cada búfer (en rojo, creado a partir de centroid_layer), a sabiendas de que casi todos mis tapones se superponen unos a otros. Por lo tanto debo incluir el wood_zone polygones tantas veces como el número de intersección de los buffers.

enter image description here

Yo creía que no es posible hacer sólo con QGIS procesamiento y/o el modelador (???) así que me gustaría resolver a través de PostGIS/PostgreSQL (versión 9.6).

He visto en una similar publicado pregunta de Anna y yo estaba tratando de continuar con SS_Rebelious solución con el uso de su secuencia de comandos SQL no en Spatialite pero en PostGIS/PostgreSQL (con la herramienta de Consulta de pqAdmin 4) de la siguiente manera :

CREATE TABLE buff AS
SELECT gid, ST_Buffer(geom, 1000,'quad_segs=100') FROM centroid_layer ;

y luego :

UPDATE centroid_layer
SET areacolumn = (SELECT ST_Area( 
                          (SELECT ST_Intersection(
                            (SELECT ST_Union(geom) FROM wood_zone), 
                            (SELECT geom FROM buff WHERE centroid_layer.gid = buff.gid)
                                                 )

                           )
                                )
                  );

pero tengo un problema después de la ACTUALIZACIÓN...... paso. De hecho, a mi resultante areacolumn está completamente lleno de 0.0 valores (ver más abajo).

Así que me preguntaba si yo estoy haciendo algo mal o si no sería una diferente secuencia de comandos SQL para usar con Postgres-PgAdmin ?

enter image description here


EDIT : he probado la misma secuencia de comandos SQL con una muestra del grupo de búferes de tres (asociadas con 3 puntos de relacionados con el) y yo era capaz de recoger los valores del área dentro de mi columna denominada "areacolumn". En este punto, la única diferencia que veo es que he utilizado una clave principal diferente, quiero decir que no se utiliza el "gid" (creado automáticamente por postgres/postGIS) clave principal.

Pero yo todavía no entiendo... es el uso de la "gid" como clave primaria de un problema con un script SQL ?

3voto

Don Chakkappan Puntos 118

Creo que he encontrado la respuesta a mi problema: El columna de geometría de mi tabla de amortiguación creada a partir de ST_Buffer se llama st_buffer y no geom (como pensaba que ocurría con todas las columnas de geometría). El paso de actualización correcto es entonces :

UPDATE centroid_layer
SET areacolumn = (SELECT ST_Area( 
                          (SELECT ST_Intersection(
                            (SELECT ST_Union(geom) FROM wood_zone), 
                            (SELECT st_buffer FROM buff WHERE centroid_layer.gid = buff.gid)
                                                 )

                           )
                                )
                  );

1 votos

Si quieres que sea geom puedes modificar tu primera consulta: CREATE TABLE buff AS SELECT gid, ST_Buffer(geom, 1000,'quad_segs=100') as geom FROM centroid_layer ;

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