imobile_for_reactnative
Version:
iMobile for ReactNative,是SuperMap iMobile推出的一款基于React-Native框架的移动应用开发工具。基于该开发工具,用户可以使用JavaScript开发语言,开发出在Android和IOS操作系统下运行的原生移动GIS应用,入门门槛低,一次开发,处处运行。
189 lines (168 loc) • 6.1 kB
text/typescript
/**
* 数据配准类,与组件SMRectifyView一起使用
*
* SMRectifyView数据集加入到两幅地图上进行配准
* 两幅地图在以下被称为 A图 和 B图
*
* @author yangsl
*/
import { NativeModules } from 'react-native'
import { DatasetInfo, Point2D } from '../data/SData'
const SRectify = NativeModules.SRectify
/** 控制点集合 */
export interface ControlPoints {
/** 源地图点集合 */
originalPoints: Point2D[],
/** 参考图点集合 */
targetPoints: Point2D[],
}
interface TransformationResampleMode {
//最邻近法
NEAREST: 0,
//双线性内插法
BILINEAR: 1,
//三次卷积内插法
CUBIC: 2,
}
/** 配准重采样模式 */
export type TTransformationResampleMode = TransformationResampleMode[keyof TransformationResampleMode]
/** 配准重采样模式实例 */
export const ITransformationResampleMode: TransformationResampleMode = SRectify.TransformationResampleMode
interface TransformationMode {
//矩形配准
RECT: 0,
//线性配准
LINEAR: 1,
//多项式配准
SQUARE: 2,
//偏移配准
OFFSET: 4,
}
/** 配准类型 */
export type TTransformationMode = TransformationMode[keyof TransformationMode]
/** 配准类型实例 */
export const ITransformationMode: TransformationMode = SRectify.TransformationMode
/** 配准数据参数 */
export interface RectifyParams extends DatasetInfo {
transformationMode: TTransformationMode,
}
/** 快速配准数据参数 */
export interface FastRectifyParams extends DatasetInfo {
/** */
rectifyFilePath: string,
}
/** 重采样配准参数 */
export interface RectifyResultParams extends DatasetInfo {
/** 重采样模式 */
resmapleMode: TTransformationResampleMode,
/** 重采样网格大小 */
cellSize: number,
}
/** 数据源 和 数据集数组 */
export interface RectifyDatasets {
datasourceName: string,
datasets: string[],
}
/**
* 设置配准数据 和 参考数据,并添加到SMRectifyView中
* @param datasetsInfo 配准数据源 和 数据集数组
* @param referDatasetsInfo 参考数据源 和 数据集数组
* @param transformationMode 配准算法
* @returns 返回是否设置成功
*/
export function setRectifyData(datasetsInfo: RectifyDatasets[], referDatasetsInfo: RectifyDatasets[], transformationMode: TTransformationMode): Promise<boolean> {
return SRectify.setRectifyData(datasetsInfo, referDatasetsInfo, transformationMode)
}
/**
* 数据集配准
* @param datasetInfo 数据配置的数据源和数据集名称,以及配准模式
* @param transformationMode 配准类型
* @param saveAsDatasetInfo 结果另存为配置的数据源和数据集名称,并配置是否重采样
* 若有数据源和数据集,则需要另存为; 若有重采样模式,则需要重采样
* @returns 是否配准成功
*/
export function rectifyExecute(datasetInfo: DatasetInfo, transformationMode: TTransformationMode, saveAsDatasetInfo: RectifyResultParams | DatasetInfo | null): Promise<boolean> {
return SRectify.rectifyExecute(datasetInfo, transformationMode, saveAsDatasetInfo)
}
/**
* 快速配准
* @param datasetInfo 数据配置的数据源和数据集名称
* @param rectifyFilePath 配准文件xml绝对路径
* @param saveAsDatasetInfo 结果另存为配置的数据源和数据集名称,并配置是否重采样
* 若有数据源和数据集,则需要另存为; 若有重采样模式,则需要重采样
* @returns 是否配准成功
*/
export function rectifyFast(datasetInfo: DatasetInfo, rectifyFilePath: string, saveAsDatasetInfo: RectifyResultParams | DatasetInfo | null): Promise<boolean> {
return SRectify.rectifyFast(datasetInfo, rectifyFilePath, saveAsDatasetInfo)
}
/**
* 设置组件SMRectifyView两幅地图是否是关联浏览(同时放大缩小移动)
* @param isAssociat 是否是关联浏览
* @returns 返回是否是关联浏览成功
*/
export function setIsAssociatedView(isAssociat: boolean): Promise<boolean> {
return SRectify.setIsAssociatedView(isAssociat)
}
/**
* 设置图中点位置
* @param target 把点添加到指定地图, 0: 源图(A图), 1: 目标图(B图)
* @param index 设置添加点的序号
* @param point 设置添加点的坐标
* @returns 返回点是否设置成功
*/
export function setControlPoint(target: 0 | 1, index: number, point: Point2D): Promise<boolean> {
return SRectify.setControlPoint(target, index, point)
}
//todo appointControlPoint
/**
* 设置当前控制点,通过手势修改
* @param index 当前控制点的index
* @returns 返回是否设置成功
*/
export function setCurrentIndex(index: number): Promise<boolean> {
return SRectify.setCurrentIndex(index)
}
/**
* 清除图上的数据
* @returns 返回是否清除成功
*/
export function clear(): Promise<boolean> {
return SRectify.clear()
}
/**
* 配准信息导出
* @param filePath 导出配准信息文件路径
* @returns 返回是否导出成功
*/
export function rectifyInfoSaveAs(filePath: string): Promise<boolean> {
return SRectify.rectifyInfoSaveAs(filePath)
}
/**
* 获取控制点的坐标
* @returns 返回的控制点的坐标(地图点)
*/
export function getControlPoints(): Promise<ControlPoints> {
return SRectify.getControlPoints()
}
/**
* 删除控制点
* @param index 控制点index
* @returns 是否删除成功
*/
export function removeControlPoint(index: number): Promise<boolean> {
return SRectify.removeControlPoint(index)
}
/**
* 获取是否所有点都有效
* @returns 是否所有点都有效
*/
export function isAllPointValid(): Promise<boolean> {
return SRectify.isAllPointValid()
}
/**
* 释放校准组件
* @returns 返回是否释放成功
*/
export function dispose(): Promise<boolean> {
return SRectify.dispose()
}