6 votos

No se puede seleccionar utilizando una función personalizada en QGIS 2.18.3

Estoy siguiendo este tutorial a la medida de las expresiones y todo va bien mi función se muestra en la sección personalizada, y parece que a la vista previa de dar 21S para la primera función. Cuando extiendo la selección de la expresión de a GetUtmZone() = '21S' la vista previa de salida todavía dice 1. Pero cuando hago clic en el botón seleccionar ninguna de las características seleccionadas.

Esto funciona en 2.14.x pero no en 2.18.x.

El viejo estilo $GetUtmZone no trabaja en 2.14 o 2.18.

6voto

Mue Puntos 2469

Interesante, esto también trabajó para mí antes (yo lo he utilizado varias veces), pero también falla para mí en QGIS 2.18.2.

De todos modos, una alternativa es crear en su lugar un campo que contiene las zonas para cada característica y, a continuación, utilizar este campo en su expresión select. Usted puede hacer esto mediante la creación de una secuencia de comandos que se pueden agregar por ir a:

Processing Toolbox > Scripts > Tools > Create new script

El siguiente código es tomado de su enlace, pero ligeramente modificado para que se ejecute desde el procesamiento de la caja de herramientas:

##Example=name
##Layer=vector point
##Field_Name=string

from qgis.core import QgsField
from math import floor
from PyQt4.QtCore import QVariant

layer = processing.getObject(Layer)
layer.dataProvider().addAttributes([QgsField(str(Field_Name), QVariant.String)])
layer.updateFields()
idx = layer.fieldNameIndex(str(Field_Name))
layer.startEditing()

for feat in layer.getFeatures():
    pt = feat.geometry().centroid().asPoint()
    longitude = pt.x()
    latitude = pt.y()
    zone_number = floor(((longitude + 180) / 6) % 60) + 1
    if latitude >= 0:
        zone_letter = 'N'
    else:
        zone_letter = 'S'
    layer.changeAttributeValue(feat.id(), idx, '%d%s' % (int(zone_number), zone_letter))

layer.commitChanges()

Ejemplo:

  1. Rellena conjunto de datos desde el enlace:

    Populated dataset

  2. Interfaz de secuencia de comandos:

    Running script

  3. Nuevo campo de atributo añadido que contienen zonas de

    New attributes

  4. Resultado de la selección de las zonas por la expresión (resaltado en amarillo):

    Result

5voto

Michael Puntos 11

Hay dos cosas que vale la pena destacar en este tutorial con respecto a QGIS 2.18:

  • Lo que está definida de una función, que es llamado con GetUtmZone() en QGIS 2.18. La vieja manera de hacer que esté disponible como una variable con un $ prefijo se ha ido.

  • Esta expresión requiere la geometría de la característica completamente devolver un resultado (no hay mucho que se puede hacer con una falta de la geometría, a la derecha ;) ). QGIS intenta reducir la cantidad de datos que recopila (por razones de rendimiento) y no obtiene la geometría si no es necesario. Por lo tanto, usted necesita decirle a QGIS, que su función requiere de una geometría. Cómo se puede hacer eso?

-

@qgsfunction(args=0, group='Custom', usesgeometry=True)

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