Wie werden sich wiederholende Aufgaben in QGIS ausgeführt?

11

Ich versuche, viele Feature-Dateien zu behandeln, daher möchte ich sie automatisieren.

Tatsächlich habe ich ein Shapefile mit der räumlichen Verteilung einiger Arten und eines mit Vegetationstyp.

Ich möchte (nach Attributen) eine Art im Species Shapefile auswählen und dann (nach Ort) alle Vegetationsgebiete auswählen, die sich mit ihrem Verbreitungsgebiet überschneiden. Schließlich möchte ich ein Shapefile mit dem Namen der Art sowie den Attributen und Formen der frequentierten Vegetationstypen haben. Und ich möchte dies für alle Arten (mehr als 100) wiederholen und dies, wenn möglich, auf einfache Weise tun (damit es von einer anderen Person durchgeführt werden kann).

Ich habe diese Aufgabe bereits mit dem Sextante-Plugin versucht, aber ich kann den Artennamen am Ende nicht als Shapefile-Namen haben.

Kann jemand eine Methode dafür vorschlagen?

Onesime
quelle
1
Nach Ihrer Beschreibung wäre die gesamte Arbeit besser für eine Geodatabase mit vollem Funktionsumfang wie PostGIS oder SpatiaLite geeignet. Eine vollständige Lösung für das, was Sie benötigen, ist jedoch möglicherweise nicht trivial.
Steko

Antworten:

5

Dieser Blogeintrag könnte helfen, zu verstehen, wie es in SEXTANTE geht:

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

Ich hoffe es hilft

Victor Olaya
quelle
Hallo, danke dafür, ich möchte es versuchen, aber ich bin kein Experte für diese Art von Skript. Können Sie also erklären, was wir mit diesem Skript zu tun haben? wo sollen wir es kopieren müssen? Vielen Dank.
Onesime
Großartig, vielen Dank, ich habe es versucht (über die Python-Konsole) und es funktioniert gut. Im nächsten Schritt werde ich versuchen, es als Sextante-Modellierer anzupassen. Es ist schädlich, dass es in einem Tool wie Sextante keinen solchen Befehl gibt (legen Sie den Namen der Ausgabedatei mit einigen Variablen fest).
Onesime
3

Dies erfordert ein kleines Skript. Um es reproduzierbar zu machen, würde ich versuchen, es in R zu erreichen . Dies sollte auch mit QGis und Sextante möglich sein, indem die Stapelausführung (Rechtsklick auf Funktion) in einem Sextante-Modell verwendet wird. Hier können Sie zuerst das Vektorschnittwerkzeug und anschließend eine Art räumliche Verknüpfung verwenden.

In R würde ich es so versuchen. Möglicherweise müssen Sie den Code ändern, da ich Ihre Datenstruktur und Variablen nicht kenne.

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

}

Ich habe viele Annahmen über Ihr Ziel und die Struktur Ihres Datensatzes gemacht. Höchstwahrscheinlich müssen Sie den Code an Ihre Bedürfnisse anpassen, bevor Sie ihn ausprobieren.

Brachvogel
quelle
Vielen Dank für Ihre Hilfe, ich werde es versuchen. Meine Artendaten sind in Polygon (Artenverteilung), aber ich denke, es ist vielleicht ganz dasselbe? Vielen Dank
Onesime
Sie müssen nur eine Funktion ändern (z. B. SpatialPolygonsDataFrame) und höchstwahrscheinlich eine Liste von Datenrahmen oder etwas anderem zurückgeben.
Brachvogel