pyqgis – ¿QGIS 3.10.2 cambia la función line.xAt (0)?

Pregunta:

¿Hay un cambio reciente en la forma en que se hace referencia a los nodos LineStringZ ?

Recibo el error Error 'QgsMultiLineString' object has no attribute 'xAt' . Lo he enviado como un error ( # 34094 ) pero es muy posible que esté haciendo algo mal.

Cuando .geometry() el .geometry() de la función, devuelve LineStringZ .

El código de muestra es-

layer = iface.activeLayer()
print(layer.name())
all_features = layer.getFeatures()

for linep in all_features:
    geom = linep.geometry()
    line = geom.constGet()
    print(geom)

    x0 = line.xAt(0)
    print(str(x0))

Puedo reproducir el error en varias capas de datos de cadenas de líneas. Cuando vuelvo a QGIS 3.8, el problema desaparece.

ACTUALIZAR :

Parece que cuando abro el mismo shapefile que se creó como QgsLineString , QGIS 3.10.1 ve su geometría como Line ( LineString25D ) pero QGIS 3.10.2 y 3.10.3 ven esto como Geometry Line ( MultiLineStringZ ). No sé qué hacer para rectificar esto.

Respuesta:

Verifique dos veces el tipo de geometría devuelto por su objeto de line en QGIS 3.8. El método xAt() pertenece a la clase QgsLineString y no funcionará con un objeto QgsMultiLineString .

Puede acceder fácilmente a la coordenada x del primer vértice de las características de su línea de esta manera:

layer = iface.activeLayer()
print(layer.name())
all_features = layer.getFeatures()

for linep in all_features:
    vertices = [v for v in linep.geometry().constGet().vertices()]
    print(vertices[0].x())

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım