← 글 목록

notes

NaverMap

NaverMap SDK 연동·지도 표시와 마커·좌표 설정 기본 메모.

yarn add react-native-nmap

안드로이드 설정

/android/build.gradle 파일에 아래와 같이 레포지터리를 추가한다.

allprojects {
    repositories {
				(...)

        // 네이버 지도 저장소
        maven {
            url 'https://naver.jfrog.io/artifactory/maven/'
        }

				(...)
    }
}

/android/app/src/main/AndroidManifest.xml 파일에 아래와 같이 레포지터리를 추가한다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.navermaptest">
    <uses-permission android:name="android.permission.INTERNET" />
    (...)
      <meta-data
          android:name="com.naver.maps.map.CLIENT_ID"
          android:value="클라이언트 아이디 입력" /> // <-- 클라이언트 아이디 입력
		(...)
    </application>
</manifest>

IOS 설정

info.plist 에 아래와 같이 발급받은 클라이언트 아이디를 추가해줍니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
(...)
    <key>NMFClientId</key>
    <string>YOUR_CLIENT_ID_HERE</string> //예시) <string>12dvdq98t7</string>
(...)
<dict>
<plist>

내프로젝트/ios/Podfile파일에"pod 'NMapsMap','3.14.1" NMapsMap 버전 추가

require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'

platform :ios, '10.0'

target 'naverMapTest' do
  config = use_native_modules!
	(...)
  pod 'NMapsMap','3.15.0' /// 이 부분! 버젼은 때에 따라 최신화 됨
  (...)
  
end

git-lfs 설치후 pod install

( 참고 )

$ brew install git-lfs
$ cd 프로젝트
$ git-lfs install

$ cd ios/
$ rm -rf Pods/
$ rm Podfile.lock
$ pod install

네이버지도 등록

클라이언트 ID 발급

네이버 지도 모바일 SDK를 사용하려면 다음과 같이 애플리케이션을 등록하고 클라이언트 ID를 발급받아야 합니다.

  • Application 등록을 선택하고 Maps 하위의 Mobile Dynamic Map을 체크합니다.
  • 선택하지 않으면 인증 실패 오류(429)가 발생합니다.
  • iOS Bundle ID에 네이버 지도 SDK를 사용하고자 하는 앱의 번들 ID를 추가하고 등록합니다.
  • 올바르게 입력하지 않으면 인증 실패 오류(401)가 발생합니다.
  • 등록한 애플리케이션의 인증 정보를 선택해 Client ID를 확인합니다.

App.tsx 예시

import NaverMapView, {
  Circle,
  Marker,
  Path,
  Polygon,
  Polyline,
} from 'react-native-nmap';

const App = () => {
  const P0 = {latitude: 37.564362, longitude: 126.977011};
  const P1 = {latitude: 37.565051, longitude: 126.978567};
  const P2 = {latitude: 37.565383, longitude: 126.976292};

  return (
    <NaverMapView
      style={{width: '100%', height: '100%'}}
      showsMyLocationButton={true}
      center={{...P0, zoom: 16}}
      onTouch={e => console.warn('onTouch', JSON.stringify(e.nativeEvent))}
      onCameraChange={e => console.warn('onCameraChange', JSON.stringify(e))}
      onMapClick={e => console.warn('onMapClick', JSON.stringify(e))}>
      <Marker coordinate={P0} onClick={() => console.warn('onClick! p0')} />
      <Marker
        coordinate={P1}
        pinColor="blue"
        onClick={() => console.warn('onClick! p1')}
      />
      <Marker
        coordinate={P2}
        pinColor="red"
        onClick={() => console.warn('onClick! p2')}
      />
      <Path
        coordinates={[P0, P1]}
        onClick={() => console.warn('onClick! path')}
        width={10}
      />
      <Polyline
        coordinates={[P1, P2]}
        onClick={() => console.warn('onClick! polyline')}
      />
      <Circle
        coordinate={P0}
        color={'rgba(255,0,0,0.3)'}
        radius={200}
        onClick={() => console.warn('onClick! circle')}
      />
      <Polygon
        coordinates={[P0, P1, P2]}
        color={`rgba(0, 0, 0, 0.5)`}
        onClick={() => console.warn('onClick! polygon')}
      />
    </NaverMapView>
  );
};