Bagaimana melakukan tugas berulang di QGIS?

11

Saya mencoba melakukan perawatan pada banyak file fitur, jadi saya ingin mengotomatiskannya.

Bahkan, saya punya satu shapefile dengan distribusi spasial dari beberapa spesies, dan satu dengan tipe vegetasi.

Saya ingin memilih (berdasarkan atribut) satu spesies dalam Species Shapefile, lalu memilih (berdasarkan lokalitas) semua area vegetasi yang bersinggungan dengan area distribusinya. Akhirnya, saya ingin memiliki shapefile dengan, sebagai nama, nama spesies, dan dengan atribut dan bentuk tipe vegetasi yang sering. Dan saya ingin mengulangi ini untuk semua spesies (lebih dari 100), dan jika mungkin melakukannya dengan mudah (sehingga bisa dilakukan oleh orang lain).

Saya sudah mencoba tugas ini menggunakan plugin Sextante, tetapi saya tidak bisa memiliki nama spesies sebagai nama shapefile di akhir.

Dapatkah seseorang menyarankan metode untuk ini?

Satu hari
sumber
1
Dari deskripsi Anda, seluruh pekerjaan akan lebih cocok untuk geodatabase berfitur lengkap seperti PostGIS atau SpatiaLite. Tetapi solusi lengkap untuk melakukan apa yang Anda butuhkan mungkin tidak sepele.
steko

Jawaban:

5

Entri blog ini mungkin membantu untuk memahami bagaimana melakukannya di SEXTANTE:

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

Semoga ini bisa membantu

Victor Olaya
sumber
Hai, terima kasih untuk itu, saya ingin mencobanya, tetapi saya tidak ahli dalam skrip semacam ini, jadi bisakah Anda menjelaskan apa yang harus kami lakukan dengan skrip ini? di mana kita harus menyalinnya? Terima kasih.
Onesime
Hebat, terima kasih banyak, saya mencobanya (melalui Python Console) dan berfungsi dengan baik. Langkah selanjutnya, saya akan mencoba untuk mengadaptasinya sebagai pemodel Sextante. Ini kerusakan karena tidak ada perintah seperti itu dalam alat seperti Sextante (mengatur nama file output dengan beberapa variabel).
Onesime
3

Ini membutuhkan skrip kecil. Untuk membuatnya direproduksi saya akan mencoba untuk mencapainya dalam R . Itu juga harus dimungkinkan dengan QGis dan Sextante dengan menggunakan eksekusi batch (klik kanan pada fungsi) dalam model Sextante. Di sini Anda pertama-tama dapat menggunakan alat persimpangan vektor dan setelah itu beberapa jenis gabungan spasial.

Dalam R saya akan mencobanya seperti ini. Anda mungkin harus mengubah kode karena saya tidak tahu struktur dan variabel data Anda.

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

}

Saya telah membuat banyak asumsi tentang tujuan Anda dan struktur dataset Anda. Kemungkinan besar Anda harus memperbaiki kode sesuai kebutuhan sebelum mencobanya.

Curlew
sumber
Terima kasih atas bantuan Anda, saya akan mencobanya. Data spesies saya ada dalam poligon (distribusi spesies), tapi saya pikir mungkin sama? terima kasih banyak
Onesime
Anda hanya perlu mengubah beberapa fungsi (SpatialPolygonsDataFrame misalnya) dan kemungkinan besar akan mengembalikan daftar bingkai data atau sesuatu yang lain.
Curlew