7 votos

¿Por qué obtengo resultados diferentes de PyQGIS feature.geometry().type()?

En la consola de python en QGIS ¿cuál es la diferencia entre los siguientes dos fragmentos de código (activeLayer es una capa de polígonos):

# 1)
iface.activeLayer().selectedFeatures()[0].geometry().type()
>>> 3

# 2)
f = iface.activeLayer().selectedFeatures()[0]
f.geometry().type()
>>> 2

En el caso 1) el resultado es '3', en el caso 2) el resultado es '2', y por otra parte en QGIS 2.12 uso de 'asPolygon()' en lugar de 'type()' caso 2) da como lista de qPoints como se esperaba, mientras que en el caso 1) de QGIS se despide con un " Error de tiempo de ejecución! ... R6025 - llamada de función virtual pura' (en QGIS 2.8 resultados en una lista vacía).

Me espera los mismos resultados.

4voto

Yada Puntos 9489

La primera expresión no es aceptable ya que 3 es la constante de código para un 'UnknownGeometry'. En la Consola de Python que puede corroborar:

>>>QGis.UnknownGeometry
3

Lista completa de los enumerar los tipos puede ser visto aquí. Por esta razón, cuando se utiliza el 'asPolygon' método de la geometría, en este caso, los resultados en una lista vacía.

Segundo cortada código produce el número 2 tipo de geometría, que es el número entero asignado por un polígono, geometría. En este caso, cuando se utiliza el 'asPolygon de la geometría método que funciona como se espera.

2voto

BWW Puntos 302

A mi entender, es porque aunque parece que Python puro, la API de PyQGIS es respaldada con C++. Python es un contenedor en la parte superior.

Por esta razón en el caso 1, el iface.activeLayer().selectedFeatures()[0].geometry() fue ya destruida (C++ con el respaldo y ya limpiado para evitar el consumo de memoria) y obtienes una UnknownGeometry o un accidente.

En el caso 2, asignar a una variable f , la característica evita la limpieza y obtienes el resultado esperado.

Raro pero 's cómo funciona.

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