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.