Skip to content

QuadTree(x)

Park Jae Hyun edited this page Nov 18, 2020 · 1 revision

네이버 맵

  • 우리나라(0~17)
  • Zoom(min: 0, max: 22, default: 20) Reference

쿼드트리를 사용하는 이유

  • 개수가 많을 때 격자 모양 처럼 보이는 문제가 있다.
    • 대표값을 정하는 방법
  • Marker기준은 first
  • 앱이 켜지면 전체 QuadTree를 만들고 재사용한다.
  • QuadTree를 CoreData에 저장할 지는 고민
  • 저장하지 않고 켜질때마다 QuadTree가 만들어진다면 Marker위치가 달라질거라 예상
  • Node에 자식들의 총 갯수를 저장해서 O(1)로 갯수 계산

축적

우리나라의 위경도 범위는 124 – 132, 위도범위는 33 – 43 라고 합니다.
북한 제외 위경도 범위는 125 - 132, 위도 범위는 33 - 39로 잡으면 될거 같아요

극동: 경상북도 울릉군의 독도(獨島)로 동경 131° 52′20“, → 131.87222222
극서: 전라남도 신안군의 소흑산도(小黑山島)로 동경 125° 04′, → 125.06666667
극북: 강원도 고성군 현내면 송현진으로 북위 38° 27′00, → 38.45000000
극남: 제주도 남제주군 마라도(馬羅島)로 북위 33° 06′00" → 33.10000000

출처

//위도 경도 객체
let coord = NMGLatLng(lat: 37.5670135, lng: 126.9783740)

0.002 100m쯤 10 / 2^12 = 0.0024 ~ 100m쯤 > 노드가 1600만개 10 / 2^15 = 0.0003 ~ 12m쯤 10 / 2^18 = 0.000038 ~ 1.5m쯤 > 노드 가 4^18 ... 7천만개

root Node(우리나라 바운드)만 잘 잡으면 그 하위는 알아서 1/4계산?

  • 노드가 너무 많아지지 않을까?
let southWest = NMGLatLng(lat: 33, lng: 125)
let northEast = NMGLatLng(lat: 39, lng: 132)
let bounds = NMGLatLngBounds(southWest: southWest, northEast: northEast)

두 마커가 어느 정도 거리가 될 때, 또는 어느 정도 줌이 되었을 때 클러스터링 할것인가?

화면 좌표와 지도 좌표 간 변환

다음은 화면의 (100, 100) 지점을 지도 좌표로 변환하는 예제입니다.

let projection = mapView.projection
let coord = projection.latlng(from: CGPoint(x: 100, y: 100))

다음은 지도의 (37.5666102, 126.9783881) 지점을 화면 좌표로 변환하는 예제입니다.

let point = projection.point(from: NMGLatLng(lat: 37.5666102, lng: 126.9783881))

K-means

  • 계산을 할 때 마다 결과가 달라지는 문제가 있다.

지도에서 현재 표시되는 영역 반환

  • zoomLevel 에 따라 clustering 기준이 되는 쿼드트리 Node의 Level을 달리한다?
  • level의 Node를 다 보여준다?

Map SDK를 활용한 POI Clustering Interaction Dev

기획서

🍎 iOS

😀 이것만은 지켜요🤝

Ground Rules
Code Convention
Branch Strategy
Commit Message

데일리 스크럼

Week 1
Week 2
Week 3
Week 4
Week 5

TroubleShooting

트러블슈팅

학습

Clone this wiki locally