4 votos

Editor de funciones de QGIS calcular el área después de la transformación

<p>En el editor de funciones QGIS, es posible transformar geometría mediante transform(geometry,'EPSG:xxx','EPSG:yyy') - sin embargo, no es una función area() a calcular el área de este.</p> <p>La razón por la que estoy buscando para hacer esto es tener área calculada cuando se produce un mapa (etiquetado y como un campo virtual de la tabla de atributo); ¿en lugar de almacenar el área dentro de la base de datos ya que es probable que cambie con frecuencia como los usuarios modificar los polígonos?</p>

7voto

sashkello Puntos 325

Lo que se propone es un muy buen resultado acerca de ser capaz de transformar la geometría. Usted puede hacer uso de una expresión, pero se necesita un plugin extra.

  1. Instalar reffunctions plugin
  2. A continuación, utilice la siguiente expresión:

    WKTarea(geomToWKT( transformación( $geometría , 'EPSG:xxxx', 'EPSG:yyyy')))

ACTUALIZACIÓN

La transformación de la geometría a la WKT y, a continuación, utilizando un plugin externo para resolver el problema estaba molestando. Así que se me ocurrió una forma muy sencilla mejor (creo) de la solución.

Todo lo que era necesario añadir la siguiente función en el editor de la función:

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

El uso básico es:

area($geometry)

Y el on-the-fly cálculo del área de expresión se convirtió en:

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

1voto

davidsleeps Puntos 4437

Si usted está trabajando con PostGIS como back-end, se podría crear una nueva columna area_auto y crear un trigger para mantenerte al día con tus características.

En primer lugar añadir una columna a la tabla (aquí la tabla=poly_area, nueva columna=area_auto)

ALTER TABLE poly_area ADD COLUMN area_auto double precision;

A continuación, rellenar el existente polígonos con sus áreas:

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

(suponiendo que geom es en EPSG:4326, que se debe convertir en geografía).

A continuación, crear 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, crear un desencadenador 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_autose actualiza automáticamente (en metros cuadrados) al confirmar los cambios en QGIS. Usted puede etiquetar sus 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: