문제

맵 포인트 데이터베이스가 있으며 디스플레이를 한 번에 최대 ~ 50 점으로 표시하는 것으로 제한하고 싶습니다. 사용자가 확대되면 더 많은 포인트가 표시 될 수 있습니다.

현재 결과 세트의 무작위 샘플을 복용하고 있습니다. 빈 구역이있을 수 있기 때문에 갑자기 확대 될 때 포인트를 보여주기 때문에 이것은 좋지 않습니다.

다음 생각은 10x5 그리드를 만들고 결과를 반복 할 수 있다는 것이었다. 그리드의 위치가 비어 있으면 포인트를 표시합니다. 이것은 이전 문제를 해결하지만 사용자에게 집중 영역이 어디에 있는지에 대한 감각을 제공하지는 않습니다. 또한 사용자가 전 세계로 축소하기로 결정하면 매우 느립니다.

지금은 데이터를 정렬하기 위해 공간 알고리즘을 사용하지 않습니다. 내 계획은 먼저 작동하도록 한 다음 빨리 얻는 것입니다. Rtress, KD-Trees 및 쿼드 트리를 조금 읽으면 샘플의 '스마트'하위 집합을 선택하는 데 도움이되는 것을 찾을 수 없었습니다. 이 문제를 아주 쉽게 해결할 수있는 폭의 첫 번째 검색이 있어야합니다.

도움이 되었습니까?

해결책 3

수천 포인트와 오프라인 시간이 충분하기 때문에 데이터를 정렬 할 수있는 분산 계수를 만들기위한 알고리즘을 만들었습니다.

  1. 나는 내 세트에서 임의의 지점으로 시작하여 n = 1의 점수를주고 그것을 추가합니다. 선택된 목록.
  2. 그런 다음 어떤 지점에서나 더 많은 지점을 검색합니다. 선택된 목록.
  3. 나는이 점을 취하고, n + 1의 점수를주고, 그것을 선택된 모든 지점이 선택 될 때까지 2 단계를 반복하십시오.

내지도에서, 나는 범위 필터와 일치하는 모든 지점을 가져 와서 순위 상승으로 정렬합니다. 필터 나 줌에 관계없이 화면에 분산 된 점이 있습니다.

다른 팁

원래 아이디어를 약간 확장하는 것은 어떻습니까? 그리드로 분해 한 다음 밀도 분석을 사용하여 해당 영역의 기능 수에 따라 다르게 크기가 큰 포인트를 만듭니다. 이렇게하면 사용자가 더 큰 (또는 작은) 점을 보면 기능 밀도를 더 시각적으로 알고 있습니다.

더 빨리 만들기 위해 아마도 각 그리드에 대한 임계 값을 설정할 수 있습니다. 카운트가 일정 금액에 도달하면 다음 그리드로 이동하십시오. 이렇게하면 인위적으로 임계 값을 설정하는 포인트를 무시함으로써 "최대"포인트와 속도를 높일 수 있습니다 (데이터의 경험적 분석을 기반으로 결정할 수 있음).

Michael Todd는 좋은 제안을했습니다. 그것을 위해 +1.

(데이터 유형에 따라)지도 지점에 추가 속성을 추가 할 수 있다고 덧붙이고 싶습니다.

예를 들어, 도시의 경우 그 안에 사는 사람들의 양을 추가 할 수 있습니다. 그런 다음 줌 레벨에 따라 특정 크기의 도시 만 보여줍니다. 또는 더 나은 방법은 선택 알고리즘에서 더 높은 점수를 제공하십시오. 빈 지역에서는 여전히 작은 지역을 볼 수 있으며 혼잡 한 지역에서는 대도시 만 볼 수 있습니다.

이 접근법은 모든 줌 레벨에 대해 잘 작동하는 반면, 줌 레벨 당 사전 정의 된 데이터 세트는 개별 단계에서만 작동합니다.

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