4 votos

QGIS Function editor calcula el área después de la transformación

En el editor de funciones de QGIS, es posible transformar la geometría usando transform(geometry,'EPSG:xxx','EPSG:yyy') - sin embargo no hay una función area() para recalcular el área de esto.

La razón por la que quiero hacer esto es para tener el área calculada cuando se produce un mapa (etiquetado y como un campo virtual en la tabla de atributos); en lugar de almacenar el área dentro de la base de datos, ya que es probable que cambie con frecuencia a medida que los usuarios modifican los polígonos?

4voto

sashkello Puntos 325

Lo que apuntas es un resultado bastante bonito sobre poder transformar la geometría. Puedes hacerlo mediante una expresión, pero necesitarás un plugin adicional.

  1. Instalar plugin de refunciones
  2. A continuación, utiliza la siguiente expresión:

    WKTarea(geomToWKT( transform( $geometry , 'EPSG:xxxx', 'EPSG:yyyy')))

ACTUALIZACIÓN

Transformar la geometría a WKT y luego usar un plugin externo para resolver el problema me estaba molestando. Así que se me ocurrió una solución muy simple y mejor (creo).

Todo lo que se necesitaba era añadir la siguiente función al editor de funciones:

@qgsfunction(args="auto", group='Custom')
def area(geometry, feature, parent):
    return geometry.area()

El uso básico es:

area($geometry)

Y la expresión de cálculo de área sobre la marcha se convirtió:

area(transform(  $geometry , 'EPSG:xxxx', 'EPSG:yyyy'))

1voto

davidsleeps Puntos 4437

Si está trabajando con PostGIS como back-end, podría crear una nueva columna area_auto y crear un disparador para mantenerlo actualizado con las áreas de sus características.

Primero añada una columna a su tabla (aquí table= poly_area , nueva columna= area_auto )

ALTER TABLE poly_area ADD COLUMN area_auto double precision;

A continuación, rellene los polígonos existentes con sus áreas:

UPDATE poly_area SET area_auto = ST_Area(geom::geography);

(asumiendo que geom está en EPSG:4326, debe ser lanzado a geografía ).

A continuación, cree una función para actualizar la columna area_auto :

CREATE OR REPLACE FUNCTION update_polygon_area_auto()   
RETURNS TRIGGER AS $$
BEGIN
    NEW.area_auto = ST_Area(NEW.geom::geography);
    RETURN NEW; 
END;
$$ language 'plpgsql';

Por último, cree un disparador para actualizar automáticamente area_auto :

CREATE TRIGGER update_area_auto
    BEFORE INSERT OR UPDATE
    ON public.poly_area
    FOR EACH ROW
    EXECUTE PROCEDURE public.update_polygon_area_auto();

Ahora area_auto se actualiza automáticamente (en metros cuadrados) cuando confirma sus cambios en QGIS. Puedes etiquetar tus características con ella, y está disponible en la tabla de atributos.

Automatic area calculation

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