imobile_for_reactnative
Version:
iMobile for ReactNative,是SuperMap iMobile推出的一款基于React-Native框架的移动应用开发工具。基于该开发工具,用户可以使用JavaScript开发语言,开发出在Android和IOS操作系统下运行的原生移动GIS应用,入门门槛低,一次开发,处处运行。
140 lines (105 loc) • 3.6 kB
text/typescript
import {NativeModules, NativeEventEmitter, EmitterSubscription } from 'react-native'
import {EventConst} from '../../constains/index'
import { Point2D } from '../data/SData'
import { NaviPath, NaviListener } from './SNavigation'
const SIndoorNavigation = NativeModules.SIndoorNavigation
const event = new NativeEventEmitter(SIndoorNavigation)
interface AnalyzeData {
/** 设置室内地图所在的数据源。必选。 */
datasourceAlias: string
}
interface AnalyzePoints {
/** 起点与楼层ID */
startPoint: IndoorPoint
/** 目的点与楼层ID */
destinationPoint: IndoorPoint
/** 途经点与楼层ID */
wayPoint?: IndoorPoint[]
}
interface IndoorRouteAnalyzeResult {
naviPath: NaviPath
}
type IndoorPoint = Point2D & {floorID: string}
let floorChangeListener: EmitterSubscription | null = null
let naviStartListener: EmitterSubscription | null = null
let naviStopListener: EmitterSubscription | null = null
let naviArriveDestListener: EmitterSubscription | null = null
/** 设置楼层变化监听 */
export function setFloorChangeListener(listener?: (id: string) => void): void {
floorChangeListener?.remove()
floorChangeListener = listener ? event.addListener(EventConst.CURRENT_FLOORID, listener) : null
}
/** 添加导航回调 */
export function setNaviListener(listener?: NaviListener): void {
naviStartListener?.remove()
naviStopListener?.remove()
naviArriveDestListener?.remove()
naviStartListener = listener ? event.addListener(EventConst.NAVIGATION_INDOOR_START, listener.onStartNavi) : null
naviStopListener = listener ? event.addListener(EventConst.NAVIGATION_INDOOR_STOP, listener.onStopNavi) : null
naviArriveDestListener = listener ? event.addListener(EventConst.NAVIGATION_INDOOR_ARRIVE, listener.onArrivedDestination) : null
}
/**
* 设置路径分析需要的数据源
*/
export function setRouteAnalyzeData(data: AnalyzeData): Promise<boolean> {
return SIndoorNavigation.setRouteAnalyzeData(data)
}
/**
* 设置路径分析的起点,终点和途径点
*/
export function setRouteAnalyzePoints(points: AnalyzePoints): Promise<boolean> {
return SIndoorNavigation.setRouteAnalyzePoints(points)
}
/**
* 最佳路径分析
* @throws 许可异常
*/
export function routeAnalyst(): Promise<IndoorRouteAnalyzeResult | null | undefined> {
return SIndoorNavigation.routeAnalyst()
}
/**
* 开始导航
*
* @param mode 0:真实导航, 1:模拟导航, 2:巡航, 3:步行导航
* @throws 许可异常
*/
export function startGuide(mode: 0 | 1 | 2 | 3): Promise<boolean> {
return SIndoorNavigation.startGuide(mode)
}
/** 停止导航 */
export function stopGuide(): Promise<boolean> {
return SIndoorNavigation.stopGuide()
}
/** 是否在导航中 */
export function isGuiding():Promise<boolean> {
return SIndoorNavigation.isGuiding()
}
/** 清除路径分析结果 */
export function clearPath(): Promise<boolean> {
return SIndoorNavigation.clearPath()
}
/**
* 设置导航时是否可以移动
* @param enable 是否可以移动
*/
export function enablePanOnGuide(enable: boolean): Promise<boolean> {
return SIndoorNavigation.enablePanOnGuide(enable)
}
/**
* 初始化楼层控件
*/
export function initFloorList(): Promise<boolean> {
return SIndoorNavigation.initFloorList()
}
/**
* 获取当前楼层ID
*/
export function getCurrentFloorID(): Promise<string> {
return SIndoorNavigation.getCurrentFloorID()
}
/**
* 设置当前楼层ID
*/
export function setCurrentFloorID(floorID: string): Promise<boolean> {
return SIndoorNavigation.setCurrentFloorID(floorID)
}