Jak wykonywać powtarzalne zadania w QGIS?

11

Próbuję wykonać zabieg na wielu plikach funkcji, więc chciałbym to zautomatyzować.

W rzeczywistości mam jeden plik kształtu z rozkładem przestrzennym niektórych gatunków i jeden z typem roślinności.

Chciałbym wybrać (według atrybutu) jeden gatunek w pliku kształtów gatunków, a następnie (według lokalizacji) wszystkie obszary wegetacji, które przecinają się z ich obszarem rozmieszczenia. Na koniec chciałbym mieć plik kształtu z nazwą, nazwą gatunku oraz atrybutami i formami często odwiedzanych typów roślinności. Chciałbym powtórzyć to dla wszystkich gatunków (ponad 100) i, jeśli to możliwe, zrób to w łatwy sposób (aby mogła to zrobić inna osoba).

Próbowałem już tego zadania przy użyciu wtyczki Sextante, ale nie mogę mieć nazwy gatunku jako nazwy pliku kształtu na końcu.

Czy ktoś może zaproponować metodę tego?

Onesime
źródło
1
Z twojego opisu cała praca byłaby bardziej odpowiednia dla w pełni funkcjonalnej geobazy, takiej jak PostGIS lub SpatiaLite. Ale kompletne rozwiązanie do wykonania tego, czego potrzebujesz, może nie być trywialne.
steko

Odpowiedzi:

5

Ten wpis na blogu może pomóc zrozumieć, jak to zrobić w SEXTANTE:

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

Mam nadzieję, że to pomoże

Victor Olaya
źródło
Cześć, dziękuję za to, chcę spróbować, ale nie jestem ekspertem w tego rodzaju skryptach, więc czy możesz wyjaśnić, co mamy wspólnego z tym skryptem? gdzie powinniśmy to skopiować? dzięki.
Onesime
Świetnie, dziękuję bardzo, próbowałem (za pośrednictwem konsoli Python) i działa dobrze. W następnym kroku postaram się go dostosować jako modelarz Sextante. Szkoda, że ​​w takim narzędziu jak Sextante nie ma takiego polecenia (ustaw nazwę pliku wyjściowego za pomocą niektórych zmiennych).
Onesime
3

Wymaga to trochę skryptu. Żeby było powtarzalne chciałbym spróbować wykonać go w R . Powinno być to również możliwe w przypadku QGis i Sextante przy użyciu wykonywania wsadowego (funkcja prawego kliknięcia) w modelu Sextante. Tutaj możesz najpierw użyć narzędzia przecięcia wektora, a następnie pewnego rodzaju połączenia przestrzennego.

W R spróbowałbym tego w ten sposób. Być może będziesz musiał zmodyfikować kod, ponieważ nie znam twojej struktury danych i zmiennych.

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

}

Wiele założyłem o twoim celu i strukturze twojego zbioru danych. Najprawdopodobniej musisz poprawić kod do swoich potrzeb przed wypróbowaniem.

Kulik
źródło
Dzięki za pomoc, spróbuję. Moje dane dotyczące gatunków są w wielokącie (rozmieszczenie gatunków), ale myślę, że może jest całkiem tak samo?
wielkie
Trzeba tylko zmienić jakąś funkcję (na przykład SpatialPolygonsDataFrame) i najprawdopodobniej ponad zwróci listę ramek danych lub coś innego.
Curlew