UNPKG

rn_supermap

Version:

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

346 lines (315 loc) 12 kB
/********************************************************************************* Copyright © SuperMap. All rights reserved. Author: Wang zihao E-mail: pridehao@gmail.com **********************************************************************************/ import {NativeModules,DeviceEventEmitter,NativeEventEmitter,Platform} from 'react-native'; let TN = NativeModules.JSNavigation; import GeoLine from './GeoLine'; const nativeEvt = new NativeEventEmitter(TN); /** * @class TraditionalNavi * @description 导航类,导航类提供路径分析和引导功能。(该类对象只能通过mapControl类下方法获取) */ export default class TraditionalNavi { /** * 链接导航路网数据 * @memberOf TraditionalNavi * @param dataPath - 数据存储路径 * @returns {Promise.<Promise.boolean>} */ async connectNaviData(dataPath){ try{ var {success} = await TN.connectNaviData(this._SMTraditionalNaviId,dataPath); return success; }catch (e){ console.log(e); } } /** * 执行路径分析。 * 路径分析模式的值为[0,1,2,3],其分别表示推荐模式、时间最快模式、距离最短模式、和最少收费模式。 * @memberOf TraditionalNavi * @param mode - 路径分析模式。 * @returns {Promise.<number>} 路径分析成功返回1,路径分析失败返回0,起点周围无道路返回-1,终点周围无道路返回-2。 */ async routeAnalyst(mode){ try{ var {result} = await TN.routeAnalyst(this._SMTraditionalNaviId,mode); return result; }catch (e){ console.log(e); } } /** * 设置路径规划的起点。 * @memberOf TraditionalNavi * @param x - 起点经度坐标(度)。 * @param y - 起点纬度坐标(度)。 * @param map - 导航所属地图对象 * @returns {Promise.<void>} */ async setStartPoint(x,y,map){ try{ await TN.setStartPoint(this._SMTraditionalNaviId,x,y,map._SMMapId); }catch (e){ console.log(e); } } /** * 设置路径规划的终点。 * @memberOf TraditionalNavi * @param x - 终点经度坐标(度)。 * @param y - 终点纬度坐标(度)。 * @param map - 导航所属地图对象 * @returns {Promise.<void>} */ async setDestinationPoint(x,y,map){ try{ await TN.setDestinationPoint(this._SMTraditionalNaviId,x,y,map._SMMapId); }catch (e){ console.log(e); } } /** * 开始导航。 * 引导状态的值为[0,1,2],其分别表示执行真实导航、执行模拟导航、执行定位点巡航。 * @memberOf TraditionalNavi * @param status - 引导状态。 * @returns {Promise.<void>} */ async startGuide(status){ try{ var {guiding} = await TN.startGuide(this._SMTraditionalNaviId,status); return guiding; }catch (e){ console.log(e); } } /** * 添加途经点 * @memberOf TraditionalNavi * @param {number} x - 途经点x坐标 * @param {number} y - 途经点y坐标 * @returns {Promise.<Promise.boolean>} */ async addWayPoint(x,y){ try{ var {added} = await TN.addWayPoint(this._SMTraditionalNaviId,x,y); return added; }catch (e){ console.log(e); } } /** * 停止引导。 * @memberOf TraditionalNavi * @returns {Promise.<Promise.boolean>} */ async stopGuide(){ try{ var {stopped} = await TN.stopGuide(this._SMTraditionalNaviId); return stopped; }catch (e){ console.log(e); } } /** * 设置导航指引信息控制,用于控制导航中是否播报引导信息 * @memberOf TraditionalNavi * @param {boolean} speech * @returns {Promise.<Promise.speak>} */ async setSpeechParam(speech){ try{ var {speak} = await TN.setSpeechParam(this._SMTraditionalNaviId,speech); return speak; }catch (e){ console.log(e); } } /** * 设置GPS数据 * @memberOf TraditionalNavi * @param {object} gpsData - gps数据 * @returns {Promise.<void>} */ async setGPSData(gpsData){ try{ await TN.setGPSData(this._SMTraditionalNaviId,gpsData); }catch (e){ console.log(e); } } /** * 导航中,将小车位置作为地图中心。 当允许导航中平移地图时,移动地图后,可以通过该接口使小车一直在地图中心显示。 * @memberOf TraditionalNavi * @returns {Promise.<void>} */ async locateMap(){ try{ await TN.locateMap(this._SMTraditionalNaviId); }catch (e){ console.log(e); } } /** * 当前是否在引导过程中。 * @memberOf TraditionalNavi * @returns {Promise.<boolean>} */ async isGuiding(){ try{ var {guiding} = await TN.isGuiding(this._SMTraditionalNaviId); return guiding; }catch (e){ console.log(e); } } /** * 获取导航剩余时间 * @memberOf TraditionalNavi * @param speed - 当前行驶速度 * @returns {Promise.<number>} */ async getTimeToDestination(speed){ try{ var {time} = await TN.getTimeToDestination(this._SMTraditionalNaviId,speed); return time; }catch (e){ console.log(e); } } /** * 获得路径分析线路。 * @memberOf TraditionalNavi * @returns {Promise.<object>} */ async getRoute(){ try{ var {geoLineId} = await TN.getRoute(this._SMTraditionalNaviId); var geoLine = new GeoLine(); geoLine._SMGeoLineId = geoLineId; return geoLine; }catch (e){ console.log(e); } } /** * 引导过程中是否允许平移地图。 * @memberOf TraditionalNavi * @param bPan - 一个布尔值,用来指示在导航过程中是否允许平移地图,true,表示允许,false,表示不允许。 * @returns {Promise.<void>} */ async enablePanOnGuide(bPan){ try{ await TN.enablePanOnGuide(this._SMTraditionalNaviId,bPan); }catch (e){ console.log(e); } } /** * 清除路径分析的结果 * @memberOf TraditionalNavi * @returns {Promise.<void>} */ async cleanPath(){ try{ await TN.cleanPath(this._SMTraditionalNaviId); }catch (e){ console.log(e); } } /** * 获取导航路径的详情 * @returns {Promise.<Promise.array>} - 返回一个导航路径上所有路径的NaviStep对象数组,每个pathInfo对象的结构为{point:{x:--,y:--},length:--,name:--,time:--,turnType:--} */ async getNaviPath() { try { var {naviPath} = await TN.getNaviPath(this._SMTraditionalNaviId); return naviPath; } catch (e) { console.log(e); } } /* * 设置导航信息变化监听器。 * @param callback - 导航信息变化监听器回调函数。 * 用法:await industryNavi.setDistanceChangeListener( * { * startNavi:(e) => {console.log("start")}, * naviInfoUpdate:(e) => {console.log(e.curRoadName + e.direction ....)}, * arrivedDestination:(e) => {console.log("updated")}, * stopNavi:(e) => {console.log("stop")}, * adjustFailure:(e) => {console.log("failure")}, * playNaviMessage:(e) => {console.log(e.message)}, * * } * ); * 其中naviInfoUpdate回调中的参数是一个NaviInfo对象,其结构为: * { * curRoadName:--, * direction:--, * iconType:--, * nextRoadName:--, * routeRemainDis:--, * routeRemainTime:--, * segRemainDis:-- * } * @returns {Promise} */ async addNaviInfoListener(events){ try{ var success = await TN.addNaviInfoListener(this._SMTraditionalNaviId); if(success){ //差异化 if(Platform.OS === 'ios'){ typeof events.startNavi !== 'function' || nativeEvt.addListener("com.supermap.RN.JSNavigation2.start_navi",function (e) { events.startNavi(e); }); typeof events.naviInfoUpdate !== 'function' || nativeEvt.addListener("com.supermap.RN.JSNavigation2.navi_info_update",function (e) { events.naviInfoUpdate(e); }); typeof events.arrivedDestination !== 'function' || nativeEvt.addListener("com.supermap.RN.JSNavigation2.arrived_destination",function (e) { events.arrivedDestination(e); }); typeof events.stopNavi !== 'function' || nativeEvt.addListener("com.supermap.RN.JSNavigation2.stop_navi",function (e) { events.stopNavi(e); }); }else{ typeof events.startNavi !== 'function' || DeviceEventEmitter.addListener("com.supermap.RN.JSNavigation2.start_navi",function (e) { events.startNavi(e); }); typeof events.naviInfoUpdate !== 'function' || DeviceEventEmitter.addListener("com.supermap.RN.JSNavigation2.navi_info_update",function (e) { events.naviInfoUpdate(e); }); typeof events.arrivedDestination !== 'function' || DeviceEventEmitter.addListener("com.supermap.RN.JSNavigation2.arrived_destination",function (e) { events.arrivedDestination(e); }); typeof events.stopNavi !== 'function' || DeviceEventEmitter.addListener("com.supermap.RN.JSNavigation2.stop_navi",function (e) { events.stopNavi(e); }); typeof events.adjustFailure !== 'function' || DeviceEventEmitter.addListener("com.supermap.RN.JSNavigation2.adjust_failure",function (e) { events.adjustFailure(e); }); typeof events.playNaviMessage !== 'function' || DeviceEventEmitter.addListener("com.supermap.RN.JSNavigation2.play_navi_massage",function (e) { events.playNaviMessage(e); }); } } return success; }catch(e){ console.error(e); } } }