imobile_for_reactnative
Version:
iMobile for ReactNative,是SuperMap iMobile推出的一款基于React-Native框架的移动应用开发工具。基于该开发工具,用户可以使用JavaScript开发语言,开发出在Android和IOS操作系统下运行的原生移动GIS应用,入门门槛低,一次开发,处处运行。
352 lines (306 loc) • 8.4 kB
text/typescript
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)
}