Как выполнять повторяющиеся задачи в QGIS?


11

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

На самом деле, у меня есть один шейп-файл с пространственным распределением некоторых видов, а другой - с типом растительности.

Я хотел бы выбрать (по атрибуту) один вид в шейп-файле видов, а затем выбрать (по месту) все области растительности, которые пересекаются с их ареалом распространения. Наконец, я хотел бы иметь шейп-файл с именем, названием вида, а также с атрибутами и формами часто используемых типов растительности. И я хотел бы повторить это для всех видов (более 100) и, если возможно, сделать это легко (чтобы это мог сделать другой человек).

Я уже пробовал эту задачу с помощью плагина Sextante, но у меня не может быть названия вида в качестве имени шейп-файла в конце.

Может кто-нибудь предложить метод для этого?


1
Из вашего описания вся работа будет более подходящей для полнофункциональной базы геоданных, такой как PostGIS или SpatiaLite. Но полное решение для выполнения того, что вам нужно, может быть не тривиальным.
steko

Ответы:


5

Эта запись в блоге может помочь понять, как это сделать в SEXTANTE:

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

Надеюсь, поможет


Привет, спасибо за это, я хочу попробовать, но я не эксперт в такого рода сценариях, так что вы можете объяснить, что мы должны делать с этим сценарием? где мы должны скопировать это? Спасибо.
Onesime

Отлично, большое спасибо, я попробовал (через консоль Python), и он работает хорошо. Следующим шагом я постараюсь адаптировать его как модельера Sextante. Ущерб, что в таком инструменте, как Sextante, нет такой команды (задайте имя выходного файла с некоторыми переменными).
Единственное время

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) и, скорее всего, перезапускать список фреймов данных или что-то еще.
Керлью
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.