UNPKG

imobile_for_reactnative

Version:

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

352 lines (306 loc) 8.4 kB
import {NativeModules, NativeEventEmitter, EmitterSubscription } from 'react-native' import {EventConst} from '../../constains/index' import { Point2D } from '../data/SData' const SNavigation = NativeModules.SNavigation const nativeEvt = new NativeEventEmitter(SNavigation) /** 导航状态监听 */ export interface NaviListener { /** 导航开始回调 */ onStartNavi(): void /** 导航结束回调 */ onStopNavi(): void /** 导航抵达终点回调 */ onArrivedDestination(): void } /** 路径分析数据参数 */ interface AnalyzeData { /** 导航数据集 */ networkDataset: {datasourceAlias: string, datasetName: string}, /** 转向数据集 */ turnDataset?: {datasourceAlias: string, datasetName: string}, /** 高程点数据集 */ datasetPoint?: {datasourceAlias: string, datasetName: string}, /** 导航模型内存文件路径 */ modelPath: string } /** 路径分析起终点参数 */ interface AnalyzePoints { /** 路径规划的起点 */ startPoint: Point2D /** 路径规划的终点 */ destinationPoint: Point2D /** 途经点 */ wayPoint?: Point2D[] } /** 路径分析结果 */ export interface RouteAnalyzeResult { /** 结果路径的点串 */ route: NaviRoute, /** 结果路线信息 */ naviPath: NaviPath } /** 路径分析结果点串 */ export type NaviRoute = Point2D[] /** 路径分析结果路线信息 */ export interface NaviPath { /** 路线总长度 */ length: number /** 路线总耗时 */ time: number /** 路径分析结果每条路径的信息 */ naviStep: NaviStep[] } /** 路径分析结果每条路径的信息 */ export interface NaviStep { /** 道路名称 */ name: string /** 道路长度,单位m */ length: number /** 道路时间,单位分钟 */ time: number /** 路段行驶速度 */ speed: number /** 路口点 */ point: Point2D /** * 转向类型 * 直行 0 * 左前转弯 1 * 右前转弯 2 * 左转弯 3 * 右转弯 4 * 左后转弯 5 * 右后转弯 6 * 调头 7 * 右转弯绕行至左 8 * 直角斜边右转弯 9 * 环岛 10 * 出环岛 11 * 目的地 12 * 电梯上行 13 * 电梯下行 14 * 扶梯上行 15 * 扶梯下行 16 * 楼梯 上行 17 * 楼梯下行 18 * 到达途经点 19 */ dirToSwerve: 0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19 } let naviStartListener: EmitterSubscription | null = null let naviStopListener: EmitterSubscription | null = null let naviArriveDestListener: EmitterSubscription | null = null /** 添加导航回调 */ export function setNaviListener(listener?: NaviListener): void { naviStartListener?.remove() naviStopListener?.remove() naviArriveDestListener?.remove() naviStartListener = listener ? nativeEvt.addListener(EventConst.NAVIGATION_START, listener.onStartNavi) : null naviStopListener = listener ? nativeEvt.addListener(EventConst.NAVIGATION_STOP, listener.onStopNavi) : null naviArriveDestListener = listener ? nativeEvt.addListener(EventConst.NAVIGATION_ARRIVE, listener.onArrivedDestination) : null } /** * 设置路径分析需要的数据集和模型文件路径 */ export function setRouteAnalyzeData(data: AnalyzeData): Promise<boolean> { return SNavigation.setRouteAnalyzeData(data) } /** * 设置路径分析的起点,终点和途径点 */ export function setRouteAnalyzePoints(points: AnalyzePoints): Promise<boolean> { return SNavigation.setRouteAnalyzePoints(points) } /** * 执行路径分析。 * @throws 许可异常 */ export function routeAnalyst(): Promise<RouteAnalyzeResult | null | undefined> { return SNavigation.routeAnalyst() } /** * 开始引导。 * @param mode 引导状态的值为[0,1,2,3],其分别表示执行真实导航、执行模拟导航、执行定位点巡航、执行步行导航。 * @throws 许可异常 */ export function startGuide(mode: 0 | 1 | 2 | 3): Promise<boolean> { return SNavigation.startGuide(mode) } /** 停止导航 */ export function stopGuide(): Promise<boolean> { return SNavigation.stopGuide() } /** 当前是否在引导过程中。*/ export function isGuiding(): Promise<boolean> { return SNavigation.isGuiding() } /** 清除路径分析结果 */ export function clearPath(): Promise<boolean> { return SNavigation.clearPath() } /** * 设置导航时是否可以移动 * @param enable 是否可以移动 */ export function enablePanOnGuide(enable: boolean): Promise<boolean> { return SNavigation.enablePanOnGuide(enable) } /** 生成路网数据集*/ export function buildNetwork(param: { /** 源线数据集 */ srcLineDataset: {datasourceAlias: string, datasetName:string}, /** * 要生成的网络数据集所在数据源和数据集名 * 网络数据集名称,要保证在25个字符以内 */ targetNetworkDataset: {datasourceAlias: string, datasetName: string}, /** 源线数据需要生成的字段,为空则默认包括所有字段 */ fieldNames?: string[] }): Promise<boolean> { return SNavigation.buildNetwork(param) } /** 生成导航模型snm */ export function createModel(param: { /** 网络数据集 */ networkDataset: {datasourceAlias: string, datasetName: string}, /** 道路名称字段, 默认为 ”RoadName“ */ roadNameField?: string /** 生成的snm文件所在路径 */ modelPath: string }): Promise<boolean> { return SNavigation.createModel(param) } /** * 拓扑编辑 线平滑 * @param params * { * id, 线id * smooth, 平滑系数 * datasourceName, 数据源名称 * datasetName, 数据集名称 * } */ export function smoothLine(params: { datasourceName: string datasetName: string /** 线id */ id: number /** 平滑系数 */ smooth: number }): Promise<boolean> { return SNavigation.smoothLine(params) } /** * 拓扑编辑 点打断线 * @param params * { * id, 线id * point, 线上点(屏幕点) * datasourceName, 数据源名称 * datasetName, 数据集名称 * } */ export function pointSplitLine(params: { datasourceName: string datasetName: string /** 线id */ id: number /** 线上点(屏幕点) */ point: Point2D }): Promise<boolean> { return SNavigation. pointSplitLine(params) } /** * 拓扑编辑 延长线 * @param params * { * id2, 要延长的线id * id1, 目标线id * datasourceName, 数据源名称 * datasetName, 数据集名称 * } */ export function extendLine(params: { datasourceName: string datasetName: string /** 线id */ id1: number /** 要延长的线id */ id2: number }): Promise<boolean> { return SNavigation.extendLine(params) } /** * 拓扑编辑 线打断线 * @param params * { * id1, 线1id * id2, 线2id * datasourceName, 数据源名称 * datasetName, 数据集名称 * } */ export function lineSplitByLine(params: { datasourceName: string datasetName: string /** 线1id */ id1: number /** 线2id */ id2: number }): Promise<boolean> { return SNavigation.lineSplitByLine(params) } /** * 拓扑编辑 线修剪 * @param params * { * id2, 要修剪的线id * id1, 目标线id * datasourceName, 数据源名称 * datasetName, 数据集名称 * } */ export function trimLine(params: { datasourceName: string datasetName: string /** 目标线id */ id1: number /** 要修剪的线id */ id2: number }): Promise<boolean> { return SNavigation.trimLine(params) } /** * 拓扑编辑 重采样线 * @param params * { * id, 线id * datasourceName, 数据源名称 * datasetName, 数据集名称 * } */ export function resampleLine(params: { datasourceName: string datasetName: string /** 线id */ id: number }): Promise<boolean> { return SNavigation.resampleLine(params) } /** * 拓扑编辑 变方向 * @param params * { * id, 线id * datasourceName, 数据源名称 * datasetName, 数据集名称 * } */ export function changeLineDirection(params: { datasourceName: string datasetName: string /** 线id */ id: number }): Promise<boolean> { return SNavigation.changeLineDirection(params) }