Para proponer otro método que no implica ninguna codificación: puedes crear un modelo. Probablemente sea más fácil de entender si no estás acostumbrado a Python. Sin embargo, puede exportar el Modelo creado de esta manera como un script de Python.
Ir a Menu Processing / Graphical Modeler…
para crear un nuevo modelo.
- En la pestaña Entrada, seleccione Características vectoriales y asígnele un nombre, digamos Puntos de entrada.
- Ir a la
algorithm tab
Buscar y añadir Delaunay Triangulation
y como capa de entrada, cambie el símbolo de la izquierda por Model Input
(el símbolo con las tres ruedas dentadas) y seleccione la capa Input points
de la 1, ver:
- De nuevo en el
algorithm tab
busque la calculadora de campos en rellene los campos según corresponda, véase la captura de pantalla. En la parte inferior, se ve la expresión utilizada $area
- puede cambiarlo por cualquier expresión que desee utilizar, por ejemplo area($geometry)
:
- Su Modelo ahora debería verse como en la siguiente captura de pantalla. Guárdelo en su proyecto o en algún lugar de su máquina:
- Ahora puede ejecutar el modelo en modo batch (como se describe en la solución por @MrXsquared), la elección de todos los puntos de capa que tiene como entrada. Se creará una nueva salida con triángulos delaunay, incluyendo un campo para el área.
Vea aquí una posibilidad para seleccionar automáticamente varios archivos a la vez: use autocompletar, defina un patrón de archivos (sólo *.gpkg si quiere seleccionar todos los archivos Geopackage de una carpeta), seleccione la carpeta, pulse buscar archivos y verá una vista previa de los archivos encontrados. Puedes añadirlos pulsando OK.
-
Sólo para ver y comparar con la solución de @BERA, exporté mi modelo como script de Python - esto es lo que obtengo:
"""
Model exported as python.
Name : fi
Group :
With QGIS : 31600
"""
from qgis.core import QgsProcessing
from qgis.core import QgsProcessingAlgorithm
from qgis.core import QgsProcessingMultiStepFeedback
from qgis.core import QgsProcessingParameterFeatureSource
from qgis.core import QgsProcessingParameterFeatureSink
import processing
class Fi(QgsProcessingAlgorithm):
def initAlgorithm(self, config=None):
self.addParameter(QgsProcessingParameterFeatureSource('InputPoints', 'Input Points', types=[QgsProcessing.TypeVectorPoint], defaultValue=None))
self.addParameter(QgsProcessingParameterFeatureSink('_out', '_out', type=QgsProcessing.TypeVectorAnyGeometry, createByDefault=True, supportsAppend=True, defaultValue=None))
def processAlgorithm(self, parameters, context, model_feedback):
# Use a multi-step feedback, so that individual child algorithm progress reports are adjusted for the
# overall progress through the model
feedback = QgsProcessingMultiStepFeedback(2, model_feedback)
results = {}
outputs = {}
# Delaunay-Triangulation
alg_params = {
'INPUT': parameters['InputPoints'],
'OUTPUT': QgsProcessing.TEMPORARY_OUTPUT
}
outputs['Delaunaytriangulation'] = processing.run('qgis:delaunaytriangulation', alg_params, context=context, feedback=feedback, is_child_algorithm=True)
feedback.setCurrentStep(1)
if feedback.isCanceled():
return {}
# Feldrechner
alg_params = {
'FIELD_LENGTH': 20,
'FIELD_NAME': 'area',
'FIELD_PRECISION': 10,
'FIELD_TYPE': 0,
'FORMULA': '$area',
'INPUT': outputs['Delaunaytriangulation']['OUTPUT'],
'OUTPUT': parameters['_out']
}
outputs['Feldrechner'] = processing.run('native:fieldcalculator', alg_params, context=context, feedback=feedback, is_child_algorithm=True)
results['_out'] = outputs['Feldrechner']['OUTPUT']
return results
def name(self):
return 'fi'
def displayName(self):
return 'fi'
def group(self):
return ''
def groupId(self):
return ''
def createInstance(self):
return Fi()