QGIS Simplify Geometries 도구를 사용하여 인접 다각형 단순화


10

다각형이 200,000 인 큰 Shapefile이 있지만 파일을 사용하는 응용 프로그램에는 파일이 너무 큽니다. 이 다각형을 일반화하고 훨씬 작은 파일을 만들고 싶습니다.

"지오메트리 단순화"도구를 사용하여 QGIS에서이 작업을 시도했습니다. 나는 이것을 Shapefile의 아주 작은 부분에서 시도했지만 결과에 만족하지만 해결 방법을 모르는 작은 문제가 있습니다. 문제를 보여주기 위해 이미지를 추가했습니다.

WHITE 경계는 단순화 전의 경계입니다. RED 경계는 단순화 후입니다. 문제 영역은 주황색으로 표시됩니다. 보시다시피 "단순 경계"에는 단순화 후 이전 다각형에 속하지 않은 일부 영역이 포함됩니다.

이 Shapefile을 단순화하고 다각형 사이의 공통 경계를 단일 선으로 유지하고 단순화 후에 생성 된 영역을 제거하려면 어떻게해야합니까?

QGIS의 단순화 된 다각형

추가 정보:

제안 된 지침을 따른 후

  1. 다각형을 선으로 변환
  2. 선 단순화
  3. 선을 다시 다각형으로 변환

다음과 같은 결과가 나타납니다. 이전보다 약간 낫지 만 여전히 원래 다각형 이외의 영역을 얻습니다 (아래 그림의 흰색 영역 참조).

@Andrew는 각 선을 인접한 다각형과 연결하라고 제안했지만 QGIS에서 어떻게해야하는지 모르겠습니다.

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

여전히 다각형 프로세스 단순화를 완료하려고합니다. 나는이 게시물에서 제안 된 지침을 따랐으며 수용 가능한 결과가 있다고 생각했을 때 또 다른 문제가 나타났습니다. 아래는 결과 이미지로 수행 한 작업의 요약입니다. 모든 단계는 QGIS의 PROCESSING 도구 상자를 사용하여 수행되었습니다.

  1. 먼저 다각형을 선으로 변환했습니다
  2. 둘째, v.clean with break 옵션을 사용하여 라인을 정리했습니다. 그 결과 CLEANED VECTOR LAYER 및 ERROR LAYER가 발생했습니다. 오류 레이어 (제공된 이미지의 녹색 점)에는 모든 선 교차점에 녹색 점이 있습니다. 나는 이것이 무엇을 의미하는지 모른다.
  3. 셋째, "SIMPLIFY GEOMETRY"도구를 사용하여 선을 단순화했습니다 (이미지에서 빨간색 선으로 표시됨). 단순화 된 빨간색 선과 원래 주황색 선을 비교하면 결과에 만족합니다.
  4. 넷째, "프로세싱"의 "다각화"도구를 사용하여 선을 다시 다각형으로 변환하고 싶지 않은 결과를 얻었습니다 (두 번째 이미지는 음영 처리 된 어두운 올리브 색 다각형). 오류 레이어 교차로 연결된 다각형 화기처럼 보이며 단순화 된 선을 무시하고 완전히 다른 다각형 세트를 만들었습니다.

누군가 여기서 무엇이 잘못되었는지 설명 할 수 있습니까?

빨간색 단순화 선이 단순화 된 다각형으로 올바르게 변환되지 않은 이유는 무엇입니까?

보시다시피 나는 GIS 전문가는 아니지만 직접해야합니다. 솔루션에서 너무 멀지 않은지 모르겠지만 원하는 작업에 적합하지만 다각형으로 변환 할 수없는 단순화 된 선을 볼 수 있다는 것이 실망 스럽습니다.

다음은 프로세스의 마지막 두 단계 결과를 가진 두 개의 이미지입니다.

단순화 된 선 및 원래 선

Plygonized 간이 선의 결과


@nhopton Polygonizer 웹 페이지 plugins.qgis.org/plugins/Polygonizer 에서는 "교차 선에서 다각형을 만듭니다"라고 말합니다. 이것은 선 교차점이있을 때마다 다각형이 생성 될 것을 제안하지만 (내 해석이 잘못되었을 수 있습니다). 내가 필요한 것은 "형상 단순화"도구를 사용할 때 생성 된 이러한 차이를 제거하는 것이며 Polygonizer가이를 수행 할 수 있다면 매우 기쁠 것입니다.
David

그것에 대해 생각하면, 원래의 폴리곤 레이어는 문제없이 단순화되어야합니다. 이 작업을 수행하지 않으면 원래 데이터에 다각형이 잘못되었을 수 있습니다. 약간 겹치거나 간격이 작은 다각형 문제 영역을 확대하여 이와 같은 것을 찾을 수 있는지 확인하십시오. N.
nhopton

토폴로지를 유지하는 좋은 방법은 @radouxju가 제안한 워크 플로 (필요하지 않은 중심 계산 제외)로 구성되며 내 대답의 처리 모델에 표시됩니다. 또는 GRASS v.generalize가 또 다른 훌륭한 옵션 이라고 생각합니다 . 도움이 되었기를 바랍니다.
Antonio Falciano

답변:


7

기본값을 사용하여 Processing Toolbox에서 GRASS v.generalize를 사용하면 꽤 좋은 결과를 얻었습니다.

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

일부 줄은 그대로 유지됩니다.


설정 후이 방법의 좋은 성공했다 내성 스냅 v.in.ogr @Kantan에 의해 제안 0.00001에 -1 (NO 스냅).
cm1

4

Qgis2.16에서 그 문제에 봉착했지만 GRASS가 @AndreJ와 같은 위상 적으로 올바른 결과를 줄 수 없었습니다.

좋은 해결 방법은 v.generalize.simplify 도구 의 고급 매개 변수에서 v.in.ogr 스냅 공차를 변경하는 것 입니다. 기본값은 -1이며 GRASS에서 스냅되지 않습니다.

여기에 작은 값 (예 : 1e-05m)을 넣으면 스냅이 활성화되고 GRASS는 다각형의 공유 경계를 인식합니다. 그런 다음 단순화는 구멍이없는 위상 적으로 올바른 층을 제공합니다.

참고 : 스냅 공차를 더 높은 값으로 설정하면 원하는 경우 매우 얇은 다각형을 삭제할 수 있도록 다각형을 변경할 수도 있습니다. rmarea를 사용하여 v.clean과 작은 남은 음식을 삭제하기에 충분히 큰 임계 값으로 해당 작업을 수행하면 완료됩니다!


3

먼저 다각형을 선으로 변환

v.clean을 사용하여 토폴로지를 정리하십시오 ( "break"옵션 사용)

당신은 당신의 라인을 단순화

마지막으로 선을 다각형으로 되돌립니다. (다각화 사용)

편집 : 다각형의 속성을 얻으려면 원본 데이터 세트에 다중 부분 다각형이없는 경우 가장 좋은 방법 은 이전 다각형과 단순화 된 다각형의 중심을 가져 와서 가장 가까운 위치를 기준으로 결합하는 것입니다 (중심자는 경계를 약간만 수정하면 많이 움직이지 않습니다)


1
워크 플로가 끝날 수 있지만 몇 단계를 생략하는 것처럼 보입니다. 다각형을 선으로 변환 할 때 선을 인접한 모든 다각형과 연결해야합니다. 그런 다음 단순화 후에 선을 다시 여러 부분 다각형으로 바꿔야합니다. 원본 다각형이 볼록한 경우 중심을 사용하여 원본을 단순화와 일치시킬 수 있습니다 (예 : 원본의 중심이 단순화 된 폴리에 포함 된 경우 일치). 볼록하지 않으면 훨씬 어려울 것입니다.
Andy W

안녕하세요, 저는 radouxju가 제안한 절차를 따랐지만 원래 다각형의 일부를 원래 경계 밖으로 가져옵니다. QGIS에서 선을 인접한 모든 다각형과 어떻게 연결합니까? 웹 응용 프로그램에서 이러한 다각형을 사용할 계획이며 빠른로드를 위해 노드 수를 줄여야합니다. 내가 지금 얻는 것은 좋은 축소이지만 단순화 후에있는 작은 영역을 제거 할 수는 없습니다. 이 문제를 해결하기위한 아이디어는 크게 감사하겠습니다.
David

@ 데이빗. 3 단계, 다각형 선에 문제가있을 수 있습니다. Processing Toolkit에는 "Polygonize"라는 도구가 있으며이 도구를 사용해보십시오. 그래도 Shapely 및 Numpy 패키지를 설치해야한다고 생각합니다. 즉, QGIS-Master에서 "Polygonize"를 작동시킬 수는 없습니다. N.
nhopton

2

다음과 같이 처리 (예 : SEXTANTE) 모델로 문제를 해결할 수 있습니다.

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

스크립트 버전 :

##Simplify polygons=name
##vectorlayer_input=vector
##number_tolerance=number 0.0
##output_layer_alg3=output vector
outputs_0=Processing.runalg("qgis:polygonstolines", vectorlayer_input, None)
outputs_1=Processing.runalg("qgis:simplifygeometries", outputs_0['OUTPUT'], number_tolerance, None)
outputs_2=Processing.runalg("qgis:linestopolygons", outputs_1['OUTPUT'], None)
outputs_3=Processing.runalg("qgis:joinattributestable", outputs_2['OUTPUT'], vectorlayer_input, ID, ID, output_layer_alg3)

참고 : 유일한 제약은 일반적인 필드이어야한다는 것입니다 ID에서 Join attributes table의 출력의 전용 필드이기 때문에 Lines to polygons. 이것이 공통 필드가 모델의 변수 입력이 아닌 이유입니다. 따라서 ID입력 다각형 레이어에서 필드를 사용할 수 있어야합니다.

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