중요

번역은 여러분이 참여할 수 있는 커뮤니티 활동입니다. 이 페이지는 현재 100.00% 번역되었습니다.

32.4. 부록 D: QGIS R 스크립트 문법

Scuola Superiore Sant’Anna 의 지원으로 마테오 게타(Matteo Ghetta)가 작성함

공간 처리 프레임워크에서 R 스크립트를 작성하는 일은 그 특수 문법 때문에 조금 까다로울 수도 있습니다.

공간 처리 R 스크립트는 그 입력물산출물 을 정의하는 것으로 시작합니다. 각각 그 앞에 2중 해시 문자(##)를 삽입해야 합니다.

입력물 앞에, 알고리즘을 배치할 그룹을 지정할 수 있습니다. 이미 존재하는 그룹이라면 알고리즘이 해당 그룹에 추가될 것입니다. 존재하지 않는 그룹이라면 해당 그룹을 생성할 것입니다. 다음 예시에서 그룹의 명칭은 My group 입니다:

##My Group=group

32.4.1. 입력물

모든 입력 데이터 및 파라미터를 지정해야 합니다. 입력물의 유형은 여럿 있습니다:

  • 벡터: ##Layer = vector

  • 벡터 필드: ##F = Field Layer (여기서 ‘Layer’ 는 필드가 속한 입력 벡터 레이어의 명칭입니다)

  • 래스터: ##r = raster

  • 테이블: ##t = table

  • 숫자: ##Num = number

  • 문자열: ##Str = string

  • 불(boolean): ##Bol = boolean

  • 드롭다운 메뉴의 항목들은 쌍반점 ; 으로 구분되어야만 합니다: ##type=selection point;lines;point+lines

32.4.2. 산출물

입력물의 경우와 마찬가지로, 스크립트 시작 부분에서 각 산출물을 정의해야 합니다.

  • 벡터: ##output= output vector

  • 래스터: ##output= output raster

  • 테이블: ##output= output table

  • 플롯(plot): ##output_plots_to_html (이전 버전에서의 ##showplots)

  • 결과물 뷰어 에 R 산출물을 표시하려면, 사용자가 표시하고자 하는 산출물을 생산하는 명령어 앞에 > 문자를 삽입하십시오.

32.4.3. QGIS R 스크립트용 문법 요약

수많은 입력 및 산출 파라미터 유형을 지원합니다.

32.4.3.1. 입력 파라미터 유형

파라미터

문법 예시

반환하는 객체

vector

Layer = vector

sf 객체 (또는 ##load_vector_using_rgdal 을 지정한 경우 SpatialDataFrame 객체)

vector point

Layer = vector point

sf 객체 (또는 ##load_vector_using_rgdal 을 지정한 경우 SpatialDataFrame 객체)

vector line

Layer = vector line

sf 객체 (또는 ##load_vector_using_rgdal 을 지정한 경우 SpatialDataFrame 객체)

vector polygon

Layer = vector polygon

sf 객체 (또는 ##load_vector_using_rgdal 을 사용하는 경우 SpatialPolygonsDataFrame 객체)

multiple vector

Layer = multiple vector

sf 객체 (또는 ##load_vector_using_rgdal 을 지정한 경우 SpatialDataFrame 객체)

table

Layer = table

CVS에서 변환한 데이터프레임으로 read.csv 함수의 기본 객체

field

Field = Field Layer

선택한 필드의 명칭, 예: "Area"

raster

Layer = raster

RasterBrick 객체로 raster 패키지의 기본 객체

multiple raster

Layer = multiple raster

RasterBrick 객체로 raster 패키지의 기본 객체

number

N = number

정수 또는 부동소수점 가운데 선택

string

S = string

텍스트란에 입력한 문자열

longstring

LS = longstring

텍스트란에 입력한 문자열로 일반 문자열보다 길 수 있음

selection

S = selection first;second;third

드롭다운 메뉴에서 선택한 항목의 문자열

crs

C = crs

선택한 좌표계의 문자열, 서식: "EPSG:4326"

extent

E = extent

raster 패키지의 범위 객체로, 값을 E@xmin 으로 추출 가능

point

P = point

맵을 클릭한 경우, 클릭한 포인트의 좌표

file

F = file

선택한 파일을 가리키는 경로, 예: “/home/matteo/file.txt”

folder

F = folder

선택한 폴더를 가리키는 경로, 예: “/home/matteo/Downloads”

파라미터는 부가적(optional) 일 수 있습니다. 무시할 수 있다는 뜻입니다.

입력물을 부가적인 것으로 설정하려면, 다음과 같이 입력물 앞에 optional 문자열을 추가하십시오:

##Layer = vector
##Field1 = Field Layer
##Field2 = optional Field Layer

32.4.3.2. 산출 파라미터 유형

파라미터

문법 예시

vector

Output = output vector

raster

Output = output raster

table

Output = output table

file

Output = output file

참고

공간 처리 결과물 뷰어 에서 플롯을 .png 포맷으로 저장할 수도 있고, 또는 알고리즘 인터페이스에서 직접 저장할 수도 있습니다.

32.4.3.3. 스크립트 본문

스크립트 본문은 R 문법을 따르며, 사용자 스크립트에 잘못된 점이 있을 경우 로그 패널에서 그 원인을 찾아볼 수 있습니다.

스크립트에서 모든 추가 라이브러리를 불러와야 한다는 점을 기억하십시오:

library(sp)

32.4.4. 예제

32.4.4.1. 벡터 산출물 예시

온라인 저장소에서 입력 레이어의 범위 안에서 랜덤한 포인트들을 생성하는 알고리즘을 선택해봅시다:

##Point pattern analysis=group
##Layer=vector polygon
##Size=number 10
##Output=output vector
library(sp)
spatpoly = as(Layer, "Spatial")
pts=spsample(spatpoly,Size,type="random")
spdf=SpatialPointsDataFrame(pts, as.data.frame(pts))
Output=st_as_sf(spdf)

설명(스크립트의 각 줄별로):

  1. Point pattern analysis 는 알고리즘이 속한 그룹입니다.

  2. Layer 는 입력 벡터 레이어입니다.

  3. Size 는 기본값이 10인 숫자 파라미터입니다.

  4. Output 은 알고리즘이 생성할 벡터 레이어입니다.

  5. library(sp)sp 라이브러리를 불러옵니다.

  6. spatpoly = as(Layer, "Spatial") 은 입력 레이어를 sp 객체로 변형합니다.

  7. sp 라이브러리의 spsample 함수를 호출, 앞에서 정의한 입력물을 (LayerSize 를) 사용해서 실행합니다.

  8. SpatialPointsDataFrame 함수를 사용해서 SpatialPointsDataFrame 객체를 생성합니다.

  9. st_as_sf 함수를 사용해서 산출 벡터 레이어를 생성합니다.

끝입니다! QGIS 범례에 있는 벡터 레이어와 함께 알고리즘을 실행하고, 랜덤 포인트의 개수를 선택하십시오. 산출되는 레이어가 사용자 맵에 추가될 것입니다.

32.4.4.2. 래스터 산출물 예시

다음 스크립트는 평범한 기본 크리그 격자법(kriging)을 수행합니다. automap R 패키지의 autoKrige 함수를 사용해서 입력 포인트 벡터 레이어의 지정 필드로부터 보간한 값들의 래스터 맵을 생성할 것입니다. 먼저 크리그 격자법 모델을 계산한 다음 래스터를 생성할 것입니다. 이 래스터는 raster R 패키지의 raster 함수를 통해 생성됩니다.

##Basic statistics=group
##Layer=vector point
##Field=Field Layer
##Output=output raster
##load_vector_using_rgdal
require("automap")
require("sp")
require("raster")
table=as.data.frame(Layer)
coordinates(table)= ~coords.x1+coords.x2
c = Layer[[Field]]
kriging_result = autoKrige(c~1, table)
prediction = raster(kriging_result$krige_output)
Output<-prediction

##load_vector_using_rgdal 을 사용하면, 입력 벡터 레이어를 SpatialDataFrame 객체로 사용할 수 있게 됩니다. sf 객체에서 변형해야 할 필요가 없어집니다.

32.4.4.3. 테이블 산출물 예시

Summary Statistics 알고리즘이 테이블 파일(.csv)을 산출하도록 편집해봅시다.

스크립트 본문은 다음과 같습니다:

##Basic statistics=group
##Layer=vector
##Field=Field Layer
##Stat=Output table
Summary_statistics<-data.frame(rbind(
    sum(Layer[[Field]]),
    length(Layer[[Field]]),
    length(unique(Layer[[Field]])),
    min(Layer[[Field]]),
    max(Layer[[Field]]),
    max(Layer[[Field]])-min(Layer[[Field]]),
    mean(Layer[[Field]]),
    median(Layer[[Field]]),
    sd(Layer[[Field]])),
  row.names=c("Sum:","Count:","Unique values:","Minimum value:","Maximum value:","Range:","Mean value:","Median value:","Standard deviation:"))
colnames(Summary_statistics)<-c(Field)
Stat<-Summary_statistics

세 번째 줄에서 입력물의 벡터 필드 를 지정하고, 네 번째 줄에서 알고리즘에 테이블을 산출해야 한다고 알려줍니다.

마지막 줄에서 스크립트가 생성한 Stat 객체를 받아 .csv 테이블로 변환할 것입니다.

32.4.4.4. 콘솔 산출물 예시

앞의 예시를 사용해서 테이블을 생성하는 대신 결과물 뷰어 에 결과물을 출력해보겠습니다:

##Basic statistics=group
##Layer=vector
##Field=Field Layer
Summary_statistics<-data.frame(rbind(
sum(Layer[[Field]]),
length(Layer[[Field]]),
length(unique(Layer[[Field]])),
min(Layer[[Field]]),
max(Layer[[Field]]),
max(Layer[[Field]])-min(Layer[[Field]]),
mean(Layer[[Field]]),
median(Layer[[Field]]),
sd(Layer[[Field]])),row.names=c("Sum:","Count:","Unique values:","Minimum value:","Maximum value:","Range:","Mean value:","Median value:","Standard deviation:"))
colnames(Summary_statistics)<-c(Field)
>Summary_statistics

이 스크립트는 두 군데 수정 사항을 제외하면 앞의 것과 완전히 동일합니다:

  1. 산출물을 지정하지 않았습니다. (네 번째 줄을 제거했습니다.)

  2. 마지막 줄 맨 앞에 > 기호를 삽입했습니다. 결과물 뷰어를 통해 사용할 수 있는 객체를 생성해야 한다고 공간 처리 프레임워크에 알려주는 것입니다.

32.4.4.5. 플롯 예시

플롯을 생성하려면, 다음 스크립트에서와 같이 ##output_plots_to_html 파라미터를 사용해야 합니다:

##Basic statistics=group
##Layer=vector
##Field=Field Layer
##output_plots_to_html
####output_plots_to_html
qqnorm(Layer[[Field]])
qqline(Layer[[Field]])

이 스크립트는 벡터 레이어(Layer)의 필드(Field)를 입력물로 사용해서 (분포의 정규성을 점검하기 위한) QQ Plot 을 생성합니다.

이 플롯은 공간 처리 결과물 뷰어 에 자동적으로 추가됩니다.