4 votos

Obtención de la lista de QgsPoint de la capa de polígonos en PyQGIS

¿Cómo puedo gestionar los puntos de una capa?

from qgis.core import *

def run_script(iface):
    layer = QgsVectorLayer(layerType.Polygon+'?'+crs.psg_4326,
                       'la-florida', 
                       vectorLayerType.memory)

En este momento necesito obtener todos los vértices del polígono que representan el límite de la región, pero no he encontrado la documentación sobre cómo obtenerlo.

0 votos

¿Qué problemas tienes con el código que tienes en tu pregunta?

0 votos

No es un problema, es una pregunta sobre cómo obtener los puntos del polígono.

6voto

Yada Puntos 9489

Se necesitan objetos para QgsGeometry clase. En mi ejemplo (capa de polígonos con una sola característica):

enter image description here

el siguiente código obtiene la lista de puntos de la capa de polígonos:

layer = iface.activeLayer()

feature = layer.getFeatures().next()

polygon = feature.geometry().asPolygon()

n = len(polygon[0])

for i in range(n):
    print polygon[0][i]

Después de ejecutar el código en la consola de Python de QGIS, obtuve cada punto del polígono como una tupla:

(384465,4.45043e+06)
(392424,4.46131e+06)
(409514,4.45616e+06)
(411269,4.44282e+06)
(404480,4.43076e+06)
(392541,4.43486e+06)
(381773,4.44118e+06)
(384465,4.45043e+06)

Observa que el primer y el último punto coinciden.

Nota de edición:

He editado mi respuesta basándome en tu comentario. El siguiente código utiliza QgsVectorLayer constructor de la clase.

import os
my_path = '/home/zeito/pyqgis_data/polygon8.shp'  #this is a Linux path
root,name = os.path.split(my_path)
name = name[:-4]

layer = QgsVectorLayer(my_path,
                       name, 
                       'ogr')  #This is my provider: in your code is memory

QgsMapLayerRegistry.instance().addMapLayer(layer)

feature = layer.getFeatures().next()

polygon = feature.geometry().asPolygon()

n = len(polygon[0])

for i in range(n):
    print polygon[0][i]

0 votos

Gracias, ¿pero si quiero hacer una aplicación independiente? en este caso no tengo un objeto iface. gracias.

0 votos

Se utiliza la referencia de la capa obtenida con el constructor de la clase: layer = QgsVectorLayer(layerType.Polygon+'?'+crs.psg_4326, ... después de añadir la capa al registro ( QgsMapLayerRegistry.instance().addMapLayer(layer) ). En el siguiente enlace tienes una aplicación completa e independiente: joseguerreroa.wordpress.com/2013/12/04/

0 votos

Lo siento, pero no entiendo cómo obtener la geometría del objeto llamado "capa" en mi código. gracias.

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