3 votos

Unir los puntos GPS obtenidos del archivo .GPX en la consola de Python

Tras cargar el archivo .gpx en una nueva capa desde la consola de python, no puedo acceder a los puntos gps de la tabla de atributos. Esencialmente, no puedo unir estos puntos para formar un polígono (edificios) o un segmento de línea (carreteras) dependiendo del número de puntos gps en un archivo gpx. Es posible lograr lo mismo en el uso de la GUI de QGIS, pero necesito realizar lo mismo desde la consola de python (para ser implementado en un plugin).

Cualquier ayuda o sugerencia será muy bien recibida.

Gracias

1voto

Tendrá que encontrar alguna manera de determinar cómo agrupar y ordenar los puntos. Dependiendo de la organización de sus datos de origen, esto puede limitar la cantidad de automatización posible.

Una vez resuelta esta cuestión, los dos ejemplos siguientes pueden ayudarle a empezar.

Esta creará una nueva capa con un único polígono que conectará todos los puntos encontrados en la capa activa:

#derive points list from active layer
pointslayer = qgis.utils.iface.activeLayer()
pointsprovider = pointslayer.dataProvider()
pointsprovider.select([]) #no attributes
points=[]
pointsfeature = QgsFeature()
while pointsprovider.nextFeature(pointsfeature):
    coord = pointsfeature.geometry().asPoint()
    points.append(QgsPoint(coord[0],coord[1]))

points.append(points[0]) # repeat the first point to close the polygon

#create polygon from points list
polylayer = QgsVectorLayer("Polygon?crs=" + pointslayer.crs().authid(),\
                           pointslayer.name()+" as poly", "memory")
polyfeature = QgsFeature()
polyfeature.setGeometry(QgsGeometry.fromPolygon([points]))
polylayer.dataProvider().addFeatures([polyfeature])
QgsMapLayerRegistry.instance().addMapLayer(polylayer)

Mientras que éste crea una línea de manera similar:

#derive points list from active layer
pointslayer = qgis.utils.iface.activeLayer()
pointsprovider = pointslayer.dataProvider()
pointsprovider.select([]) #no attributes
points=[]
pointsfeature = QgsFeature()
while pointsprovider.nextFeature(pointsfeature):
    coord = pointsfeature.geometry().asPoint()
    points.append(QgsPoint(coord[0],coord[1]))

#create line from points list
linelayer = QgsVectorLayer("LineString?crs=" + pointslayer.crs().authid(),\
                           pointslayer.name()+" as line", "memory")
linefeature = QgsFeature()
linefeature.setGeometry(QgsGeometry.fromPolyline(points))
linelayer.dataProvider().addFeatures([linefeature])
QgsMapLayerRegistry.instance().addMapLayer(linelayer)

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