Estoy tratando de escribir un script independiente en python para crear un lienzo de mapa QGIS. Las capas vectoriales que estoy tratando de cargar son Shapefiles.
Actualmente, puedo cargar cada capa vectorial, añadirlas al registro del mapa y mostrarlas en mi aplicación de lienzo de mapa. El problema que tengo es que necesito que todas estas capas vectoriales se muestren en el lienzo del mapa al mismo tiempo. Actualmente el lienzo del mapa de qgis sólo muestra la última capa vectorial que se estableció en "canvas.setExtent(vector_layer.extent())". He intentado crear una lista de todas mis capas y luego ponerla en canvas.setExtent(list_of_layers.extent()) pero las listas no tienen el método "extent.()".
He leído el cookbook de pyQGIS y entiendo que el método .extent() es para un determinado vector que se quiere ver... ¿Cómo puedo mostrar todas las capas vectoriales a la vez (sin usar la consola de Python)? He indagado en otros Q&As que tenían preguntas similares a esta; sin embargo, no estoy encontrando ninguna solución que realmente aborde mi problema.
Aquí está mi siguiente código:
import modules
from qgis.core import *
from qgis.gui import *
from PyQt4.QtCore import *
from PyQt4 import QtGui
import os, sys
import qgis
def main():
# supply path to qgis isntall location
QgsApplication.setPrefixPath("/usr", True)
# create a reference to the QgsApplication, setting the
# second arguement to False disables the GUI
app = QgsApplication([], True)
# load providers
app.initQgis()
# create Qt widget
canvas = QgsMapCanvas()
canvas.setCanvasColor(Qt.white)
# enable this for smooth rendering
canvas.enableAntiAliasing(True)
# not updated US6SP10M files from ENC_ROOT
source_dir = "/home/cassandra/desktop/file_formats/Shapefiles"
# load vector layers
for files in os.listdir(source_dir):
# load only the shapefiles
if files.endswith(".shp"):
vlayer = QgsVectorLayer(source_dir + "/" + files, files, "ogr")
# add layer to the registry
QgsMapLayerRegistry.instance().addMapLayer(vlayer)
# set extent to the extent of our layer
canvas.setExtent(vlayer.extent())
# set the map canvas layer set
canvas.setLayerSet([QgsMapCanvasLayer(vlayer)])
# refresh canvas and show it
canvas.refresh()
canvas.show()
app.exec_()
app.exitQgis()
main()
0 votos
gis.stackexchange.com/questions/137575/
0 votos
Por desgracia, he probado el método publicado. Por alguna razón sólo resulta un error de segmentación 'core' volcado y no aparece ningún mapa. Sólo ocurre cuando añado ese trozo de código.
0 votos
La verdad es que voy a intentar jugar un poco con ello a ver qué pasa.
0 votos
Definitivamente he jugado con el código del post durante una hora y realmente no pasa nada. Con los ajustes, mi mapa de lienzo ya no aparece. Todo lo que veo es que cuando ejecuto mi código sólo dice que el código salió con el código 1.