오픈 소스 GIS 솔루션에서 다각형 오버레이로 래스터 값 얻기


16

두 개의 레이어가 있습니다. 많은 타일이있는 다각형 모양 레이어와 컬러 맵 에 많은 범주가있는 CORINE 2006 랜드 커버 가 포함 된 래스터 레이어 . 쉐이프 레이어의 각 다각형에 대해 래스터 레이어의 각 랜드 커버 범주의 합계를 얻고 싶습니다.

예를 들어 ID가 '2'인 다각형이 있으며이 다각형에 대해 다음과 같은 속성을 백분율 또는 평방 미터 단위로 표시하려고합니다.

  • 경작지 : 15 %
  • 산림 : 11 %
  • 거리 : 2 % (... 그리고 하나)

나는 잔디, qgis (기능 없음), saga (총 합계로 합산) r (총 합계)에서 시도했지만 여전히 해결책을 찾지 못했습니다. 대부분의 플러그인 (qgis의 영역 통계)은 0-1 개의 래스터 레이어 만 지원합니다. v.rast.stats도 도움이되지 않았습니다. 나는 좋은 스마트 솔루션에 열려 있습니다!. 어쩌면 나는 심지어 잘못된 접근법을 사용하거나 실수를 저질 수도 있습니다.

Arcgis 에서이 작업은 옳은 것을 기억한다면 매우 쉽습니다.하지만 여전히 일상적인 Linux 사용자를위한 좋은 해결책이 없습니다.

데비안 리눅스 시스템을 사용하고 있는데이 OS 용 프로그램 만 사용할 수 있습니다.


편집 :이 질문에는 여전히 많은 견해와 방문자가 있기 때문에 : 나는 래스터 레이어의 랜드 커버를 계산할 수있는 QGIS 플러그인을 작성했습니다. 아직 다각형 오버레이를 코딩하지 않았지만 확실히 계획되었습니다. 여기 에서 플러그인을 찾고 Scipy 라이브러리를 먼저 설치하십시오.


R에서 수행 할 수 있습니다 .R은 어떤 기능을 수행 해야하는지에 대한 문제입니다. 각 다각형을 래스터로 오버레이 한 다음 table ()을 사용하여 "쿠키 컷"픽셀의 요약을 가져옵니다. 래스터, rgdal 및 rgeos 패키지가 유용 할 수 있습니다. "R 공간 작업보기"를 읽습니다 (Google에서 찾을 수 있음)
Spacedman

확실하지만 어떻게 요약을 얻을 수 있습니까? ! is.na (overlay (Poly, Raster))를 사용하여 래스터 레이어로 다각형 레이어를 쉽게 오버레이 할 수 있지만 extract와 같은 명령을 사용하면 쿠키 컷 픽셀의 총 영역 만 계산할 수 있으며 컬러 맵의 다른 범주는 계산할 수 없습니다 . 나는 rgeos를 알지 못했지만 API를 살펴 보고이 기능을 찾지 못했습니다.
Curlew

참조로, 잔디 r.univar을 확인 grasswiki.osgeo.org/wiki/Zonal_statistics
markusN에게

안녕하세요! QGIS 플러그인을 만들어 주셔서 감사합니다! 플러그인이 충돌한다고 언급하고 싶습니다 (> 13000 다각형). 충돌하지 않도록 작업을 분할하면 좋을 것입니다. 그리고 모든 클래스를 한 번에 추가 할 수있는 옵션이 있으면 좋을 것입니다 (예 : 속성 테이블에 LandcoverID 및 Landcover %라는 두 개의 새 필드가 있고 여기에는 값이있는 CSV 목록이 있습니다) :)
Mfbaer

@Joran : 이것이 버그라고 생각되면 주석 ( github.com/Martin-Jung/LecoS/issues ) 에 쓰지 말고 버그 보고서를 작성하십시오 . 또한 1) 작업을 직렬화하거나 일괄 처리하는 것은 플러그인 작업이 아닙니다. 그런 다음 작은 하위 집합에서 실행하십시오. 2) 물론입니다. 추가해야 할 멋진 것들이 많이 있습니다. 코드는 오픈 소스입니다. 자유롭게 코딩하십시오. :)
Curlew

답변:


13

래스터에서 'extract'를 사용하여 SpatialPolygonsDataFrame (maptools : readShapeSpatial을 사용하여 shapefile에서 읽을 수 있음)의 다각형 피처를 오버레이 한 다음 'table'을 사용하여 요약합니다. 예:

> c=raster("cumbria.tif") # this is my CORINE land use raster
> summary(spd)
Object of class SpatialPolygonsDataFrame
[...]
> nrow(spd)  # how many polygons:
[1] 2
> ovR = extract(c,spd)
> str(ovR)
List of 2
 $ : num [1:542] 26 26 26 26 26 26 26 26 26 26 ...
 $ : num [1:958] 18 18 18 18 18 18 18 18 18 18 ...

첫 번째 다각형은 542 픽셀, 두 번째 다각형은 958입니다. 각 다각형을 요약 할 수 있습니다.

> lapply(ovR,table)
[[1]]

 26  27 
287 255 

[[2]]

  2  11  18 
 67  99 792 

따라서 첫 번째 다각형은 클래스 26의 287 픽셀, 클래스 27의 255 픽셀입니다. 백분율을 얻기 위해 100을 곱하고 나누고 곱하기에 충분히 쉽습니다.


노력해 주셔서 감사합니다. 나는 그것을 시도하고 다시보고 :-)
Curlew

6

다시보고 싶었고 여기 있습니다. Spacedman의 솔루션은 훌륭하게 작동했으며 모든 다각형에 대한 모든 정보를 내 모양으로 내보낼 수있었습니다. 누군가가 같은 문제가있는 경우를 대비하여 다음과 같습니다.

...
tab <- apply(ovR,table)
# Calculate percentage of landcover types for each polygon-field.
# landcover is a datastream with the names of every polygon
for(i in 1:length(tab)){
 s <- sum(tab[[i]])
 mat <- as.matrix(tab[[i]])
 landcover[i,paste("X",row.names(mat),sep="")] <- as.numeric(tab[[i]]/s)
}

3

내가 원하는 것을 올바르게 이해하고 GRASS GIS 데이터베이스에 벡터 레이어 'mypolygonlayer'와 래스터 레이어 'corina'가 있다고 가정하면 :

먼저 벡터를 래스터로 변환합니다. 고양이는 다각형마다 하나의 고유 식별자를 갖습니다. 고유 한 숫자 식별자가있는 열이있는 경우 해당 열을 대신 사용할 수 있습니다. labelcolumn은 선택 사항입니다.

v.to.rast 입력 = mypolygonlayer 레이어 = 1 출력 = mypolygons use = cat labelcolumn = 이름 매핑 단위

그런 다음 r.stats를 실행하여 통계를 얻으십시오.

r.stats -a -l 입력 = mypolygons, 코리나 분리기 =; 출력 = / home / paulo / corinastats.csv

마지막 단계는 예를 들어 LibreOffice에서 corinastats.csv를 열고 피벗 테이블을 만들거나 R을 사용하여 크로스 테이블을 만드는 것입니다.


3

나는이 게시물이 꽤 오래되었다는 것을 알고 있지만 최근에 같은 종류의 분석을 수행하는 것을 싫어하지만 R과 같은 프로그램을 다운로드하는 것은 내 작업 컴퓨터에서 약간 번거롭고 승인이 필요합니다. QGis와 Excel에서만 사용할 수있는 방법을 여러 시간 연구 한 결과,이 방법이 나에게 가장 효과적이며 동일한 상황에있는 사람들에게 제공하고 싶었습니다.

  1. 래스터 레이어에 다각형 자르기 (래스터 → 추출 → 클리퍼 : 입력 파일 = 래스터 레이어, 출력 이름 및 위치 선택, 마스크 레이어 클릭, 다각형 선택 → 확인)

  2. 클리퍼 레이어 다각형 (래스터 → 변환 → 다각형 : 입력 파일 = 클립 레이어, 출력 저장 → 확인)

  3. 픽셀 수 계산 (방금 생성 한 모양 파일을 클릭하고 → 필드 계산기 열기 : "새 필드 만들기"를 선택하고 필드 이름을 추가합니다. 기능 = 형상 → 영역 → 확인). 이제 속성 테이블에 픽셀 수를 표시하는 새 열이 있어야합니다.

  4. 다각형 레이어 저장 (다각형 레이어를 마우스 오른쪽 버튼으로 클릭하고 다른 이름으로 저장 : 형식 = DBF 파일, 다른 이름으로 저장 → 확인)

  5. 각 서식지에 대한 픽셀 수 요약 (시작 Excel, 열린 파일, 제목이없는 경우 각 열마다 하나씩 추가하고 빈 셀을 클릭하고 DATA 탭으로 이동하여 통합하고 합계인지 확인하십시오. “찾아보기…”옆에있는 빨간색 화살표를 선택하고 두 개의 열 (제목 포함)을 선택한 다음“추가”를 클릭하고“맨 위 행”과“왼쪽 열”상자를 모두 체크합니다 → 확인)

  6. 나와 같이 분석 할 다각형이 많고 동일한 표에서 다각형을 비교해야하는 경우이 단계가 도움이됩니다. 새로운 Excel 통합 문서에서 A 열 (1 ~ 48 열)에 서식지 번호를 나열하고 방금 통합 한 두 열을 B 열과 C 열에 배치하십시오 (B의 서식과 C의 픽셀 수). D1 셀에 = IFNA (INDEX (C : C; MATCH (A2; B : B; 0)); "") 수식을 작성하고 마지막 값으로 아래로 드래그 (또는 오른쪽 아래 두 번 클릭)하십시오. D48까지 48 개의 서식지가 있습니다). 픽셀 수는 이제 해당 셀의 서식처에 있으며 모든 다각형에 대해이 과정을 반복 할 수 있습니다.


2

QGIS ( Raster> Conversion> Polygonize )를 사용하고 Union 함수 ( Vector> Geoprocessing Tools> Union )를 사용하여 CORINE 데이터를 벡터 다각형 데이터 세트로 변환하고 다각형과 결합하는 방법은 어떻습니까 ? 결과 벡터 데이터 세트에는 각 다각형의 각 CORINE 클래스 영역이 포함됩니다.


이 제안에 감사드립니다. 아직 벡터 결합에 대해 생각하지 않았습니다. R 처리가 어떻게 든 실패하면 어쩌면 시도해 볼 것입니다.
Curlew

0

QGIS.

QGIS 트렁크에는 다른 버전의 ZonalStats가 있으며이를 Zonal Statistics라고합니다.

필요한 기능을 수행합니다.

워크 플로와 관련하여 래스터에 몇 개의 래스터가 있는지 또는 래스터에 밴드인지는 확실하지 않습니다.


의견에 감사드립니다. 그러나 Zonal Statistics는 카테고리가없는 래스터 만 먹습니다. QGIS Trunk 1.9를 사용하는 Iam
Curlew

0

위의 대부분의 대답과 달리, 더 나은 옵션은 다각형을 래스터 화하고 두 개의 다각형 데이터 세트 대신 두 개의 래스터 데이터 세트로 작업하는 것보다 낫습니다. 이것은 처리 집약도가 훨씬 낮으므로 결과적으로 R에서 큰 래스터 및 큰 다각형 파일을 처리하는 솔루션을 구현하기 쉬운 유일한 방법입니다.

다각형을 래스터 데이터의 정확한 범위와 해상도로 래스터 화 한 후 여기 에 설명 된대로 요약 통계를 표로 만들 수 있습니다. 래스터가 메모리 (소규모 / 중간 래스터 레이어)에 적합하거나 reclass함수를 사용하여 각 범주를 이진화 할 수있는 경우 zonal각 클래스에 대한 통계를 계산 합니다. 다음 은 래스터 화 및 구역 통계를 하나의 함수로 통합하고 매우 큰 데이터 세트에서 잘 작동하는 솔루션입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.