¿Cómo realizar tareas repetitivas en QGIS?

11

Estoy tratando de hacer un tratamiento en muchos archivos de características, por lo que me gustaría automatizarlo.

De hecho, tengo un archivo de forma con la distribución espacial de algunas especies, y uno con el tipo de vegetación.

Me gustaría seleccionar (por atributo) una especie en el Shapefile de especies, luego seleccionar (por localidad) todas las áreas de vegetación que se cruzan con su área de distribución. Finalmente, me gustaría tener un archivo de forma con, como nombre, el nombre de la especie, y con los atributos y formas de los tipos de vegetación frecuentados. Y me gustaría repetir esto para todas las especies (más de 100), y si es posible hacerlo de manera fácil (para que lo pueda hacer otra persona).

Ya he intentado esta tarea usando el complemento Sextante, pero al final no puedo tener el nombre de la especie como un nombre de archivo de forma.

¿Alguien puede sugerir un método para esto?

Onesime
fuente
1
Según su descripción, todo el trabajo sería más adecuado para una geodatabase con todas las funciones como PostGIS o SpatiaLite. Pero una solución completa para realizar lo que necesita puede no ser trivial.
steko

Respuestas:

5

Esta entrada de blog puede ayudar a comprender cómo hacerlo en SEXTANTE:

http://qgissextante.blogspot.fr/2013/01/using-selection-algorithms.html

Espero eso ayude

Victor Olaya
fuente
Hola, gracias por eso, quiero probarlo, pero no soy un experto en este tipo de guión, así que ¿puedes explicar qué tenemos que hacer con este guión? ¿Dónde deberíamos copiarlo? Gracias.
Onesime
Genial, muchas gracias, lo probé (a través de la Consola Python) y funciona bien. El siguiente paso, intentaré adaptarlo como modelador Sextante. Es un daño que no exista dicho comando en una herramienta como Sextante (establezca el nombre del archivo de salida con algunas variables).
Onesime
3

Esto requiere un pequeño guión. Para que sea reproducible me gustaría tratar de lograrlo en R . También debería ser posible con QGis y Sextante utilizando la ejecución por lotes (clic derecho en la función) en un modelo Sextante. Aquí puede usar primero la herramienta de intersección de vectores y luego algún tipo de unión espacial.

En R lo intentaría así. Es posible que deba modificar el código, ya que no conozco su estructura de datos y variables.

library(raster);library(rgdal);library(sp)         # Load in required packages

vegetation <- readOGR("H:/Examplefolder",          # To load a vegetation polygon shape here 
                      "vegi")                      # called vegi.shp    

setwd(harddriveD)                                  # Now, switch to the directory containing your species shapes
                                                   # and use the following code 
species_files <- grep( ".shp",                     # to extract all shape names
                       dir(),
                       ignore.case=T,
                       value=T)

                                                   # Now read in your speciesfiles in a loop 
for(name in species_files){                        # and do a  vegetation data
                                                   # overlay with your basename
    spec_name <- strsplit(name,split=".shp")[[1]]  # to get only the load in
                                                   # your species name shape. 

    spec_shp <- readOGR(".",spec_name)             # I assume that you have point data. Otherwise change the code.
    ov <- over(spec_shp,vegetation)                # Make a overlay with your vegetation data, 
                                                   # returns a dataframe of the overlaying vegetation shape attributes, 
                                                   # which are within your species shape. 
                                                   # This dataframe has the same number of rows as your input species shape. 
   cd <- coordinates(spec_shp);                    # Therefore you could just append the needed information to your species shape.
   proj <- proj4string(spec_shp)                   # save coordinates and proj.

                                                   # Append your vegetation data to your species shape
   spec_shp$Vegetation <- ov$ShrubSpecies          # Or whatever you want to get. 

   spp <- SpatialPointsDataFrame(                  # In the end export your shape again. 
                    coords=cd,                     # I would advise you to use a different folder. 
                    data=as.data.frame(spec_shp),  # In case you have polygons instead of Point data
                    proj4string=CRS(proj) )        # use the SpatialPolygonDataFrame function. -> help ?SpatialPolygonDataFrame
  writeOGR(spp,                                    #Should result in a new shape 
           "foldername",                           # which has your species name.
           spec_name,
           driver="ESRI Shapefile")                      

}

He hecho muchas suposiciones sobre su objetivo y la estructura de su conjunto de datos. Lo más probable es que tenga que corregir el código según sus necesidades antes de probarlo.

Zarapito
fuente
Gracias por tu ayuda, lo intentaré. Los datos de mi especie están en polígono (distribución de especies), pero ¿creo que es lo mismo? muchas gracias
Onesime
Solo necesita cambiar alguna función (SpatialPolygonsDataFrame por ejemplo) y lo más probable es que devuelva una lista de marcos de datos u otra cosa.
Curlew