Code Monkey home page Code Monkey logo

rnkakaomaps's Introduction

Project Summary

rnkakaomaps React-native kakao-maps module for Android

  • 버전 : 0.0.1

  • 개발기간

    • 기획 및 API 결정 / UI 디자인 / 이미지 선별 및 수정 / 기본세팅 및 프로젝트 구조, 라이브러리 설치 : 1일
    • 코드작성 : 3일
    • 테스트 및 리팩토링: 3일
  • 특징 및 기능

    • 카카오맵을 React-Native에서 사용하기 위한 모듈
    • DaumMap SDK 1.4.1.0 , 카카오맵 안드로이드 API를 사용하여 개발
    • https://apis.map.kakao.com/download/android/sdk/Android_DaumMap_SDK_1.4.1.0.zip
    • 클러스터링 기능을 커스텀으로 개발 (k-means 알고리즘 사용, 효율을 위해 안드로이드단에서 개발)
    • WebView 사용시 보다 원할한 동작 (확대/축소, 핀치, 드래그 등등)
    • 타입스크립트
  • Project Common Dependencies

    React RN Typescript DaumMap SDK





시작 화면

1_intro

  • DaumMap SDK
  • 성능모니터상 안드로이드 에뮬레이터에서도 쾌적하게 동작
  • 안드로이드 에뮬레이터에서 실행 후 뷰까지 12초, 리액트 네이티브 자체 로드가 빠른편이 아니기 때문에 큰 문제는 없다고 생각.
  • 갤럭시노트9 기준 최초 로드시 5 ~ 6초, 앱 완전 종료 후 다시 실행시 2초이내 실행 확인 (디바이스에 따라서 처리 속도가 다를듯)





맵스타일 변환

2_change_map_style

  • sdk에서 제공하는 맵스타일 변화 기능을 리액트 네이티브 단에서 처리





맵 마커 클러스터링

  • 클러스터링 화면 (완성 화면)
    3_clustering
  • K-Means 알고리즘을 적용하여 개발
  • 화면의 중점이나, 확대/축소값이 변경 되었을 경우 처리가 되도록 개발
  • 집단의 크기별 마커이미지 차이를 두고, 선택시 몇개의 마커가 존재하는지 표시함.
  • 문제점 1: 내장 MapCircle 를 활용하여 최적화처리를 시도 하였으나, MapCIrcle이 정상적으로 표시되지 않음,
  • 해결 1: png 이미지로 크기별 커스텀 마커를 제작.
  • 문제점 2: 마커 선택시 기본마커와 말풍선으로 변경됨
  • 해결 2: Time solves
  • 클러스터링 알고리즘 (개발중 테스트 화면)
    3-1_boundary_algorithum
  • 화면상의 5점의 무게중심(Centroid)을 선택하여 중심과 가까운 마커들의 좌표끼리 군집화 처리
  • 문제점 : 중점과 상대적 먼거리에 마커들이 모여 있을 경우 무게중심과 큰 차이가 발생.
  • 개선 : 바운더리API를 사용하여 현재 화면상의 마커들의 위치들 중에서 랜덤하게 무게중심을 선택하는 것으로 변경.
  • 유클리드 거리 / 맨하튼 거리 알고리즘 둘다 테스트 한 결과, 공식의 복잡도에 비해 차이가 크게 없음.
  • 표본수(365개)가 너무 작아서 그런듯.
  • 상호작용
    3-2_boundary_callout
  • 해당 마커의 위치와 관련된 위치들이 몇개 존재하는지 표시





맵마커 최적화

4_boundary_loading

  • getMapPointBounds() + getPOIItems() 조합으로 개발
  • 화면상의 바운더리를 값을 마커 좌표와 비교하여 해당 마커만 표시하도록 처리
  • 일정 조건에서 이전 바운더리 백업을 사용하여 마커 계산 최적화 처리





기타 기능

5_location_change device_deeplink

  • 리액트네이티브단과 상호작용 이벤트 처리
  • 지정 장소로 위치 이동
  • 중앙값 , 확대/축소 값 공유
  • Deep link 처리, 플레이 스토어 연결, 카카오맵 어플로 "맛집" 검색요청





참고문서

후기 및 계획

  • 리액트 네이티브에서 사용하기 위한 맵 모듈 검색 중, 카카오맵 모듈은 없어서 개발시작.
  • 카카오맵 안드로이드 SDK는 2019년 버젼을 사용하고 있음. (react-native-daummap이 업데이트가 없는 이유인듯)
  • 딜레이 및 깜빡임 현상은 실기에서는 나타나지 않음.
  • jniLibs 폴더는 android/app/src/main/ 에 복붙헤야 함. (공식문서와 다름)
  • 안드로이드 에뮬레이터에서 실행시 *.so 라이브러리 찾을 수 없다는 에러발생
  • 원인 : 현재 daumMap SDK는 x86, x64를 지원하지 않음. (실기에서는 동작하는 이유)
  • 해결 : build.gradle -> 빌드시 ndk.abiFilters "armeabi-v7a", "arm64-v8a" 로 제한
  • MapCircle 사용시 에뮬레이터에서는 이미지가 화려하게 깨져보이는 현상 발생 -> 커스텀 마커이미지로 변경
  • 추가기능 구현 검색, 리버싱 변환은 시간날때 적용 예정

rnkakaomaps's People

Contributors

keyboardshotgun avatar

Stargazers

Dev.oni avatar jDevH avatar

Watchers

jDevH avatar  avatar

rnkakaomaps's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.