-
Notifications
You must be signed in to change notification settings - Fork 5
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))
- 계산을 할 때 마다 결과가 달라지는 문제가 있다.
- zoomLevel 에 따라 clustering 기준이 되는 쿼드트리 Node의 Level을 달리한다?
- level의 Node를 다 보여준다?