KML에서 단순화 (포인트 수를 줄이는 방법) 방법은 무엇입니까?

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

  •  08-07-2019
  •  | 
  •  

문제

나는 비슷한 문제가 있습니다 이 게시물. 내장 된 Google지도에 최대 1000 개의 다각형을 표시해야합니다. 다각형은 SQL 데이터베이스에 있으며, 이와 같이 사용자 정의 httphandler (asp.net)를 사용하여 각각을 즉시 단일 KML 파일로 렌더링 할 수 있습니다. http://alpha.foresttransparency.org/concession.1.kml .

내 (매우 빠른) 개발 기계에서도 수십 개의 모양조차도로드하는 데 시간이 걸립니다. 그래서 실제로 두 가지 질문 :

  1. 특정 줌 레벨을 넘어 서면 오버레이 대신 마커로 마커로 렌더링하는 좋은 전략은 무엇입니까?

  2. 특정 줌 레벨에서 이해하는 것보다 더 많은 점을 표시하지 않도록 다각형 (포인트 수를 줄이기)을 단순화하기위한 공개적으로 사용 가능한 알고리즘이 있습니까?

도움이 되었습니까?

해결책

두 번째 질문 : 당신은 필요합니다 Douglas-Peucker 일반화 알고리즘

다른 팁

첫 번째 질문의 경우, 특정 다각형의 면적을 계산하고 각 줌 레벨을 특정 최소 영역과 관련시킬 수 있으므로 다각형의 사라지거나 줌 수준에 따라 마커가 나타납니다.

두 번째 질문은 Mark Bessey의 제안을 사용합니다.

나는 Aobut KML이 많지 않지만 질문 #2에 대한 일반적인 솔루션은 포인트를 반복하고 특정 크기의 라인 세그먼트를 삭제하는 것과 관련이 있다고 생각합니다. 이로 인해 경우에 따라 "불행한"효과가 발생하지만 비교적 빠르고 쉽게 수행 할 수 있습니다.

나는 두 가지를 추천합니다 .- 만지고있는 다각형을 계산하고 결합합니다. 여기에는 많은 처리와 어려운 수학이 포함되지만 가능하다는 것을 알았습니다. -PNG 형식으로 KML을 사용하는 대신 자신만의 오버레이를 만들고 이전 제안서에서 결합합니다. 많은 PNG를 만들어야하지만 클라이언트에게는 빨리 타 오르고 있습니다.

행운을 빕니다 :)

조금 전에 #2 질문에 대한 해결책이 필요했고 사용 가능한 라인 단순화 알고리즘 중 일부를 살펴본 후 직접 만들었습니다.

프로세스는 간단하고 잘 작동하는 것처럼 보이지만 올바르게 구현하지 않으면 약간 느릴 수 있습니다.

P[0..n] 당신의 포인트 배열은 T[n] 지점별로 형성된 삼각형으로 정의됩니다 P[n-1], P[n], P[n+1] Max 이 라인을 줄이려고하는 포인트의 수입니다.

  1. 가능한 모든 삼각형의 면적을 계산하십시오 T[1..n-1] 세트에서.
  2. 삼각형을 선택하십시오 T[i] 가장 작은 지역
  3. 포인트를 제거하십시오 P[i] 삼각형을 본질적으로 평평하게합니다
  4. 영향을받는 삼각형의 영역을 다시 계산하십시오 T[n-1], T[n+1]
  5. 포인트 수가 있으면 2 단계로 이동하십시오. Max
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top