GIS 데이터를 지능적으로 저하 시키거나 부드럽게하는 방법 (일부 다각형 단순화)?

StackOverflow https://stackoverflow.com/questions/1849928

문제

나는 미국 카운티지도를 자세히 설명했다 호랑이 라인 데이터 세트. 데이터를 샘플, 매끄럽게 또는 저하시키면서 지리적 특징을 나타내는 지리적 특징을 나타 내기 위해 똑 바르고, 더 큰 상자, "시끄러운"모양이되도록하는 방법은 무엇입니까?

샘플링은 효율적으로 수행 할 수 있거나 병렬 데이터 세트를 생성하고 저장할 수있는 경우 렌더링 시간에 발생할 수 있습니다. 나는 사용 중입니다 Postgis, 및 라인은 생성 된 다중 폴리 라인입니다 shp2pgsql - 그러나 당신이 삐걱 거리는 선을 취하고 인간 통역사와 거의 동일한 의미의 부드러운 라인으로 줄이는 솔루션은 매우 유용합니다.

도움이 되었습니까?

해결책

포인트를 단순히 던지는 문제는 원래 다각형의 모양을 빠르게 왜곡 할 수 있다는 것입니다. 더 나은 접근법은 다른 방향에서 오는 것입니다. 다각형의 기본 근사치로 시작한 다음 복잡한 모양을 향해 위쪽으로 개선하십시오.

이 접근법의 훌륭한 예는 다음과 같습니다 Douglas-Puecker 알고리즘. 당신은 전체 다각형에서 그려진 두 개의 정점으로 시작합니다. 처음 두 정점 사이에 그려진 가장자리에서 가장 먼 곳을 선택하여 세 번째 정점을 추가하십시오. 원래 다각형과 충분히 닮은 것이있을 때까지 포인트를 계속 추가하십시오.

다른 팁

Douglas-Peucker는 확실히 올바른 접근법입니다. PostGIS 및 QGIS에서 IT 구현에 액세스 할 수있는 간단한 방법이 있습니다. 목표는 다음과 같은 것으로 시작하는 것입니다.

alt text

그리고 다음과 같은 것으로 끝납니다.

alt text

Postgis에서 Douglas-Peucker는 AS로 구현됩니다 simplify, 구문은 상세합니다 여기 bostongis.org에서,, 일부 변형은 다음과 같습니다.

SELECT transform(simplify(transform(the_geom, 2249), 500),4326) from the_geo_table

이것은 전체 국가 데이터 세트에서도 매우 잘 작동했으며, 기본 데이터가 잘못 되었기 때문에 몇 가지 오류가 발생했습니다. 또한 QGIS에서 메뉴 항목이 있음이 밝혀졌습니다. Tools > Geometry Tools > Simplify Geometries 형상의 단순화 된 모양 파일을 내보내고 현재 프로젝트에 레이어로 추가합니다.

이것은 매우 근본적인 도구 세트이며 너무 낮은 A 레벨에서 질문을했지만 기본 수학을 배우는 것이 좋았지 만 그에 대한 좋은 설명이 있습니다. 여기 : http://www.mappinghacks.com/code/polylinereduction/, 너무 필요하지 않은 샘플 코드와 함께!

qgis 대신 gog2ogr을 사용하는 것이 좋습니다. 다각형을 삭제하지 않습니다!

ogr2ogr output.shp input.shp -simplify 0.0001

간단한 반복 스무딩 알고리즘은 다음과 같습니다.

중간 지점에 교차점이없고 두 외부 지점 사이의 직접 경로의 작은 임계 값 각도 내에있는 경우 모든 경로의 세 가지 순차적 지점에 대해 제거하십시오.

만족할 때까지 반복하십시오.

Visvalingam의 알고리즘을 시도 할 수도 있습니다. 다음은 해당 알고리즘에 대한 훌륭한 설명입니다.

당신은 또한 사용할 수 있습니다 simplify.js 조합을 사용합니다 Douglas-Peucker 및 방사형 거리 알고리즘. 많은 포트에 대한 링크가 있습니다. Github 프로젝트

@unmounted의 답변이 정확하지만 제안을 한 번 더 추가하고 싶습니다.

postgis에서 st_simplify 대신 항상 함수 st_simplifypreservetopology를 사용하십시오. 둘 다 동일한 기본 알고리즘 (Douglas-Peucker)을 사용하지만 전자는 단순화를 피하여 유효하지 않은 형상을 초래할 수 있습니다. 예를 들어, st_simplify는 자체가 교차하는 기하학을 초래할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top