본 저장소는 IMSDK를 보다 쉽게 적용하기 위한 튜토리얼 프로젝트를 제공합니다.
imsdk.aar
파일을 프로젝트 내app/libs/
안에 넣어줍니다.
mapdata.json
파일을 프로젝트 내app/src/main/assets/
안에 넣어줍니다.
- 필수 권한을 추가합니다
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
- 라이브러리를 탐색하기 위하여 아래의 항목을 추가합니다.
allprojects {
repositories {
google()
jcenter()
flatDir {
dirs 'libs'
}
}
}
- Android SDK 의 최소버전을 설정합니다.
minSdkVersion 24
- IMSDK 에서 사용된 필수 Dependency 항목을 추가합니다.
dependencies {
// Kotlin
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
// Gson
implementation 'com.google.code.gson:gson:2.8.5'
// RxJava2
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.11'
implementation 'io.reactivex.rxjava2:rxkotlin:2.4.0'
// IMSDK
implementation 'com.dabeeo.imsdk:imsdk-v1.00.00-release:1.00.00@aar'
}
- 자바 8 이상을 사용하도록 설정합니다.
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
지도 불러오기
Layout에 MapView 를 추가합니다.
<com.dabeeo.imsdk.map.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:frameRate="60.0"
app:renderMode="RENDER_WHEN_DIRTY" />
Callback 을 생성합니다.
private final MapCallback mapCallback = new MapCallback() {
@Override
public void onSuccess(List<FloorInfo> list) {
// 지도 불러오기에 성공하였을 때 호출됩니다.
// 지도에 포함된 층 데이터가 전달됩니다.
}
@Override
public void onError(Exception e) {
// 지도 불러오기에 실패하였을 때 호출됩니다.
}
@Override
public void changeFloor(int floor) {
// 지도의 층이 변경되었을 때 호출됩니다.
// 변경된 층의 floorLevel 값이 전달됩니다.
}
@Override
public void onClick(double x, double y, Poi poi) {
// 지도내에서 Poi 클릭 시 호출됩니다.
// 좌표와 Poi 데이터가 전달됩니다.
}
@Override
public void onLongClick(double x, double y, Poi poi) {
// 지도내에서 롱클릭 시 호출됩니다.
// 좌표와 Poi 데이터가 전달됩니다.
}
};
JSON 파일로 지도를 로드합니다.
mapView.syncMapDataByJson("mapdata.json", mapCallback);
지도 제어
지도 확대/축소
// 지도를 한 단계 확대합니다.
mapView.zoomIn();
// 지도를 한 단계 축소합니다.
mapView.zoomOut();
지도 내 Poi 데이터 가져오기
// 지도 내 모든 Poi 객체를 가져옵니다.
mapView.getPois();
// 지도 내 모든 이동수단 타입을 지닌 Poi 객체를 가져옵니다.
mapView.getTransportationPos();
지도 이동/회전
// 지정된 좌표로 지도중심점을 이동시킵니다.
mapView.moveToPosition(x, y);
// 지정된 각도만큼 지도를 회전시킵니다.
mapView.rotateToAngle(angle);
층 변경하기
// 지도의 층을 변경합니다.
// floorLevel 값은 FloorInfo, Poi 데이터에 포함되어 있습니다.
mapView.setFloor(floorLevel);
지도 모드 변경
// 지도를 2D/3D 모드로 전환합니다.
// true : 2D 모드
// false : 3D 모드
mapView.changeCamera(true);
마커 표시하기
미리 정의된 마커
// 지도상의 좌표 (x, y) 와 층을 지정하여 미리 정의된 마커를 표시합니다.
// 시작위치를 나타내는 마커
mapView.drawStartMarker(x, y, floorLevel);
// 도착위치를 나타내는 마커
mapView.drawEndMarker(x, y, floorLevel);
// 현재위치를 나타내는 마커
mapView.drawNavigationMarker(x, y, floorLevel);
사용자 정의 마커
// 리소스를 이용하여 지도에 사용자 정의 마커를 추가합니다.
mapView.addMarker(R.drawable.marker, x, y, floorLevel);
mapView.drawMarker();
마커 제거
// 지도상에 있는 모든 마커를 제거합니다.
mapView.removeMarker();
길찾기 요청
Callback 을 생성합니다.
private final NavigationListener navigationListener = new NavigationListener() {
@Override
public void onPathResult(PathResult pathResult) {
// 길찾기 요청이 완료되었을 때 호출됩니다.
// 탐색된 Path 데이터가 전달됩니다.
}
@Override
public void onStart() {
// 내비게이션이 시작될 때 호출됩니다.
}
@Override
public void onFinish() {
// 내비게이션이 완료되었을 때 호출됩니다.
}
@Override
public void onCancel() {
// 내비게이션을 취소하였을 때 호출됩니다.
}
@Override
public void onUpdate(Route route, Path path, NodeData nodeData, Vector3 vector3) {
// 내비게이션이 진행되고 있을 때 매번 호출됩니다.
// 현재 진행중인 Path 데이터가 전달됩니다.
}
@Override
public void onRescan() {
// 내비게이션이 진행 중 재탐색이 되었을 때 호출됩니다.
}
@Override
public void onError(IMError error) {
// 길찾기 요청을 실패하였을 때 호출됩니다.
// 에러메시지가 전달됩니다.
}
};
시작위치와 도착위치 및 이동수단을 지정하여 길찾기를 요청합니다.
// 출발 위치와 해당 층을 설정합니다.
Vector3 startPosition = new Vector3(x, y, z);
Location startLocation = new Location(startPosition, floorLevel, "시작 위치");
// 도착 위치와 해당 층을 설정합니다.
Vector3 endPosition = new Vector3(x, y, z);
Location endLocation = new Location(endPosition, floorLevel, "도착 위치");
// 경유 위치 목륵을 생성합니다.
List<Location> waypoins = new ArrayList<>();
// 경유지가 존재한다면 추가시키고 없으면 빈 데이터로 설정합니다.
PathRequest pathRequest = new PathRequest(startLocation, endLocation, waypoints, TransType.ALL);
mapView.findPath(pathRequest, navigationListener);
내비게이션 기능
모의보행
// 모의보행을 시작합니다.
mapView.startNavigationPreview();
// 모의보행을 종료합니다.
mapView.cancelNavigationPreview();
내비게이션
// 내비게이션을 시작합니다.
mapView.startNavigation();
// 내비게이션을 종료합니다.
mapView.cancelNavigation();
UWB 측위
위치 초기화
// 위치 데이터를 초기화합니다.
private final LocationCallback locationCallback = new LocationCallback() {
@Override
public void onError(Exception e) {
}
@Override
public void onChangeFloor(int floor) {
}
@Override
public void initLocation(double x, double y, double angle, int floor) {
}
@Override
public void onLocation(double x, double y, double angle, int floor) {
}
@Override
public void onLocationStatus(LocationStatus locationStatus) {
}
};
LocationSourceUwb locationSourceUwb = new LocationSourceUwb();
mapView.initPosition(locationSourceUwb, locationCallback);
> 위치 트래킹
```java
// 위치 트래킹을 시작합니다.
if (locationSourceUwb != null) {
locationSourceUwb.pushLocationData(x, y, 0.0, currentFloor);
}