3 votos

¿Creación de proyectos por lotes en QGIS?

Tengo una lista de archivos csv "nombre.csv" que quiero utilizar para hacer varios análisis en QGIS. Me gustaría automatizar los siguientes pasos para cada archivo :

  1. crear nuevo proyecto nombre_principal.qgis;
  2. importar capa de texto;
  3. importar la capa de polígonos;
  4. [... algunos análisis...]
  5. guardar el proyecto en un nuevo directorio

Sé que es posible hacer análisis por lotes con el plugin de Atlas, por ejemplo, para exportar varios mapas. También he mirado el plugin de procesamiento, pero parece que sólo funciona dentro de un proyecto. Pero en este caso los diferentes archivos corresponden a diferentes proyectos, no a mapas.

Cada conjunto de datos corresponde a un sitio dentro de una región. Me gustaría poder visualizar cada mapa, si es posible. De ahí varios proyectos. Pero para ser más preciso, necesito calcular la pendiente media a partir de los polígonos (por tanto, interpolación raster, análisis del terreno y estadísticas zonales). También necesito reproyectar todos los mapas (coordenadas x,y,z en metros) con coordenadas GPS que tengo para 4 puntos cada vez.

¿Quizás deba reproyectar primero a partir de los puntos gps y luego fusionar todos los sitios en un mapa para hacer análisis por lotes?


He conseguido que los primeros pasos funcionen pero tengo un problema para importar los shapefiles: Tengo que crear primero shapefiles a partir de archivos de texto, y luego volver a importar el shapefile.

Esto es lo que tengo:

for cname in glob.glob('*.txt'):
      uri2 = "file:///" + csv_path + cname + "?delimiter=%s&wktField=%s" % (";", "wkt")
      name = cname.replace('.txt', '')
      cont = QgsVectorLayer(uri2, name, "delimitedtext")
      shlayer =  QgsVectorFileWriter.writeAsVectorFormat(cont,csv_path + name +'.shp',"utf-8",None,"ESRI Shapefile")
# Add to QGIS canvas
iface.addVectorLayer(shlayer, name, "ogr")

El shlayer no está creado y, obviamente, me da un error cuando intento importarlo. ¿Hay algún problema con la forma de importar la capa WKT?

2voto

Mue Puntos 2469

Lo siguiente es sólo para darte una idea de cómo automatizar algunos de los pasos que has mencionado, espero que puedas modificarlo para incluir algunas de las herramientas de análisis que necesitas:

from PyQt4.QtCore import QFileInfo
import glob, os, processing
proj = QgsProject.instance()

# STEP 1: Define Project name and paths for csv files and shapefiles

project_name = "name"
project_path = "C:\Users\You\Desktop\Test_folder\\"
csv_path = "C:\Users\You\Desktop\Test_folder\csv\\"
polygon_path = "C:\Users\You\Desktop\Test_folder\shapefiles\\"

# STEP 2: Import csv files

# Sets current directory to path of csv files
os.chdir(csv_path)
# Finds each .csv file and identify 'X', 'Y' fields
for fname in glob.glob("*.csv"):
    uri = "file:///" + csv_path + fname + "?delimiter=%s&crs=epsg:4326&xField=%s&yField=%s" % (",", "x", "y")
    # Replace '.csv' in name when loading into QGIS
    name = fname.replace('.csv', '')
    lyr = QgsVectorLayer(uri, name, 'delimitedtext')
    # Add to QGIS canvas
    QgsMapLayerRegistry.instance().addMapLayer(lyr) 

# STEP 3: Import shapefiles

# Sets current directory to path of shapefiles
os.chdir(polygon_path)
# Finds each shapefile
for layer in glob.glob('*.shp'):
    # Replace '.shp' in name when loading into QGIS
    name = layer.replace('.shp', '')
    # Add to QGIS canvas
    iface.addVectorLayer(layer, name, "ogr")

# STEP 4: Do some analysis
# Example - To use tools from the Processing Toolbox, 
# use the Python Console to know which parameters are required.
# E.g. To see the parameters:
# `processing.alghelp("qgis:mergevectorlayers")`
# To run the tool:
# `processing.runalg("qgis:mergevectorlayers", layer_1, layer_2, None)`

# STEP 5: Save Project to directory

proj.write(QFileInfo(project_path + name + "_main.qgs"))

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