Làm thế nào để thực hiện các nhiệm vụ lặp đi lặp lại trong QGIS?


11

Tôi đang cố gắng thực hiện một điều trị trên nhiều tệp tính năng, vì vậy tôi muốn tự động hóa nó.

Trên thực tế, tôi có một shapefile với sự phân bố không gian của một số loài và một loài có kiểu thảm thực vật.

Tôi muốn chọn (theo thuộc tính) một loài trong Loài Shapefile, sau đó chọn (theo địa phương) tất cả các khu vực thực vật giao với khu vực phân bố của chúng. Cuối cùng, tôi muốn có một shapefile với, như tên, tên loài, và với các thuộc tính và hình thức của các loại thực vật thường xuyên. Và tôi muốn lặp lại điều này cho tất cả các loài (hơn 100), và nếu có thể hãy làm điều này một cách dễ dàng (để người khác có thể thực hiện nó).

Tôi đã thử tác vụ này bằng cách sử dụng plugin Sextante, nhưng cuối cùng tôi không thể có tên loài là tên shapefile.

Ai đó có thể đề xuất một phương pháp cho việc này?


1
Từ mô tả của bạn, toàn bộ công việc sẽ phù hợp hơn với cơ sở dữ liệu địa lý đầy đủ tính năng như PostGIS hoặc SpatiaLite. Nhưng một giải pháp hoàn chỉnh để thực hiện những gì bạn cần có thể không tầm thường.
steko

Câu trả lời:


5

Mục blog này có thể giúp hiểu cách thực hiện trong SEXTANTE:

http://qgissextante.blogspot.fr/2013/01/USE-selection-alerskyms.html

Hy vọng nó giúp


Xin chào, cảm ơn vì điều đó, tôi muốn thử nó, nhưng tôi không phải là chuyên gia về loại kịch bản này, vậy bạn có thể giải thích những gì chúng tôi phải làm với kịch bản này không? chúng ta nên sao chép nó ở đâu? cảm ơn.
Onesime

Thật tuyệt, cảm ơn bạn rất nhiều, tôi đã thử nó (thông qua Bảng điều khiển Python) và nó hoạt động tốt. Bước tiếp theo, tôi sẽ cố gắng điều chỉnh nó như một người tạo mô hình Sextante. Điều thiệt hại là không có lệnh như vậy trong một công cụ như Sextante (đặt tên của tệp đầu ra với một số biến).
Onesime

3

Điều này đòi hỏi một kịch bản nhỏ. Để làm cho nó sanh sản nhiều tôi sẽ cố gắng để hoàn thành nó trong R . Cũng có thể với QGis và Sextante bằng cách sử dụng thực thi hàng loạt (nhấp chuột phải vào chức năng) trong mô hình Sextante. Ở đây trước tiên bạn có thể sử dụng công cụ giao nhau vectơ và sau đó một số loại tham gia không gian.

Trong R tôi sẽ thử nó như thế này. Bạn có thể phải sửa đổi mã vì tôi không biết cấu trúc dữ liệu và các biến của bạn.

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

}

Tôi đã đưa ra nhiều giả định về mục tiêu của bạn và cấu trúc của tập dữ liệu của bạn. Nhiều khả năng bạn phải sửa mã theo nhu cầu của mình trước khi dùng thử.


Cảm ơn sự giúp đỡ của bạn, tôi sẽ thử nó. Dữ liệu loài của tôi là đa giác (phân bố loài), nhưng tôi nghĩ nó có thể hoàn toàn giống nhau? cảm ơn nhiều
Onesime

Bạn chỉ cần thay đổi một số chức năng (ví dụ SpatialPolygonsDataFrame) và rất có thể trả về một danh sách các datafram hoặc một cái gì đó khác.
Curlew
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.