QGIS에서 반복적 인 작업을 수행하는 방법?


11

많은 기능 파일을 처리하려고하므로 자동화하고 싶습니다.

사실, 나는 어떤 종의 공간 분포와 하나의 초목 유형을 가진 하나의 shapefile을 가지고 있습니다.

종 모양 파일에서 한 종을 (속성으로) 선택한 다음 분포 지역과 교차하는 모든 초목 지역을 (지역별로) 선택하고 싶습니다. 마지막으로, 이름, 종 이름, 빈번한 초목 유형의 속성과 형태를 가진 형태 파일을 갖고 싶습니다. 그리고 나는 모든 종 (100 명 이상)에 대해 이것을 반복하고 싶습니다. 가능하다면 쉬운 방법으로 이것을하십시오 (따라서 다른 사람이 할 수 있습니다).

Sextante 플러그인을 사용하여 이미이 작업을 시도했지만 끝에 종 모양 이름을 shapefile 이름으로 사용할 수 없습니다.

누군가이 방법을 제안 할 수 있습니까?


1
설명에서 전체 작업은 PostGIS 또는 SpatiaLite와 같은 모든 기능을 갖춘 지오 데이터베이스에 더 적합합니다. 그러나 필요한 것을 수행하기위한 완벽한 솔루션은 사소하지 않을 수 있습니다.
steko

답변:


5

이 블로그 항목은 SEXTANTE에서 수행하는 방법을 이해하는 데 도움이 될 수 있습니다.

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

그것이 도움이되기를 바랍니다.


안녕하세요, 고마워요, 시도하고 싶지만 이런 종류의 스크립트에 대해서는 전문가가 아니므로이 스크립트와 관련하여 무엇을해야하는지 설명해 주시겠습니까? 어디에서 복사해야합니까? 감사.
Onesime

대단히 감사합니다 .Python 콘솔을 통해 시도해 보았습니다. 다음 단계에서는 Sextante 모델러로 적용하려고합니다. Sextante와 같은 도구에 이러한 명령이 없으면 손상됩니다 (일부 변수로 출력 파일의 이름을 설정하십시오).
Onesime

3

이것은 작은 스크립트를 요구합니다. 그것을 재현 가능하게하기 위해 나는 R 에서 그것을 달성하려고 노력할 것 입니다. Sextante 모델에서 배치 실행 (기능을 마우스 오른쪽 버튼으로 클릭)을 사용하여 QGis 및 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.