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

Respuestas:

26

no es realmente complicado, mira el proveedor de memoria en el vector :

  • se crea un punto con QgsPoint(x,y)yQgsGeometry.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])

ingrese la descripción de la imagen aquí

2) la línea que conecta los dos puntos

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])

ingrese la descripción de la imagen aquí

3) un polígono que cubre los puntos

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])

ingrese la descripción de la imagen aquí

-

Cambios en QGIS 3.0 y en adelante:

Para QGIS 3.0 y posteriores, el flujo de trabajo anterior sigue siendo correcto, pero ciertas funciones han cambiado. Ver https://qgis.org/api/api_break.html

Para actualizar el código anterior, cambie las siguientes funciones:

QgsPoint -> QgsPointXY
QgsfromPoint -> QgsfromPointXY
QgsfromPolyline -> QgsfromPolylineXY
QgsfromPolygon -> QgsfromPolylineXY
QgsfromPolyline -> QgsfromPolylineXY
QgsMapLayerRegistry -> QgsProject
gene
fuente
Muchas gracias por el código. Me preguntaba cómo puedo deshacerme del cuadro de diálogo de selección de CRS después de ejecutar el código.
wannik
¿Cómo puedo agregar estilo?
cjahangir
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)

Obenj
fuente
¿Cómo puedo agregar estilo?
cjahangir