UNPKG

imobile_for_reactnative

Version:

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

159 lines (146 loc) 5.25 kB
/** * 在线分析 * Author: ysl */ import { NativeModules, NativeEventEmitter, EmitterSubscription, } from 'react-native' import { EventConst } from '../../constains/index' const Analyst = NativeModules.SOnlineAnalyst const nativeEvt = new NativeEventEmitter(Analyst) /** 面积单位 */ export type AreaUnit = 'SquareMile' // 平方英尺 | 'SquareMeter' // 平方米 | 'SquareKiloMeter' // 平方千米 | 'Hectare' // 公顷 | 'Are' // 公亩 | 'Acre' // 英亩 | 'SquareFoot' // 平方尺 | 'SquareYard' // 平方码 /** 长度单位 */ export type Unit = 'Meter' // 米 | 'Kilometer' // 千米 | 'Yard' // 码 | 'Foot' // 英尺 | 'Mile' // 英里 /** 颜色渐变类型 */ export type ColorGradientType = 'GREENORANGEVIOLET' // 绿橙紫渐变色 | 'GREENORANGERED' // 绿橙红渐变 | 'RAINBOW' // 彩虹色 | 'SPECTRUM' // 光谱渐变 | 'TERRAIN' // 地形渐变 /** 在线分析参数 */ export interface AnalysisDataType { datasetName: string, /** * 设置分析方法 * 0:简单点密度分析,1:核密度分析 */ analystMethod: 0 | 1, /** * 设置网格面类型 * 0:四边形网格,1:六边形网格 */ meshType: 0 | 1, /** 设置网格大小 */ meshSize: number, /** 设置半径 */ radius: number, /** 设置权重值 */ weight?: number, /** * 设置面积单位 SquareMile(默认) */ areaUnit?: AreaUnit, /** * 设置网格大小单位 Meter(默认) */ meshSizeUnit?: Unit, /** * 设置搜索半径单位 Meter(默认) */ radiusUnit?: Unit, /** * 设置缓存范围[left, bottom, right, top] */ bounds?: number[], /** 专题图分段参数(选填) */ rangeCount?: number, /** 专题图颜色渐变模式--默认为GREENORANGEVIOLET(绿橙紫) 可选GREENORANGERED(绿橙红),RAINBOW(彩虹),SPECTRUM(光谱),TERRAIN(地形) */ colorGradientType?: ColorGradientType, } /** 在线分析连接信息 */ export interface AnalysisOnlineParameter { ip: string, port: string, userName: string, password: string, } /** 在线分析监听返回类型 */ export interface OnlineAnalystListenerResponse{ result: boolean, /** 数据源名称数组 */ datasources?: string[], error?: string, } /*********************************************** 在线分析 *************************************************/ let onlineAnalystListener: EmitterSubscription | null let onlineAnalystHandler: ((e: OnlineAnalystListenerResponse) => void) | null /** * 设置在线协作监听 * @param handler 监听回调 */ export function setOnlineAnalystListener(handler: (e: OnlineAnalystListenerResponse) => void) { onlineAnalystHandler = handler onlineAnalystListener?.remove() onlineAnalystListener = nativeEvt.addListener(EventConst.ONLINE_ANALYST_RESULT, function (e: OnlineAnalystListenerResponse) { if (onlineAnalystHandler && typeof onlineAnalystHandler === 'function') { onlineAnalystHandler(e) removeOnlineAnalystListener() } }) } /** 移除在线分析监听 */ export function removeOnlineAnalystListener() { onlineAnalystHandler = null if (onlineAnalystListener) { onlineAnalystListener.remove() onlineAnalystListener = null } } /** * 获取在线分析数据 * @param ip 在线分析IP * @param port 在线分析端口 * @param type 获取数据类型 0:源数据 1:密度数据集数据 2:点聚合数据集数据 * @returns 在线分析数据 */ export async function getOnlineAnalysisData(ip: string, port: string, type = 0): Promise<string> { if (!ip || !port) return '' const data = await Analyst.getOnlineAnalysisData(ip, port, type) return JSON.parse(data) } /** * 在线分析-密度分析 * @param serverData 密度分析连接信息对象 * @param analysisData 密度分析参数对象 * @param handler 密度分析监听事件 * @returns 分析成功返回true,否则返回false */ export async function densityOnline(serverData: AnalysisOnlineParameter, analysisData: AnalysisDataType, handler: (e: OnlineAnalystListenerResponse) => void): Promise<boolean> { setOnlineAnalystListener(handler) return Analyst.densityOnline(serverData, analysisData) } /** * 在线分析-点聚合分析 * @param serverData 点聚合分析连接信息对象 * @param analysisData 点聚合分析参数对象 * @param handler 点聚合分析监听事件 * @returns 分析成功返回true,否则返回false */ export async function aggregatePointsOnline(serverData: AnalysisOnlineParameter, analysisData: AnalysisDataType, handler: (e: OnlineAnalystListenerResponse) => void): Promise<boolean> { setOnlineAnalystListener(handler) return Analyst.aggregatePointsOnline(serverData, analysisData) }