- naver map api는 마커가 200개 이상 찍힐 때 지도가 버벅일 정도로 성능이 저하됨을 체감한다.
- 일정 수준 이상으로 축소하는 경우, 군집되어 부분의 마커만을 표시할 필요가 있었다.
- 솔직히 naver map api에서 제공하는 마커 클러스터링을 최대한 활용해보려고 했으나, 내 수준에는.. api 예제가 너무 복잡하게 나와 있어서 여러방면으로 시도해봤으나, 잘 적용되지 않았다. 그래서 직접 마커 클러스터링을 구현해보기로 했다.
Object.values
를 통해 값을 추출하여 배열화시키기.getSpotByPosition
api는 위치 정보를 기반으로 지정한 반경 n km 야영장 데이터를 받아옴.데이터가 반환되면 마커를 찍는 함수가 호출되며, list 매개변수로 야영장 데이터를 보내게 된다.
줌 레벨이 10 이하인 경우, 야영장 배열에 map을 사용하여, 요소를 시/도로 반환한 배열에 Set을 활용하여 중복값을 없앤다. > doNmArr
ex)
[서울시,서울시, 강원도, 전라남도,전라북도,경상남도,경상남도]
->
[서울시,강원도,전라남도,전라북도,경상남도]
doNmArr
배열에 reduce를 활용하여 객체의 key로 doNmArr
의 요소를 활용하고 그 value로 매개변수로 전달받은 전체 야영장 데이터에 filter 메서드를 활용하여 시/도를 비교하여 넣어준다.
reduce를 활용하여 생성한 객체에 Object.values를 적용하여 얻은 배열에는 시/도 단위로 구분된 데이터로 각 요소가 구성된다.
markerHtml
함수가 있는 걸 볼 수 있다. morph
메서드를 활용한다. 직관적인 표현을 위해 마커 클러스팅이라고 했지만, 단순히 데이터를 바꿔서 띄우는 것과 다를 바가 없는 알고리즘인 것이 아쉽다. naver map api를 활용하면 마커 배열을 활용하여 자동적으로 클러스터링이 되는 것을 확인할 수 있는데, 이 부분을 한번 다시 고려해보고 싶다.
과도한 서버 통신. 지금 구현된 코드는 줌이 10이하인 걸 감지하면 위의 연산을 모두 실행하게 되는데 zoom level이 11>10은 문제가 없지만 10>10,10>9 같이 연산을 다시할 필요가 없는 경우에도 내 위치 상태가 변경되면 무조건 연산을 실행하기 때문에 쓸데없이 데이터를 받아온다.
또한, 지금 전국 야영장 총 데이터가 3천개 정도로 많지 않은 양이기 때문에 위의 연산이 빠른 속도로 되는 것 뿐이지 예를 들어 범죄율, 구매량 등 데이터의 규모가 커질수록 위에서 적용한 방식은 효율적이지 못하다.