UNPKG

imobile_for_reactnative

Version:

iMobile for ReactNative,是SuperMap iMobile推出的一款基于React-Native框架的移动应用开发工具。基于该开发工具,用户可以使用JavaScript开发语言,开发出在Android和IOS操作系统下运行的原生移动GIS应用,入门门槛低,一次开发,处处运行。

140 lines (105 loc) 3.6 kB
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) }