¿Cómo dibujar polígonos desde la consola de python?

14

He estado visitando y revisando la página sobre el manejo de la geometría en el Libro de cocina de PyQGIS: enlace pero parece que no puede descubrir cómo hacer que el polígono se dibuje desde la consola de Python. ¿Alguien puede ayudar?

    
pregunta user25976 18.02.2014 - 02:56

2 respuestas

23

no es realmente complicado, mira a Proveedor de memoria en vector :

  • se crea un punto con QgsPoint(x,y) y QgsGeometry.fromPoint(QgsPoint(x,y))
  • se crea una línea con dos puntos: QgsGeometry.fromPolyline([QgsPoint(x1,y1),QgsPoint(x2,y2)]))
  • se crea un polígono con una lista de puntos: QgsGeometry.fromPolygon([[QgsPoint(x1,y1),QgsPoint(x2,y2), QgsPoint(x3,y3)]])

1) dos puntos:

# create a memory layer with two points
layer =  QgsVectorLayer('Point', 'points' , "memory")
pr = layer.dataProvider() 
# add the first point
pt = QgsFeature()
point1 = QgsPoint(50,50)
pt.setGeometry(QgsGeometry.fromPoint(point1))
pr.addFeatures([pt])
# update extent of the layer
layer.updateExtents()
# add the second point
pt = QgsFeature()
point2 = QgsPoint(100,150)
pt.setGeometry(QgsGeometry.fromPoint(point2))
pr.addFeatures([pt])
# update extent
layer.updateExtents()
# add the layer to the canvas
QgsMapLayerRegistry.instance().addMapLayers([layer])

2)lalíneaqueconectalosdospuntos

layer=QgsVectorLayer('LineString','line',"memory")
pr = layer.dataProvider() 
line = QgsFeature()
line.setGeometry(QgsGeometry.fromPolyline([point1,point2]))
pr.addFeatures([line])
layer.updateExtents()
QgsMapLayerRegistry.instance().addMapLayers([layer])

3)unpolígonoquecubrelospuntos

layer=QgsVectorLayer('Polygon','poly',"memory")
pr = layer.dataProvider() 
poly = QgsFeature()
points = [point1,QgsPoint(50,150),point2,QgsPoint(100,50)]
# or points = [QgsPoint(50,50),QgsPoint(50,150),QgsPoint(100,150),QgsPoint(100,50)] 
poly.setGeometry(QgsGeometry.fromPolygon([points]))
pr.addFeatures([poly])
layer.updateExtents()
QgsMapLayerRegistry.instance().addMapLayers([layer])

-

    
respondido por el gene 18.02.2014 - 18:26
3

Simplemente seleccione el CRS en la definición de capa: QgsVectorLayer('Polygon?crs=epsg:2154', 'poly' , "memory") por ejemplo (aquí EPSG 2154 es para proyección Lambert 93, estándar en Francia metropolitana, pero puede poner lo que quiera)

    
respondido por el Obenj 06.07.2016 - 16:50

Lea otras preguntas en las etiquetas