Як виконувати повторювані завдання в QGIS?


11

Я намагаюся обробити багато файлів функцій, тому хотів би його автоматизувати.

Насправді у мене є одна форма форми з просторовим розподілом деяких видів, і одна з типом рослинності.

Я хотів би виділити (за атрибутом) один вид у шаблоні видів, а потім відібрати (за місцевістю) всі рослинні ділянки, які перетинаються з їх територією поширення. Нарешті, я хотів би мати форму форми з назвою виду, атрибутами та формами часто відвідуваних типів рослинності. І я хотів би повторити це для всіх видів (понад 100), і, якщо можливо, зробити це легким способом (щоб це могла зробити інша людина).

Я вже спробував це завдання за допомогою плагіна Sextante, але я не можу мати назву виду як ім'я формфайлу в кінці.

Чи може хтось запропонувати метод для цього?


1
З Вашого опису вся робота буде більш придатною для повнофункціональної бази даних, наприклад PostGIS або SpatiaLite. Але повне рішення виконати те, що вам потрібно, може бути не тривіальним.
steko

Відповіді:


5

Цей запис у блозі може допомогти зрозуміти, як це зробити в SEXTANTE:

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

Сподіваюся, це допомагає


Привіт, дякую за це, я хочу спробувати це, але я не знаю такого сценарію, тож чи можете ви пояснити, що ми маємо з цим сценарієм? куди ми повинні його копіювати? Дякую.
Onesime

Чудово, дуже дякую, я спробував це (через консоль Python), і він працює добре. Наступним кроком я спробую адаптувати його як модельєра Sextante. Шкода, що в такому інструменті, як Sextante, немає такої команди (встановіть ім'я вихідного файлу за допомогою деяких змінних).
Onesime

3

Це вимагає невеликого сценарію. Для того, щоб зробити його відтвореним я хотів би спробувати виконати його в R . Це також має бути можливим для QGis та Sextante, використовуючи пакетне виконання (клацання правою кнопкою миші на функцію) у моделі Sextante. Тут ви можете спочатку скористатись інструментом перетину векторів, а потім - якесь просторове з'єднання.

У R я б спробував це так. Можливо, вам доведеться змінити код, оскільки я не знаю вашої структури даних та змінних.

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

}

Я багато припускав щодо вашої мети та структури вашого набору даних. Швидше за все, вам доведеться виправити код під свої потреби, перш ніж випробувати його.


Дякую за вашу допомогу, я спробую. Дані про мої види перебувають у багатокутнику (розподіл видів), але я думаю, це, можливо, зовсім те саме? велике спасибі
Onesime

Вам просто потрібно змінити якусь функцію (наприклад, SpatialPolygonsDataFrame) і, швидше за все, повертає список фреймів даних чи щось інше.
Curlew
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.