5 votos

¿Cómo seleccionar todas las características con el máximo valor de clasificación utilizando un algoritmo de procesamiento?

Estoy construyendo un Modelo de Procesamiento de trabajar con grandes conjuntos de datos vectoriales de la clasificación de los valores. Mi archivo de vector contiene un montón de características (40.000) con una columna que contiene la clasificación de los valores de clasificación de min (por ejemplo, 1) al máximo (por ejemplo, 15). Tenga en cuenta que los valores min y max de la clasificación puede variar de un Modelo a ejecutar para el Modelo de ejecución. Necesito encontrar una manera de seleccionar todas las funciones con el más alto valor de la clasificación a crear un Buffer alrededor de ellos en un siguiente paso.

Ya tengo un script de python que se escribe el valor máximo de una columna seleccionada en un número que puede ser utilizado en el Procesamiento de:

##MaxFinder=name
##Layer=vector
##Fields=Field Layer
##value_KRK_max=output number 0

layer = processing.getObject( Layer )  
idx = layer.fieldNameIndex( Fields )

KRK_max = layer.maximumValue(idx)

Mi idea era definir una función en la "selección por la expresión" de la herramienta, pero no puedo hacer que funcione. Alguna sugerencia?

3voto

Mue Puntos 2469

Estás en la mitad del camino! Como usted y @spatialthoughts mencionado, los pasos a seguir sería la de seleccionar las características con los valores máximos y, a continuación, búfer de aquellos. Afortunadamente, esas herramientas que ya existen en el Procesamiento de plugin de modo que sólo podemos llamar a estos en lugar de definir una nueva función:

Aquí está tu código modificado con un par de parámetros:

##MaxFinder=name
##Layer=vector
##Fields=Field Layer
##value_KRK_max=output number 0
##buffer_distance=number 0
##Result=output vector

import processing

layer = processing.getObject( Layer )  
idx = layer.fieldNameIndex( Fields )
KRK_max = layer.maximumValue(idx)

# Set expression for features in Fields to equal max value
expr = '"%s" %s %s' % (Fields, '=', KRK_max)

processing.runalg("qgis:selectbyexpression", layer, expr, 0)
processing.runalg("qgis:fixeddistancebuffer", layer, buffer_distance, 99, False, Result)

Las pruebas de la secuencia de comandos con un ejemplo de punto. Las etiquetas muestran los valores de atributo vamos a probar con:

Point example

Establecer distancia de búfer en el script:

Running script

Resultado:

Result

0voto

Raoul Puntos 1113

Si su objetivo es crear un búfer alrededor de las entidades con el valor más alto, su secuencia de comandos puede seleccionar las entidades con el valor máximo y crear una nueva capa de salida con esas características. El siguiente paso en tu modelo puede usar esta capa.

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