허용 오차를 사용하여 QGIS (GEOS)에서 다각형 용해


11

홍수로 침수 된 영역을 나타내는 다각형 벡터 레이어가 있습니다. 이 레이어는 일부 영역이 여러 개의 작은 터치 다각형으로 구성되어 있습니다 (아래의 "원본 데이터"레이블이 붙은 스크린 샷 참조).

다각형이 닿는 곳에 용해시키고 싶습니다. GEOS 라이브러리를 사용하는 QGIS의 fTools에서 디졸브 지오 프로세싱 도구를 사용하면 예기치 않은 결과가 발생합니다 ( "QGIS fTools로 디졸브"참조). GEOS는 다음과 같은 문제에서 언급 한 것처럼 다각형이 닿는 지 여부를 결정하는 데 임계 값을 사용하지 않는 것 같습니다.

http://trac.osgeo.org/qgis/ticket/3126

http://trac.osgeo.org/qgis/ticket/3184

http://hub.qgis.org/issues/2806

ArcGIS의 동일한 접근 방식은 예상 결과를 제공합니다 ( "ArcGIS 10.1로 용해"참조).

분명히 이것은 버그가 아니라 GEOS의 "기능"입니다. 예상 결과를 생성하기 위해 데이터를 수정하는 방법이 있습니까? 약간의 정밀도 손실 (약 몇 cm?)도 괜찮습니다. 이상적으로 솔루션은 사전 처리 단계로 QGIS 플러그인에 쓸 수있는 것입니다.

관련 질문 (답변 없음) : QGIS에서 지오 프로세싱 도구의 공차 값을 설정하는 방법은 무엇입니까?

https://www.dropbox.com/s/c8ns7wwfv289ad0/sample.zip : shapefile로 샘플 데이터에 링크

폴리곤 해산 v. 디졸브


해결 방법은 먼저 fTools 디졸브 폴리곤을 먼저 자른 다음 축소하는 것입니다 (양수로 먼저 버퍼링 한 다음 음수 버퍼로 버퍼링).
Jake

나는 이것을 시도했지만 다른 문제 (예 : i.stack.imgur.com/LnFJy.png )로 끝납니다 . 여기에서 파란색 영역은 버퍼 / 디졸브 / 네거 버퍼가 될 때 생성됩니다. 이것은 원래 문제보다 그리 나쁘지 않습니다. 원래의 "날카로운"코너를 복구하는 방법을 볼 수 없습니다.
Snorfalorpagus

답변:


14

이 경우 토폴로지를 먼저 수정하여 디졸브 툴을 도와야하는 것처럼 보입니다. GRASS에서이를 수행하는 방법은 다음과 같습니다.

쉐이프 파일을로드 할 때, GRASS가 다음과 같이 보는 방법입니다.

각 십자가는 지역을 표시합니다. 경계선에 약간의 십자가가 있음을 알 수 있습니다. 경계선 사이의 약간의 오프셋으로 인해 은색 다각형입니다.

  1. 실제 다각형 사이의 틈으로 형성된 은색 다각형을 제거하십시오.

    v.clean input=sample output=tempA --o tool=rmarea thresh=0.001
  2. 경계선을 스냅합니다 :

    v.clean input=tempA output=tempB --o tool=snap thresh=0.001
  3. 새 교차로에서 경계선을 끊습니다.

    v.clean input=tempB output=tempA --o tool=break thresh=0.001
  4. 이제 중복 경계선을 제거하십시오.

    v.clean input=tempA output=tempB --o tool=rmdupl thresh=0.001
  5. 다각형 해산

    v.dissolve input=tempB output=cleaned --o column=ID

기타 :


감사합니다 @Jake. 이것은 매우 명확한 대답입니다. 불행히도 프로세스를 전체 데이터 세트 (2500km2 포함)에 적용하려고하면 스냅 도구 "오류 : G_realloc : snap.c : 186에서 144720024 바이트의 메모리를 할당 할 수 없습니다"에서 오류가 발생합니다. 작은 덩어리로 분해해야 할 것 같습니다. 교차점 / 공간 인덱싱 속도를 높이기 위해 이미 0.25km2 제곱으로 세분화했기 때문에 괜찮습니다 (샘플 데이터의 "ID"필드).
Snorfalorpagus

7

GRASS GIS 명령 v.dissolve 사용 (Sextante 플러그인-> GRASS 명령-> 벡터)

내가 예를 빨리 재현한다면 : 여기에 이미지 설명을 입력하십시오

v.dissolve의 결과 :

여기에 이미지 설명을 입력하십시오

설명

문제는 이해하기 쉽다. 두 영역이 공통 경계를 공유하는 경우 쉐이프 파일에는 토폴로지가 없습니다. 해당 경계는 두 번 디지털화되고 중복으로 저장됩니다.

shapefile을 편집하려고 할 때 이것을 명확하게 볼 수 있습니다.

여기에 이미지 설명을 입력하십시오

GRASS GIS (ArcGIS)는 위상 학적 기스입니다. GRASS에서 shapefile을 가져올 때 결과 레이어에는 토폴로지가 있습니다. 두 영역 사이의 공통 경계는 한 번 존재하며 공유됩니다.

여기에 이미지 설명을 입력하십시오

이러한 이유로 셰이프 파일을 디졸브 ( 두 경계 디졸브)하려는 경우 QGIS, GvSIG, OpenJUMP 또는 이전 ArcView 3.x에서 문제가 발생할 수 있습니다 . ArcUserI : 토폴로지 및 셰이프 파일 이해를 참조하십시오 .

GRASS에서 v.dissolve는 카테고리 번호가 동일한 영역 사이의 공통 경계를 해결 하도록 설계되었습니다.


1
내 생각에 이것은 숫자 문제이며 OP의 기하학에 대한 훌륭한 사본이 동일한 숫자 속성을 캡처하는지 궁금합니다.
Chau

@Chau : v.dissolveOP 문제를 해결하는 공차 매개 변수가 있습니다.
Jake

명확하게 해주셔서 감사합니다 :)
Chau

질문에 원본 파일에 대한 링크를 shapefile로 추가했습니다. 내가 사용 v.dissolve하면 기능 가운데 작은 사각형을 "채우는"것을 제외하고는 작동하는 것처럼 보입니다. i.stack.imgur.com/AA59l.png
Snorfalorpagus

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