He estado buscando algún ejemplo sobre cómo dibujar polilíneas y polígonos en el compositor de mapas usando PyQGIS, pero no he podido encontrar nada. Podría alguien mostrarme algún código para aprender?
Respuesta
¿Demasiados anuncios?Cuando te encuentres atascado, debes mirar Documentación sobre la API de QGIS , Documentación sobre PyQGIS y el directorio de pruebas Python del repositorio QGIS, por ejemplo https://github.com/qgis/QGIS/tree/master/tests/src/python
Para los dos primeros enlaces de sus casos de uso, debe buscar clases que contengan QgsLayout
cadena (haciendo una búsqueda textual)
Te preguntarás cómo he adivinado que debo mirar QgsLayoutItemPolygon
o QgsLayoutItemPolyline
? He dibujado manualmente la línea y el polígono y los he seleccionado individualmente en el diseño. Luego, he ejecutado las 4 primeras líneas de la siguiente receta en la consola Python de QGIS para saber de qué clase se trataba. Las otras partes son principalmente la versión independiente del directorio de pruebas para su propósito.
project = QgsProject.instance()
manager = project.layoutManager()
layout = manager.layoutByName('demo') # Use your layout name instead of demo
layout.selectedLayoutItems()
# Recipe from layout Polygon
# Mainly borrowed from https://github.com/qgis/QGIS/blob/master/tests/src/python/test_qgslayoutpolygon.py
polygon1 = QPolygonF()
polygon1.append(QPointF(0.0, 0.0))
polygon1.append(QPointF(100.0, 0.0))
polygon1.append(QPointF(200.0, 100.0))
polygon1.append(QPointF(100.0, 200.0))
layoutItemPolygon = QgsLayoutItemPolygon(polygon1, layout)
layout.addLayoutItem(layoutItemPolygon)
# Recipe from layout Polyline
# Mainly borrowed from https://github.com/qgis/QGIS/blob/master/tests/src/python/test_qgslayoutpolyline.py
polygon2 = QPolygonF()
polygon2.append(QPointF(50.0, 150.0))
polygon2.append(QPointF(150.0, 80.0))
polygon2.append(QPointF(250.0, 100.0))
polygon2.append(QPointF(10.0, 200.0))
layoutItemPolyline = QgsLayoutItemPolyline(polygon2, layout)
layout.addLayoutItem(layoutItemPolyline)