6 votos

¿Utilizar transform() en el editor de funciones de QGIS?

Estoy intentando transformar las coordenadas de una característica como parte de un script para rellenar un campo de atributo calculado.

Esto funciona en el cuadro de expresión:

x(transform($geometry,'EPSG:4326','EPSG:3857'))

Así es como intenté implementarlo en el editor de funciones:

def gridLocation(value1, feature, parent):

    place = feature.geometry()
    tr = QgsCoordinateTransform('EPSG:4326','EPSG:3857')
    place.transform(tr)

    x_val = place.asPoint().x()
    # ...

pero x_val sigue devolviendo el valor x original.

¿Cuál es la forma correcta de utilizar transform?

3voto

Mue Puntos 2469

Pocas cosas podrías cambiar:

  • Añadir usesgeometry=True como otro parámetro de su función.
  • Puede eliminar value1 ya que en realidad no estás usando esto.
  • En su tr = QgsCoordinateTransform('EPSG:4326','EPSG:3857') línea, sustituya EPSG:4326 con QgsCoordinateReferenceSystem(4326) y repetir con EPSG:3857 .

A mí me funciona lo siguiente:

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom', usesgeometry=True)
def gridLocation(feature, parent):
    place = feature.geometry()
    tr = QgsCoordinateTransform(QgsCoordinateReferenceSystem(4326),QgsCoordinateReferenceSystem(3857))
    place.transform(tr)
    x_val = place.asPoint().x()

    #Add return statement to return values to the attribute table
    return x_val

1 votos

Gracias. Parece que era tan simple como la sustitución de las cadenas de CRS ID con sus respectivos QgsCoordinateReferenceSystem () id. Además, no devolvía x_val porque mi script seguía haciendo cosas con los valores x e y y devolvía otra cosa.

0 votos

@grahamalama - ¡De nada! Tienes razón en lo de la sustitución, aunque también tuve que usar usesgeometry=True de lo contrario recibo un error sobre la transformación de 'NoneTypes'.

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