imobile_for_reactnative
Version:
iMobile for ReactNative,是SuperMap iMobile推出的一款基于React-Native框架的移动应用开发工具。基于该开发工具,用户可以使用JavaScript开发语言,开发出在Android和IOS操作系统下运行的原生移动GIS应用,入门门槛低,一次开发,处处运行。
2,098 lines (1,852 loc) • 79.5 kB
text/typescript
import EventConst from "imobile_for_reactnative/NativeModule/constains/EventConst"
import { EmitterSubscription, Platform } from "react-native"
import {
NativeModules,
NativeEventEmitter,
} from "react-native"
import { DatasetInfo, LongitudeAndLatitude, Point2D, Point3D, Vector3 } from "../data/SData"
// eslint-disable-next-line @typescript-eslint/no-unused-vars
import { PrjCoordSys } from '../data/SData'
import { FieldValue3D, TLayer3DType } from "../scene/SScene"
const SARMap = NativeModules.SARMap
const event = new NativeEventEmitter(SARMap)
/** AR图层类型 */
export interface IARLayerType {
/** 当图层找不到对应数据集时类型为 -1 */
UNKNOWN: -1
/** 特效图层 */
EFFECT_LAYER: 2
/** 三维图层 */
AR3D_LAYER: 3
/** 三维场景图层 */
AR_SCENE_LAYER: 4
/** AR 点图层 */
AR_POINT_LAYER: 100
/** AR 文本图层 */
AR_TEXT_LAYER: 101
/** AR POI 图层 (图片,视频及网页) */
AR_MEDIA_LAYER: 105
/** AR 模型,沙盘图层 */
AR_MODEL_LAYER: 106
/** AR 小组件图层 */
AR_WIDGET_LAYER: 107
/** AR 线图层 */
AR_LINE_LAYER: 301
/** AR 面图层 */
AR_REGION_LAYER: 302
/** AR 符号线图层 */
AR_MARKER_LINE_LAYER: 401
}
/** AR对象类型 */
export interface IARElementType {
/** AR视频 */
AR_VIDEO: 1
/** AR图片 */
AR_IMAGE: 2
/** AR网页 */
AR_WEBVIEW: 3
/** AR文本 */
AR_TEXT: 4
/** AR相册 */
AR_ALBUM: 5
/** AR气泡文字 */
AR_BUBBLE_TEXT: 6
/** AR属性 */
AR_ATTRIBUTE_ALBUM: 7
/** AR地图册 */
AR_BROCHOR: 8
/** AR视频册 */
AR_VIDEO_ALBUM: 9
/** AR沙盘册 */
AR_SAND_TABLE_ALBUM:10
/** AR点*/
AR_POINT: 101
/** AR线 */
AR_LINE: 102
/** AR面 */
AR_REGION: 103
/** AR模型 */
AR_MODEL: 201
/** AR沙盘 */
AR_SAND_TABLE: 202
/** 柱状图的element类型 */
AR_BAR_CHART: 203
/** 饼图的element类型 */
AR_PIE_CHART: 204
AR_ELEMENT_GROUP: 301
/** 线符号的element类型 */
AR_MARKER_LINE: 302
}
/** ARAction操作类型 */
export interface IARAction {
/** 空操作,可以点击对象 */
NULL: 0
/** 选择对象,若对象所在图层可编辑,将选择的对象设为编辑对象 */
SELECT: 1
/** 选择对象内的某个子节点,若对象可编辑,将子节点设备编辑对象 */
SELECT_NODE: 2
/** 移动手势 */
MOVE: 101
/** 旋转手势 */
ROTATE: 102
/** 缩放手势 */
SCALE: 103
/** AR测量,AR测图,AR轨迹需要设置为此模式 */
MEASURE: 200
/** 聚焦,可通过{@link getFocusPosition}获取焦点位置 */
FOCUS: 400
/** 矢量线添加的Action */
LINE_CREATE_FOUCUS: 601
/** 创建线操作 */
LINE_CREATE: 602
/** 矢量线和符号线的编辑Action */
VERTEX_ADD_FOUCUS: 701
/** 添加点 */
VERTEX_ADD: 702
/** 焦点定位添加虚线(虚线+线段长度) */
LineDot_CREATE_FOUCUS: 611
/** 户型采集RoomPlan 需要编译环境 Xcode 14+ 需要运行环境 iOS 16+ */
ARACTION_ROOMPLAN: 1000
}
/** 气泡文字排列位置类型 */
export interface IARTextAlign {
LEFT: 1
TOP: 2
RIGHT: 3
BOTTOM: 4
LEFT_START: 5
LEFT_END: 6
TOP_START: 7
TOP_END: 8
RIGHT_START: 9
RIGHT_END: 10
BOTTOM_START: 11
BOTTOM_END:12
}
/** AR窗格动画分类类型 */
export interface IARAnimatorCategory {
/** 消失类型动画 */
DISAPPEAR: 0
/** 出现类型动画 */
APPEAR: 1
/** 其他动画 */
CUSTOM: 2
}
/** AR窗格动画类型 */
export interface IARAnimatorType {
/** 节点类型,可设置节点位移,旋转,缩放属性的动画 */
NODE_TYPE: 0
/** 模型自带动画类型,适用与带有动画的glb模型的动画 */
MODEL_TYPE: 1
/** 动画组,可包括节点类型,模型类型,甚至另外一个动画组类型的动画作为其子动画 */
GROUP_TYPE: 2
}
/** 节点类型动画的类型 */
export interface IARNodeAnimatorType {
/** 位移类型动画 */
TRANSLATION: 0
/** 旋转类型动画 */
ROTATION: 1
/** 缩放类型动画 */
SCALE: 2
}
/** AR窗格动画播放顺序类型 */
export interface IARAnimatorPlayOrder {
/** 在前一个动画播放完后播放 */
AFTER_PREVIOUS: 0
/** 和前一个动画同时播放 */
WITH_PREVIOUS: 1
/** 点击屏幕后播放 */
ON_TOUCH: 2
}
/** AR实景标注的类型 */
export interface IARTrackingMarkerType {
/** 图片类型的AR实景标注 */
IMAGE: 'image',
/** 模型类型的AR实景标注 */
MODEL:'model',
}
/** AR实景标注类型 */
export type TARTrackingMarkerType = IARTrackingMarkerType[keyof IARTrackingMarkerType]
/** AR实景标注类型常量 */
export const ARTrackingMarkerType: IARTrackingMarkerType = {
IMAGE: 'image',
MODEL:'model',
}
/** AR图层类型 */
export type TARLayerType = IARLayerType[keyof IARLayerType]
/** AR对象类型 */
export type TARElementType = IARElementType[keyof IARElementType]
/** ARAction操作类型 */
export type TARAction = IARAction[keyof IARAction]
/** AR气泡文字锚点类型 */
export type TARTextAlign = IARTextAlign[keyof IARTextAlign]
/** AR窗格动画分类 */
export type TARAnimatorCategory = IARAnimatorCategory[keyof IARAnimatorCategory]
/** AR窗格动画类型 */
export type TARAnimatorType = IARAnimatorType[keyof IARAnimatorType]
/** AR节点分类的动画类型 */
export type TARNodeAnimatorType = IARNodeAnimatorType[keyof IARNodeAnimatorType]
/** AR窗格动画播放顺序类型 */
export type TARAnimatorPlayOrder = IARAnimatorPlayOrder[keyof IARAnimatorPlayOrder]
// ********************* 各个类性具体对象
/** AR图层类型 */
export const ARLayerType: IARLayerType = {
UNKNOWN: -1,
EFFECT_LAYER: 2,
AR3D_LAYER: 3,
AR_SCENE_LAYER: 4,
AR_POINT_LAYER: 100,
AR_TEXT_LAYER: 101,
AR_MEDIA_LAYER: 105,
AR_MODEL_LAYER: 106,
AR_WIDGET_LAYER: 107,
AR_LINE_LAYER: 301,
AR_REGION_LAYER: 302,
AR_MARKER_LINE_LAYER: 401,
}
/** AR对象类型 */
export const ARElementType: IARElementType = {
AR_VIDEO: 1,
AR_IMAGE: 2,
AR_WEBVIEW: 3,
AR_TEXT: 4,
AR_ALBUM: 5,
AR_ATTRIBUTE_ALBUM: 7,
AR_VIDEO_ALBUM: 9,
AR_SAND_TABLE_ALBUM:10,
AR_BROCHOR: 8,
AR_BUBBLE_TEXT: 6,
AR_POINT: 101,
AR_LINE: 102,
AR_REGION: 103,
AR_MODEL: 201,
AR_SAND_TABLE: 202,
AR_BAR_CHART: 203,
AR_PIE_CHART: 204,
AR_ELEMENT_GROUP: 301,
AR_MARKER_LINE: 302,
}
/** ARAction操作类型 */
export const ARAction: IARAction = {
NULL: 0,
SELECT: 1,
SELECT_NODE: 2,
MOVE: 101,
ROTATE: 102,
SCALE: 103,
MEASURE: 200,
FOCUS: 400,
LINE_CREATE_FOUCUS: 601,
LINE_CREATE: 602,
VERTEX_ADD_FOUCUS: 701,
VERTEX_ADD: 702,
LineDot_CREATE_FOUCUS: 611,
ARACTION_ROOMPLAN: 1000,
}
/** AR气泡文字锚点类型 */
export const ARTextAlign: IARTextAlign = {
LEFT: 1,
TOP: 2,
RIGHT: 3,
BOTTOM: 4,
LEFT_START: 5,
LEFT_END: 6,
TOP_START: 7,
TOP_END: 8,
RIGHT_START: 9,
RIGHT_END: 10,
BOTTOM_START: 11,
BOTTOM_END:12,
}
/** AR窗格动画分类 */
export const ARAnimatorCategory: IARAnimatorCategory = {
DISAPPEAR: 0,
APPEAR: 1,
CUSTOM: 2,
}
/** AR窗格动画类型 */
export const ARAnimatorType: IARAnimatorType = {
NODE_TYPE: 0,
MODEL_TYPE: 1,
GROUP_TYPE: 2
}
/** AR节点分类的动画类型 */
export const ARNodeAnimatorType: IARNodeAnimatorType = {
TRANSLATION: 0,
ROTATION: 1,
SCALE: 2
}
/** AR窗格动画播放顺序类型 */
export const ARAnimatorPlayOrder: IARAnimatorPlayOrder = {
AFTER_PREVIOUS: 0,
WITH_PREVIOUS: 1,
ON_TOUCH: 2,
}
interface IARWarning {
/** 正常 */
none?: true
/** 距离太近 */
close?: true
/** 光线太暗 */
dark?: true
/** 移动太快 */
fast?: true
/** 特征点太少 */
nofeature?: true
/** 距离太远 */
far?:true
}
interface ARStatusListeners {
/**
* AR是否在跟踪状态
* 只有在跟踪状态才能获取正确的位置
*/
onTrackingStateChange?: (isTracking: boolean) => void
/**
* 检测到的环境问题的回调
*/
infoListener?: (info: IARWarning) => void
}
/**
* AR对象图层信息,是AR对象显示的基本图层
*/
export interface ARElementLayer {
/** 图层类型 */
type: IARLayerType[Exclude<keyof IARLayerType, | 'EFFECT_LAYER' | 'AR3D_LAYER' | 'AR_SCENE_LAYER'>],
/** 图层名 */
name: string
/** 图层显示名 */
caption: string
/** 图层关联的数据源别名 */
datasourceAlias: string
/** 图层关联的数据集名 */
datasetName: string
/** 图层是否可见 */
isVisible: boolean
/** 图层是否可选 */
isSelectable: boolean
/** 图层最大可见距离,单位米 */
maxVisibleBounds: number
/** 图层最小可见距离,单位米 */
minVisibleBounds: number
/** 图层最大动画距离,单位米,超出此距离时图层动画停止播放 */
maxAnimationBounds: number
/** 图层最小动画距离,单位米,小于此距离时图层动画停止播放 */
minAnimationBounds: number
/** 图层动画播放重复次数 */
animationRepeatCount: number
}
/** AR特效图层 */
export interface AREffectLayer {
/** 图层类型 */
type: IARLayerType['EFFECT_LAYER'] | IARLayerType['UNKNOWN']
/** 图层名 */
name: string
/** 图层显示名 */
caption: string
/** 图层是否可见 */
isVisible: boolean
/** 图层最大可见距离,单位米 */
maxVisibleBounds: number
/** 图层最小可见距离,单位米 */
minVisibleBounds: number
/** 特效播放时间,单位秒,0表示一直播放 */
duration: number
/** 特效图层中心点在AR地图坐标系下X坐标 */
layerCenterX: number
/** 特效图层中心点在AR地图坐标系下Y坐标 */
layerCenterY: number
}
/**
* AR场景图层,对应3维工作空间内的一个场景。
*
* 一副AR地图中只能加载一个3维场景,即只有一个AR场景图层
*/
export interface ARSceneLayer {
/** 图层类型 */
type: IARLayerType['AR_SCENE_LAYER'] | IARLayerType['UNKNOWN'],
/** 图层名 */
name: string
/** 图层显示名 */
caption: string
/** 图层关联的数据源别名 */
datasourceAlias: string
/** 图层关联的数据集名 */
datasetName: string
/** AR3维场景图层包含的AR3维图层 */
ar3DLayers: AR3DLayer[]
/** 图层是否可见 */
isVisible: boolean
}
/**
* AR3维图层,对应3维工作空间一个场景内的3维图层
*/
export interface AR3DLayer {
/** AR图层类型 */
type: IARLayerType['AR3D_LAYER'] | IARLayerType['UNKNOWN'],
/** 3维图层类型 */
layer3DType: TLayer3DType
/** 图层名 */
name: string
/** 图层显示名 */
caption: string
/** 图层关联的数据源别名 */
datasourceAlias: string
/** 图层关联的数据集名 */
datasetName: string
/** 此3维图层所在场景的名称 */
sceneName?: string
layer3DName: string
/** 图层是否可见 */
isVisible: boolean
}
/** AR地图中的图层。包括四种图层:
* > {@link ARElementLayer} AR对象图层信息,是AR对象显示的基本图层
*
* > {@link AREffectLayer} AR特效图层
*
* > {@link ARSceneLayer} AR场景图层,对应3维工作空间内的一个场景。
*
* > {@link AR3DLayer} AR3维图层,对应3维工作空间一个场景内的3维图层
*/
export type ARLayer = ARElementLayer | AREffectLayer | ARSceneLayer | AR3DLayer
export interface ARElementStyle {
/** 线颜色,前景色,文字颜色 */
strokeColor: string
/** 填充颜色,背景色 */
fillColor: string
/** 透明度 0-1 */
opacity: number
/** (文字,几何,边框)前景透明度 0-1 */
strokeOpacity: number
/** (文字,几何)填充透明度 0-1 */
fillOpacity: number
/** 点大小 */
pointSize: number
/** 线宽度 */
lineWidth: number
/** 文字大小 */
textSize: number
/** 对齐方式 */
textAlign: TARTextAlign
/** 边框颜色 */
borderColor: string
/** 边框宽度 单位:米*/
borderWidth: number
/** 符号线的符号角度 */
markerLineRotation: number
/** 符号线的符号间距 */
pointInterval: number
/** 符号线的符号路径 */
markerSymbolPath: string
/** 符号线符号的流速 */
markerFlowVelocity: number
/** 属性面板方向是否固定 */
rotationFix: boolean
}
/** AR 对象 */
export type ARElement = ARElementBase | ARVideoAlbum
/** ARElement 基类 */
export interface ARElementBase {
/** ar对象名 */
layerName: string
/** ar对象id */
id: number
/** ar对象类型 */
type: TARElementType
}
export interface ARVideoAlbum extends ARElementBase{
type: IARElementType['AR_VIDEO_ALBUM']
/** 0: 循环, 1: 列表 */
videoType: number
}
/** AR变换信息 */
export interface IARTransform {
type: 'position' | 'rotation' | 'scale' | 'size'
id: number
layerName: string
positionX: number
positionY: number
positionZ: number
scale: number
rotationX: number
rotationY: number
rotationZ: number
touchType: number
width?: number
height?: number
}
/** AR模型动画参数信息 */
export type IAnimationParam = IAnimationTranslation | IAnimationRotation
interface IAnimationTranslation {
name: string
type: 'translation',
/** 动画时间,单位:毫秒,默认 1000ms */
duration?: number,
delay?: number,
repeatCount?: number,
repeatMode?: 1 | 2,
startPosition: Point3D,
direction: 'x' | 'y' | 'z'
distance: number
}
interface IAnimationRotation {
name: string
type: 'rotation',
duration?: number,
delay?: number,
repeatCount?: number,
repeatMode?: 1 | 2,
rotationAxis: Point3D,
clockwise: boolean,
}
/**
* 推演动画参数
*/
export type ARAnimatorParameter = ARModelAnimatorParameter | ARNodeAnimatorParameter | ARGroupAnimatorParameter<ARAnimatorParameter>
export type ARNodeAnimatorParameter = ARNodeTranslationAnimatorParameter
| ARNodeRotationAnimatorParameter
| ARNodeScaleAnimatorParameter
interface ARAnimatorParameterBase {
category: TARAnimatorCategory
type: TARAnimatorType
name: string
order?: TARAnimatorPlayOrder
repeatCount?: number
/** 延时 单位秒 */
delay?: number
}
interface ARNodeAnimatorParameterBase extends ARAnimatorParameterBase {
layerName: string
elementID: number
type: typeof ARAnimatorType.NODE_TYPE
nodeType: TARNodeAnimatorType
/** 节点动画时长 单位秒 */
duration?: number
}
export interface ARNodeTranslationAnimatorParameter extends ARNodeAnimatorParameterBase {
nodeType: typeof ARNodeAnimatorType.TRANSLATION
translations: Vector3[]
}
export interface ARNodeRotationAnimatorParameter extends ARNodeAnimatorParameterBase {
nodeType: typeof ARNodeAnimatorType.ROTATION
rotationAxis?: Vector3
degrees: number[]
}
export interface ARNodeScaleAnimatorParameter extends ARNodeAnimatorParameterBase {
nodeType: typeof ARNodeAnimatorType.SCALE
scales: Vector3[]
}
export interface ARModelAnimatorParameter extends ARAnimatorParameterBase {
layerName: string
elementID: number
type: typeof ARAnimatorType.MODEL_TYPE
modelAnimationIndex: number
/** 模型动画时长 单位秒 */
duration?: number
/** 模型动画开始帧时间 单位秒 */
startFrame?: number
/** 模型动画结束帧时间 单位秒 */
endFrame?: number
}
export interface ARGroupAnimatorParameter<Animator> extends ARAnimatorParameterBase {
type: typeof ARAnimatorType.GROUP_TYPE
animations: Animator[]
}
// ************************************
// 监听回调
// ************************************
let hittestListener: EmitterSubscription | undefined = undefined
let arinfoListener: EmitterSubscription | undefined = undefined
/** 设置 AR tracking状态 和 场景信息 监听*/
export function setARStatusListener(listeners?: ARStatusListeners): void {
hittestListener?.remove()
arinfoListener?.remove()
hittestListener = listeners?.onTrackingStateChange && event.addListener(EventConst.MEASUREAREA_ADD, listeners.onTrackingStateChange)
arinfoListener = listeners?.infoListener && event.addListener(EventConst.MEASUREAREA_DIOLOG, listeners.infoListener)
}
// ************************************
// 公共方法
// ************************************
/**
* 是否支持 AR 功能
* 返回值 1:正常 0:不支持AR -1:未安装AR服务
* @platform ios android
*/
export function isSupportAR(): Promise<-1 | 0 | 1> {
//android 需要连接google服务,暂不使用此接口
return SARMap.isSupportAR()
}
/**
* 跳转到 ARCore 安装页面(android)
*
* @platform android
*/
export async function installARCore(): Promise<void> {
if(Platform.OS === 'android') {
SARMap.installARCore()
}
}
/**
* 判断是否是华为设备
*
* @platform android
*/
export async function isHuawei(): Promise<boolean> {
if(Platform.OS === 'android') {
return await SARMap.isHuawei()
}
return false
}
/**
* 屏幕截图
* @param path 截图存放路径
* @param withInfo 是否包含AI识别信息等,默认 false
*/
export async function captureImage(path: string, withInfo = false): Promise<boolean> {
return await SARMap.captureImage(path, withInfo)
}
/**
* 截取当前帧并解析其中的二维码信息
* @returns 解码的二维码信息,失败返回空字符串
*/
export function qrScan(): Promise<string> {
return SARMap.qrScan()
}
/** 暂停AR跟踪及场景渲染 */
export function onPause(): Promise<boolean> {
return SARMap.onPause()
}
/** 开始AR跟踪及场景渲染 */
export function onResume(): Promise<boolean> {
return SARMap.onResume()
}
/** 停止并释放AR场景所占有的资源 */
export function dispose(): Promise<boolean> {
return SARMap.dispose()
}
// ************************************
// AR设置选项
// ************************************
/**
* 显示或隐藏点云
* @param show 是否显示AR场景中的点云
*/
export async function showPointCloud(show: boolean): Promise<void> {
await SARMap.showPointCloud(show)
}
/**
* AR场景是否3维优先
* 3维优先时3维场景将显示在最下层
* 其他所有对象都将盖在三维上面,
* 反之,则3维在上层,将盖住所有其他对象
*
* 目前优先显示3维的话,设备仅支持横屏
* @param is3dFirst 3维是否优先显示(在最下层)
* @platform android
*/
export async function setIs3dSceneFirst(is3dFirst: boolean): Promise<void> {
if(Platform.OS !== 'android') return
await SARMap.setIs3dSceneFirst(is3dFirst)
}
/**
* 获取当前是否是3为优先显示状态
* @returns 3维是否优先显示(在最下层)
* @platform android
*/
export async function getIs3dSceneFirst(): Promise<boolean> {
if(Platform.OS !== 'android') return false
return await SARMap.getIs3dSceneFirst()
}
/**
* 设置是否开启深度遮挡 (1. 在优先渲染到三维开启状态下无效; 2.设置之后需要重新初始化AR地图才生效)
* @param isOpenDepthMode 是否开启深度遮挡 true: 开启 false:不开启
* @returns
*/
export async function setIsOpenDepthMode(isOpenDepthMode: boolean): Promise<void> {
if(Platform.OS !== 'android') return
await SARMap.setIsOpenDepthMode(isOpenDepthMode)
}
/**
* 获取深度遮挡开启状态
* @returns 深度遮挡开启状态 true: 开启 false:未开启
* @platform android
*/
export async function getIsOpenDepthMode(): Promise<boolean> {
if(Platform.OS !== 'android') return false
return await SARMap.getIsOpenDepthMode()
}
// ************************************
// 地图校准相关
// ************************************
/**
* 位置校准(设备垂直地面,摄像头面对正北方向进行)
* @param longitude 经度
* @param latitude 纬度
* @param height 相对地面高度 单位 米
*/
export function calibrate(longitude: number, latitude: number, height: number): Promise<boolean> {
return SARMap.calibrate(longitude, latitude, height)
}
/**
* 开始增强位置校准
*
* 定位结果用 SMARMapview#onAugmentedCalibrateResult 回调来监听
*
* 通过扫描识别带有位置信息二维码的图片进行增强位置校准
* 二维码解码后为json字符串,格式为:
*
* > {
*
* >> x: number //图片所在地理位置的横坐标
*
* >> y: number //图片所在地理位置的纵坐标
*
* >> h: number //图片相对地面的高度, 单位 米
*
* >> mercator: boolean //可选,当前坐标系是否为墨卡托,默认为 true,否则为经纬度
*
* >> vertical: boolean //可选,图片是否垂直放置(贴在墙上),默认为 false,即放在地面上
*
* >> angle: number //可选,图片正面与正北的夹角,默认为 0
*
* > }
*/
export function startAugmentedCalibrate():Promise<boolean>{
return SARMap.startAugmentedCalibrate()
}
/**
* 退出增强位置校准
*/
export function stopAugmentedCalibrate():Promise<boolean>{
return SARMap.stopAugmentedCalibrate()
}
/**
* 高精自动定位状态下是否自动校准(打开或关闭)
* @param isRTKAutoCalibration 设置的状态(true为打开, false为关闭)
* @returns boolean 是否设置成功
* @platform android
* @author lyx
*/
export async function setRTKAutoCalibration(isRTKAutoCalibration: boolean): Promise<boolean> {
if(Platform.OS !== 'android') return false
return await SARMap.setRTKAutoCalibration(isRTKAutoCalibration)
}
export interface RTKCalibrateParam {
/** 校准位置 */
location: LongitudeAndLatitude,
/** 校准精度 */
HDOP?: number,
}
/**
* 设置高精度定位信息进行自动校准
*
* 当关闭高精定位自动校准时可使用此接口手动进行高精度定位校准
* @param calibrationParam 高精度的定位信息(校准位置和校准精度)
* @platform android
*/
export async function RTKCalibrate(calibrationParam: RTKCalibrateParam): Promise<boolean> {
return SARMap.RTKCalibrate(calibrationParam)
}
/** 两点定位的参数类型 */
export interface TwoPointPositionParamType {
/** 第一个定位点的经纬度坐标点(是arPnt1对应的实景点的经纬度作标) */
gpsPnt1: Point2D,
/** 第二个定位点的经纬度坐标点(是arPnt2对应的实景点的经纬度作标) */
gpsPnt2: Point2D,
/** 第一个实景点的AR坐标点(对应的经纬度坐标点是gpsPnt1) */
arPnt1: Point3D,
/** 第二个实景点的AR坐标点(对应的经纬度坐标点是gpsPnt2) */
arPnt2: Point3D,
/** 两点定位校准高度 */
height: number,
}
/**
* 两点定位
* @param param 两点定位的参数
* @returns boolean 是否定位成功
* @author lyx
*/
export function twoPointPosition(param: TwoPointPositionParamType): Promise<boolean> {
return SARMap.twoPointPosition(param)
}
// ************************************
// 地图坐标相关
// ************************************
/**
* 获取当前相机在AR场景的坐标,即当前位置所处的AR坐标
*
* AR坐标系为右手坐标系
*/
export function getCurrentARPosition(): Promise<Vector3 | undefined | null> {
return SARMap.getCurrentARPosition()
}
/**
* 获取当前AR地图坐标系XML字符串形式的描述
* @returns 当前AR地图坐标系({@link PrjCoordSys})XML字符串形式的描述
*/
export function getPrjCoordSys(): Promise<string> {
return SARMap.getPrjCoordSys()
}
/**
* 将AR场景坐标转换成AR地图的地图坐标
*
* 当前AR地图所用投影坐标系用 {@link getPrjCoordSys} 获取
* @param points AR场景坐标
* @returns 转换后对应AR地图当前投影坐标系的坐标,其中z为相对地面高度
*/
export function CoordSysTranslatorARToMapPrj(points: Vector3[]): Promise<Vector3[]> {
return SARMap.CoordSysTranslatorARToMapPrj(points)
}
/**
* 将AR地图投影坐标系的坐标转换成AR场景坐标
*
* 当前AR地图所用投影坐标系用 {@link getPrjCoordSys} 获取
* @param points AR地图当前投影坐标系的坐标,其中z为相对地面高度
* @returns AR场景中的坐标
*/
export function CoordSysTranslatorMapPrjToAR(points: Vector3[]): Promise<Vector3[]> {
return SARMap.CoordSysTranslatorMapPrjToAR(points)
}
/**
* ios切换AR界面时可能会有问题,需要前调用此接口
* @param bAdd
* @platform ios
* @deprecated todo 内部使用
*/
export function coachingOverlayView(bAdd:boolean): void {
if (Platform.OS === 'ios') {
SARMap.coachingOverlayView(bAdd)
}
}
// ************************************
// ar地图
// ************************************
/**
* 根据路径打开 ar 地图 xml
* @param path 地图xml所在绝对路径
* @returns 是否成功
*/
export function open(path: string): Promise<boolean> {
return SARMap.open(path)
}
/**
* 关闭当前ar地图
* @returns 是否成功
*/
export function close(): Promise<boolean> {
return SARMap.close()
}
/**
* 将AR地图中心点移动到当前位置
*
* 即使用AR地图中心点进行位置校准
* @returns 操作是否成功
*/
export async function moveToMapCenter(): Promise<boolean>{
return await SARMap.moveToMapCenter()
}
/**
* 保存当前地图
* @returns 保存是否成功
* @throws 许可异常
*/
export function save(): Promise<boolean> {
return SARMap.save()
}
/**
* 保存当前地图到指定文件中
* @param path 文件所在绝对路径
* @returns 另存是否成功
* @throws 许可异常
*/
export function saveAs(path: string): Promise<boolean> {
return SARMap.saveAs(path)
}
/**
* 导出AR地图到指定目录下
* @param mapName 要导出的AR地图名
* @param targetPath 要到处的目录绝对路径
* @returns 导出是否成功
* @throws 许可异常
*/
export function exportMap(mapName: string, targetPath: string): Promise<boolean> {
return SARMap.exportMap(mapName, targetPath)
}
/**
* 导入AR地图
* @param mapPath 要导入的 ar地图xml 所在的绝对路径
* @returns 导入是否成功
*/
export function importMap(mapPath: string): Promise<boolean> {
return SARMap.importMap(mapPath)
}
/**
* 设置AR地图点击操作类型
*
* @param action 操作类型,详见 {@link ARAction}
*/
export function setAction(action: TARAction): Promise<boolean> {
return SARMap.setAction(action)
}
/**
* 清除AR地图中对象的选中状态
*/
export function clearSelection(): Promise<boolean> {
return SARMap.clearSelection()
}
/**
* 获取当前焦点的AR坐标 (屏幕中心点发出的射线与当前场景中平面的焦点)
* @returns 设置 {@link ARAction} 为FOCUS时,焦点所在坐标,若没有焦点,则为空
*/
export function getFocusPosition(): Promise<Vector3 | null | undefined> {
return SARMap.getFocusPosition()
}
/**
* 指定编辑的AR对象
* @param elementID AR对象的id
* @param layerName AR对象所在图层名
*/
export function appointEditElement(elementID: number, layerName: string): Promise<boolean> {
return SARMap.appointEditElement(elementID, layerName)
}
/**
* 指定要编辑的{@link ARSceneLayer}或{@link AR3DLayer}
* @param layerName 要编辑的 ARSceneLayer 或 AR3DLayer 图层名
*/
export function appointEditAR3DLayer(layerName: string): Promise<boolean>{
return SARMap.appointEditAR3DLayer(layerName)
}
/**
* 提交对AR对象或3D图层的修改
* @throws 许可异常
*/
export function submit(): Promise<boolean> {
return SARMap.submit()
}
/** 取消对AR对象或3D图层的修改 */
export function cancel(): Promise<boolean> {
return SARMap.cancel()
}
/** 刷新地图 */
export function refresh(): Promise<boolean> {
return SARMap.refresh()
}
// ************************************
// AR 图层相关
// ************************************
/** 获取ar地图中的图层信息 */
export function getLayers(): Promise<Array<ARLayer>> {
return SARMap.getLayers()
}
/**
* 获取 {@link ARElementLayer} 的风格
* @param layerName ARElementLayer 图层名
* @returns 图层风格
*/
export function getLayerStyle(layerName: string): Promise<ARElementStyle | undefined | null> {
return SARMap.getLayerStyle(layerName)
}
/**
* 设置 {@link ARElementLayer} 的风格
* @param layerName ARElementLayer 图层名
* @param style 要设置的风格
*/
export function setLayerStyle(layerName: string, style: Partial<ARElementStyle>): Promise<boolean> {
return SARMap.setLayerStyle(layerName, style)
}
/**
* 设置AR图层的可见性
* @param layerName 图层名
* @param visible 是否可见
*/
export function setLayerVisible(layerName: string, visible: boolean): Promise<boolean> {
return SARMap.setLayerVisible(layerName, visible)
}
/**
* 设置图层显示名(caption)
* @param layerName 图层名
* @param caption 图层显示名
*/
export function setLayerCaption(layerName: string, caption: string): Promise<boolean> {
return SARMap.setLayerCaption(layerName, caption)
}
/**
* 设置AR图层中的对象是否可选
* @param layerName 图层名
* @param caption 是否可选
*/
export function setLayerSelectable(layerName: string, selectable: boolean): Promise<boolean>{
return SARMap.setLayerSelectable(layerName, selectable)
}
/**
* 设置 {@link ARElementLayer} 或 {@link AREffectLayer} 最大可见距离
* @param layerName ARElementLayer 或 AREffectLayer 图层名
* @param bounds 最大可见距离,单位米,超过此距离的对象将不显示
*/
export function setLayerMaxVisibleBounds(layerName: string, bounds: number): Promise<boolean> {
return SARMap.setLayerMaxVisibleBounds(layerName, bounds)
}
/**
* 设置 {@link ARElementLayer} 或 {@link AREffectLayer} 最小可见距离
* @param layerName ARElementLayer 或 AREffectLayer 图层名
* @param bounds 最小可见距离,单位米,小于此距离的对象将不显示
*/
export function setLayerMinVisibleBounds(layerName: string, bounds: number): Promise<boolean> {
return SARMap.setLayerMinVisibleBounds(layerName, bounds)
}
/**
* 设置 {@link ARElementLayer} 最大动画距离
* @param layerName ARElementLayer 图层名
* @param bounds 图层最大动画距离,单位米,超出此距离时图层动画停止播放
*/
export function setLayerMaxAnimationBounds(layerName: string, bounds: number): Promise<boolean> {
return SARMap.setLayerMaxAnimationBounds(layerName, bounds)
}
/**
* 设置 {@link ARElementLayer} 最小动画距离
* @param layerName ARElementLayer 图层名
* @param bounds 图层最小动画距离,单位米,小于此距离时图层动画停止播放
*/
export function setLayerMinAnimationBounds(layerName: string, bounds: number): Promise<boolean> {
return SARMap.setLayerMinAnimationBounds(layerName, bounds)
}
/**
* 设置图层动画重复次数
* @param repeatCount 0: 不重复 ; -1: 无限重复; 大于0: 重复次数
*/
export function setLayerAnimationRepeatCount(layerName: string, repeatCount: number): Promise<boolean> {
return SARMap.setLayerAnimationRepeatCount(layerName, repeatCount)
}
/**
* 上移 {@link AREffectLayer}
* @param layerName AREffectLayer 图层名
*/
export function moveLayerUp(layerName: string): Promise<boolean> {
return SARMap.moveLayerUp(layerName)
}
/**
* 下移图层 {@link AREffectLayer}
* @param layerName AREffectLayer 图层名
*/
export function moveLayerDown(layerName: string): Promise<boolean> {
return SARMap.moveLayerDown(layerName)
}
/**
* 设置特效图层 {@link AREffectLayer} 的中心点
*
* @param layerName 特效图层名
* @param center 要设置的点,坐标系为当前AR地图的投影坐标系
*/
export function setEffectLayerCenter(layerName: string, center: Point2D): Promise<boolean> {
return SARMap.setEffectLayerCenter(layerName, center)
}
/**
* 设置特效图层 {@link AREffectLayer} 持续时间
* @param duration 持续时间,整数,单位秒,0表示一直播放
*/
export function setEffectLayerDuration(layerName: string, duration: number): Promise<boolean> {
return SARMap.setEffectLayerDuration(layerName, duration)
}
/**
* 设置特效图层{@link AREffectLayer}使用的特效
* @param layerName 要修改的特效图层名
* @param effectPath 特效文件绝对路径
*/
export function setAREffect(layerName: string, effectPath: string): Promise<boolean> {
return SARMap.setAREffect(layerName, effectPath)
}
/**
* 添加 {@link ARElementLayer} 图层
* @param datasetInfo 图层要添加到的数据集信息
* @param type ARLementLayer的图层类型
* @returns 返回添加的图层名称,失败返回空字符串
*/
export function addElementLayer(datasetInfo: DatasetInfo, type: IARLayerType[Exclude<keyof IARLayerType, | 'EFFECT_LAYER' | 'AR3D_LAYER' | 'AR_SCENE_LAYER' | 'UNKNOWN'>]): Promise<string>
/**
* 添加 {@link ARElementLayer} 图层
* @param datasetInfo 图层要添加到的数据集信息
* @param type ARLementLayer的图层类型
* @param forceAdd 是否可以重复添加同一数据集,默认false
* @returns 返回添加的图层名称,失败返回空字符串
*/
export function addElementLayer(datasetInfo: DatasetInfo, type: IARLayerType[Exclude<keyof IARLayerType, | 'EFFECT_LAYER' | 'AR3D_LAYER' | 'AR_SCENE_LAYER' | 'UNKNOWN'>], forceAdd: boolean): Promise<string>
export function addElementLayer(datasetInfo: DatasetInfo, type: IARLayerType[Exclude<keyof IARLayerType, | 'EFFECT_LAYER' | 'AR3D_LAYER' | 'AR_SCENE_LAYER' | 'UNKNOWN'>], forceAdd = false): Promise<string> {
return SARMap.addElementLayer(datasetInfo, type, forceAdd)
}
/**
* 添加AR3维场景图层
* @param datasetInfo 保存三维图层的数据集,注意此数据需要为空数据集
* @param workspaceServer 三维场景工作空间路径
* @param initForm 初始的位置,旋转和缩放参数
* @param sceneOption 设置添加时的3维中心点偏移坐标,3维图层在AR场景中的坐标系类型
* @returns 返回添加的图层名称,失败返回空字符串
*/
export function addSceneLayer(datasetInfo: DatasetInfo, workspaceServer: string, initForm?: Partial<Transform>, sceneOption?: Partial<SceneOption>): Promise<string> {
return SARMap.addSceneLayer(datasetInfo, workspaceServer, initForm, sceneOption)
}
interface SceneOption {
/** 3维中心点偏移坐标,如想让3维场景中(10, 0, 0)变为添加时的中心点,则可在此处填写此坐标 */
offset: Point3D
/**
* 指定3维场景内3维图层保存的点的类型,0:局部坐标, 1: ar地图坐标
* 添加后不可更改。默认为局部坐标
*/
childCoordSysType: 0 | 1
}
/**
* 添加在线AR3维场景图层
* @param datasetInfo 保存三维图层的数据集,注意此数据需要为空数据集
* @param serverUrl 在线三维场景的的url
* @param sceneName 在线三维场景名
* @param initForm 初始的位置,旋转和缩放参数
* @param sceneOption 设置添加时的3维中心点偏移坐标,3维图层在AR场景中的坐标系类型
* @returns 返回添加的图层名称,失败返回空字符串
*/
export function addSceneLayerOnline(datasetInfo: DatasetInfo, serverUrl: string, sceneName: string, initForm?: Partial<Transform>, sceneOption?: Partial<SceneOption>): Promise<string> {
return SARMap.addSceneLayerOnline(datasetInfo, serverUrl, sceneName, initForm, sceneOption)
}
/**
* 新建kml格式的三维图层到AR三维场景图层中
* @param sceneLayerName 要添加到的AR场景图层 ({@link ARSceneLayer})名
* @param layerName 指定添加的图层名称
* @returns 返回添加的图层名称,失败返回空字符串
*/
export function add3DLayer(sceneLayerName: string, layerName: string): Promise<string>
/**
* 根据指定的kml文件添加三维图层到AR三维场景图层中
* @param sceneLayerName 要添加到的AR场景图层 ({@link ARSceneLayer})名
* @param layerName 指定添加的图层名称
* @param kmlPath 指定的kml文件的绝对路径
* @returns 返回添加的图层名称,失败返回空字符串
*/
export function add3DLayer(sceneLayerName: string, layerName: string, kmlPath: string): Promise<string>
export function add3DLayer(sceneLayerName: string, layerName: string, kmlPath = ''): Promise<string> {
return SARMap.add3DLayer(sceneLayerName, layerName, kmlPath)
}
/**
* 向已添加的3Dlayer,动态添加对象
* @param layerName 指定添加的图层名称
* @param jsonData json对象
* @returns 成功返回true,失败返回false
*/
export function addJsonTo3DLayer(layerName: string, jsonData:string): Promise<boolean> {
return SARMap.addJsonTo3DLayer(layerName, jsonData)
}
/**
* 导出 {@link AR3DLayer} 为kml文件
* @param layerName AR3DLayer 图层名
* @returns 是否成功
*/
export function save3DLayerAsKml(layerName: string, kmlPath: string): Promise<boolean> {
return SARMap.save3DLayerAsKml(layerName, kmlPath)
}
/**
* 修改3维kml图层上的几何对象
* @param layerName {@link AR3DLayer}图层名(通过kml添加的)
* @param id 几何对象id
* @param param 更新参数
* @returns 是否成功
*/
export function updateAR3DGeometry(layerName: string, id: number, param: AR3DGeometryParam): Promise<boolean> {
return SARMap.updateAR3DGeometry(layerName, id, param)
}
/** AR 3维kml对象参数 */
export interface AR3DGeometryParam {
/** 坐标数组 */
coordinates: [number, number, number][]
}
/** RGBA的颜色 */
export interface RGBA {
/** 红色 [0,255] */
r: number
/** 绿色 [0,255] */
g: number
/** 蓝色 [0,255] */
b: number
/** 透明度 [0,1] */
a: number
}
export interface GeoStyle3D {
/** 面的颜色 */
fillForeColor?: RGBA
/** 线的颜色 */
lineColor?: RGBA
/** 线的宽度 */
lineWidth?: number
/** 点的颜色 */
markerColor?: RGBA
/** 点的缩放 */
markerScale?: number
/**
* marker文件路径
* 若是 app 内置资源,使用 APP:// 开头
*/
markerFile?: string
/** 高度模式 */
// altitudeMode: AltitudeMode[keyof AltitudeMode]
}
export async function setAR3DLayerStyle(layerName: string, styleParam: GeoStyle3D): Promise<boolean> {
// if(Platform.OS !== 'android') return false
return await SARMap.setAR3DLayerStyle(layerName, styleParam)
}
/**
* 获取三维图层的风格
* @param layerName 三维图层的名字
* @returns 返获取到的风格
* @author lyx
*/
export async function getAR3DLayerStyle(layerName: string): Promise<GeoStyle3D | null | undefined> {
// if(Platform.OS !== 'android') return null
return await SARMap.getAR3DLayerStyle(layerName)
}
// export async function get3DLayerObjectsIds(layerName: string): Promise<Array<number> | null> {
// if(Platform.OS !== 'android') return null
// return await SARMap.get3DLayerObjectsIds(layerName)
// }
/**
* 三维图层对象的透明度设置
* @param layerName 三维图层的名字
* @param ids 该三维图层里需要设置透明度的对象id(不是SmId,对应桌面里的序号)
* @param color 颜色 透明度在 [0,1]这个闭区间
* @return 是否设置成功
*/
export async function setAR3DLayerObjectsColor(layerName: string, ids:Array<number>, color: RGBA): Promise<boolean> {
if(Platform.OS !== 'android') return false
return await SARMap.setAR3DLayerObjectsColor(layerName, ids, color)
}
/**
* 三维图层对象的透明度获取
* @param layerName 三维图层的名字
* @param ids 该三维图层里需要设置透明度的对象id(不是SmId,对应桌面里的序号)
* @return 成功返回颜色数组
*/
export async function getAR3DLayerObjectsColor(layerName: string, ids:Array<number>): Promise<Array<RGBA | null | undefined>> {
if(Platform.OS !== 'android') return []
return await SARMap.getAR3DLayerObjectsColor(layerName, ids)
}
/**
* 获取当前已添加的场景路径
* @returns 场景路径
*/
export async function getARSceneLayerPath(): Promise<string | null| undefined> {
if(Platform.OS !== 'android') return null
return await SARMap.getARSceneLayerPath()
}
/**
* 三个不共线的点确定一个平面,平面的法线方向遵循右手法制(顺时针和逆时针由第一个过第二个点向第三个点转确定)
*/
export interface clipPlanePointParam {
// 裁剪面第一个点
firstPoint: Point3D
// 裁剪面第二个点
secondPoint: Point3D
// 裁剪面第三个点
thirdPoint: Point3D
}
/** 三维图层裁剪参数 */
export interface clipAR3DLayerParam extends clipPlanePointParam {
/** 图层名字 */
layerName: string
// 剖切面(线)的颜色
color?: RGBA
// 是否清除上一次的裁剪结果 true:清除 false:不清除(不传默认为false)
// clearLast?: boolean
}
/**
* 根据指定平面裁剪三维图层 (裁剪面分析,按顺序设置三个顶点的位置,裁剪面分析的结果指只显示该面法线方向的部分,法线遵循右手法则,逆时针法线朝上,顺时针法线朝下,分析结果只显示大拇指方向上的模型结构。一个图层同一时间只能有一个剖切平面)
* @param clipParam 裁剪参数
* @returns 裁剪成功返回true,失败返回false
*/
export async function clipAR3DLayerByPlane(clipParam: clipAR3DLayerParam): Promise<boolean> {
if(Platform.OS !== 'android') return false
return await SARMap.clipAR3DLayerByPlane(clipParam)
}
/**
* 清除指定图层的裁剪面
* @param layerName 图层名字
* @returns 清除成功返回true, 失败返回false
*/
export async function clearAR3DLayerClipPlane(AR3DLayerName: string): Promise<boolean> {
if(Platform.OS !== 'android') return false
return await SARMap.clearAR3DLayerClipPlane(AR3DLayerName)
}
/**
* 获取指定三维图层的裁剪面
* @param AR3DLayerName 三维图层名字
* @returns 成功返回裁剪面
*/
export async function getAR3DLayerClipPlan(AR3DLayerName: string): Promise<clipPlanePointParam | null | undefined> {
if(Platform.OS !== 'android') return null
return await SARMap.getAR3DLayerClipPlan(AR3DLayerName)
}
/**
* 添加特效图层
* @param layerName 要添加的图层名
* @param effectPath 特效文件 .areffect 所在绝对路径
* @returns 返回添加的图层名称,失败返回空字符串
*/
export function addEffectLayer(layerName: string, effectPath: string): Promise<string> {
return SARMap.addEffectLayer(layerName, effectPath)
}
/**
* 移除AR图层
* @param layerName 要移除的图层名字
*/
export function removeARLayer(layerName: string): Promise<boolean> {
return SARMap.removeARLayer(layerName)
}
// ************************************
// AR 对象添加
// ************************************
/** 场景中对象的位置,旋转和缩放 */
export interface Transform {
/** 位置坐标 */
position: Vector3
/** 欧拉角或者四元数表示的角度 */
rotation: Vector3 | Quaternion
/** 缩放比例 */
scale: Vector3
}
/** 四元数 */
interface Quaternion {
x: number
y: number
z: number
w: number
}
/**
* 添加 ar media 对象(图片,视频或网页)
* @param layerName 要添加到的图层
* @param type ar图片,ar视频或ar网页的类型
* @param content 图片,视频,网页的地址
* @param initForm 初始的位置,旋转和缩放参数
*/
export function addARMedia(layerName: string, type: IARElementType['AR_IMAGE'] | IARElementType['AR_VIDEO'] | IARElementType['AR_WEBVIEW'], content: string, initForm?: Partial<Transform>): Promise<boolean> {
return SARMap.addARMedia(layerName, type, content, initForm)
}
/**
* 添加 ar text 对象
* @param layerName 要添加到的图层
* @param content 要添加的文字
* @param initForm 初始的位置,旋转和缩放参数
*/
export function addARText(layerName: string, content: string, initForm?: Partial<Transform>): Promise<boolean>{
return SARMap.addARText(layerName, content, initForm)
}
/**
* 获取 ARText 的文字
* @param layerName ar文本图层名
* @param id ARText对象id
* @returns ARText当前显示的文字
*/
export function getARText(layerName: string, id: number): Promise<string> {
return SARMap.getARText(layerName, id)
}
/**
* 设置 ARText 的文字
* @param layerName ar文本图层名
* @param id ARText对象id
* @param text 要设置的文本内容
*/
export function setARText(layerName: string, id: number, text: string): Promise<boolean> {
return SARMap.setARText(layerName, id, text)
}
/**
* 添加 ar 气泡文字 对象
* @param layerName 要添加到的图层
* @param content 要添加的文字
* @param initForm 初始的位置,旋转和缩放参数
* @platform android
*/
export async function addARBubbleText(layerName: string, content: string, initForm?: Partial<Transform>): Promise<boolean>{
if(Platform.OS !== 'android') return false
return await SARMap.addARBubbleText(layerName, content, initForm)
}
/**
* 往场景中添加模型
* @param layerName 要添加到的图层名
* @param modelPath 模型文件所在的绝对路径
* @param initForm 初始的位置,旋转和缩放参数
*/
export function addARModel(layerName: string, modelPath: string, initForm?: Partial<Transform>): Promise<boolean>{
return SARMap.addARModel(layerName, modelPath, initForm)
}
/**
* 往场景中添加沙盘模型
* @param layerName 要添加到的图层名
* @param sourcePath 沙盘xml文件所在绝对路径
* @param initForm 初始的位置,旋转和缩放参数
* @platform android
*/
export async function addARSandTable(layerName: string, sourcePath: string, initForm?: Partial<Transform>): Promise<boolean>{
if(Platform.OS !== 'android') return false
return await SARMap.addARSandTable(layerName, sourcePath, initForm)
}
/**
* 获取沙盘内容
* @param layerName 沙盘所在图层
* @param modelID 沙盘对象 elementid
* @returns 沙盘xml文件的json字符串
* @platform android
*/
export async function getARSandTableData(layerName: string, modelID: number): Promise<string>{
if(Platform.OS !== 'android') return ''
return await SARMap.getARSandTableData(layerName, modelID)
}
/**
* 修改沙盘内容
* @param layerName 沙盘所在图层
* @param modelID 沙盘对象 elementid
* @param json 沙盘xml文件的json字符串
* @throws 许可异常
* @platform android
*/
export async function setARSandTableData(layerName: string, modelID: number, json: string): Promise<boolean>{
if(Platform.OS !== 'android') return false
return await SARMap.setARSandTableData(layerName, modelID, json)
}
//********************** ar geometry ************************/
/**
* 添加 ar 矢量线 或矢量符号线的 节点对象
* @param layerName 要添加到的图层
* @param params 添加参数
* @platform android
*/
export async function addARLinePoint(layerName: string, params?: Partial<Pick<Transform, 'position'>>): Promise<boolean>{
if(Platform.OS !== 'android') return false
return await SARMap.addARLinePoint(layerName, params)
}
/**
* 取消(退出)添加 ar 矢量线 或矢量符号线的 节点对象
* @param layerName 图层名
* @platform android
*/
export async function exitAddARLine(layerName: string): Promise<boolean>{
if(Platform.OS !== 'android') return false
return await SARMap.exitAddARLine(layerName)
}
/**
* 撤销 ar 矢量线 或矢量符号线的 节点对象的添加操作
* @param layerName 图层名
* @platform android
*/
export async function cancelAddARLinePoint(layerName: string): Promise<boolean>{
if(Platform.OS !== 'android') return false
return await SARMap.cancelAddARLinePoint(layerName)
}
/**
* 添加 ar 矢量线 或矢量符号线的 对象
* @param layerName 图层名
* @platform android
*/
export async function addARLineElement(layerName: string): Promise<boolean>{
if(Platform.OS !== 'android') return false
return await SARMap.addARLineElement(layerName)
}
//********************** ar 小组件 ************************/
export interface MediaSource {
/** 图片绝对路径或 uri */
uri: string
/** 图片的时间戳 */
timestamp: number
}
/**
* 添加 ar相册 小组件 (流程图样式)
* @param layerName 要添加到的小组件图层名
* @param arPhotos 要添加的图片的信息
* @param albumName 相册标题
* @param initForm 初始的位置,旋转和缩放参数
* @platform android
*/
export async function addARAlbum(layerName: string, arPhotos: MediaSource[], albumName: string, initForm?: Partial<Transform>): Promise<boolean>{
if(Platform.OS !== 'android') return false
return await SARMap.addARAlbum(layerName, arPhotos, albumName, initForm)
}
/**
* 添加 ar属性相册 小组件(列表样式)
* @param layerName 要添加到的小组件图层名
* @param arPhotos 要添加的图片的信息
* @param albumName 相册标题
* @param initForm 初始的位置,旋转和缩放参数
*/
export function addARAttributeAlbum(layerName: string, arPhotos: MediaSource[], albumName: string, initForm?: Partial<Transform>): Promise<boolean>{
return SARMap.addARAttributeAlbum(layerName, arPhotos, albumName, initForm)
}
/**
* 添加 ar视频册 小组件
* @param layerName 要添加到的小组件图层名
* @param arPhotos 要添加的视频的信息
* @param albumName 相册标题
* @param alignment 排列样式 0: 循环, 1: 列表; ios 只支持列表
* @param initForm 初始的位置,旋转和缩放参数
*/
export function addARVideoAlbum(layerName: string, arPhotos: MediaSource[], albumName: string, alignment: 0 | 1, initForm?: Partial<Transform>): Promise<boolean>{
return SARMap.addARVideoAlbum(layerName, arPhotos, albumName, alignment, initForm)
}
/**
* 添加 ar地图册 小组件
* @param layerName 要添加到的小组件图层名
* @param mapPath 地图相对应用目录的路径
* @param albumName 相册标题
* @param initForm 初始的位置,旋转和缩放参数
* @platform android
*/
export async function addARMapAlbum(layerName: string, mapPath: string[], albumName: string, initForm?: Partial<Transform>): Promise<boolean>{
if(Platform.OS !== 'android') return false
return await SARMap.addARMapAlbum(layerName, mapPath, albumName, initForm)
}
/**
* 添加地图册ai配图使用的图片
* @param layerName 地图相册所在图层
* @param id 地图相册的id
* @param pics ai配图的图片绝对路径或uri路径
* @platform android
*/
export async function addAIPictureToMapAlbum(layerName: string, id: number, pics: string[]): Promise<boolean>{
if(Platform.OS !== 'android') return false
return SARMap.addAIPictureToMapAlbum(layerName, id, pics)
}
/**
* 添加 ar沙盘册 小组件
* @param layerName 要添加到的小组件图层名
* @param sourcePaths 沙盘xml的绝对路径
* @param albumName 相册标题
* @param initForm 初始的位置,旋转和缩放参数
* @platform android
*/
export async function addARSandTableAlbum(layerName: string, sourcePaths: string[], albumName:string, initForm?: Partial<Transform>): Promise<boolean>{
if(Platform.OS !== 'android') return false
return await SARMap.addARSandTableAlbum(layerName, sourcePaths, albumName, initForm)
}
/** 单个图表数据 */
interface ChartData {
/** 数据名称 */
name: string,
/** 数据值 */
value: string,
/** 16进制的颜色字符串,格式:#RRGGBB 或 #AARRGGBB */
color: string,
}
/** 图表数据 */
interface Chart {
/** 图标数据数组 */
data: Array<ChartData>,
/** 单位字符串 */
unit: string
}
/**
* 添加 ar柱状图 小组件
* @param layerName 要添加到的小组件图层名
* @param data 图表数据
* @param initForm 初始的位置,旋转和缩放参数
* @platform android
*/
export async function addBarChart(layerName: string, data: Chart, initForm?: Partial<Transform>): Promise<boolean>{
if(Platform.OS !== 'android') return false
return await SARMap.addBarChart(layerName, data, initForm)
}
/**
* 修改 ar柱状图 小组件
* @param layerName 柱状图小组件所在图层名
* @param id 柱状图小组件的id
* @param data 要更新的图表数据
* @platform android
*/
export async function updateBarChart(layerName: string, id: number, data: Chart): Promise<boolean>{
if(Platform.OS !== 'android') return false
return await SARMap.updateBarChart(layerName, id, data)
}
/**
* 获取 ar柱状图 小组件的数据信息
* @param layerName 柱状图小组件所在图层名
* @param id 柱状图小组件的id
* @returns 柱状图小组件的图表数据信息
* @platform android
*/
export async function getBarChartData(layerName: string, id: number): Promise<Chart | null | undefined>{
if(Platform.OS !== 'android') return null
return await SARMap.getBarChartData(layerName, id)
}
/**
* 添加 ar饼图 小组件
* @param layerName 要添加到的小组件图层名
* @param data 图表数据
* @param initForm 初始的位置,旋转和缩放参数
* @platform android
*/
export async function addARPieChart(layerName: string, data: ChartData[], initForm?: Partial<Transform>): Promise<boolean>{
if(Platform.OS !== 'android') return false
return await SARMap.addARPieChart(layerName, data, initForm)
}
/**
* 修改 ar饼图 小组件
* @param layerName 饼图小组件所在图层名
* @param id 饼图小组件的id
* @param data 要更新的图表数据
* @param initForm 初始的位置,旋转和缩放参数
* @platform android
*/
export async function updatePieChart(layerName: string, id: number, data: ChartData[]): Promise<boolean>{
if(Platform.OS !== 'android') return false
return await SARMap.updatePieChart(layerName, id, data)
}
/**
* 获取 ar饼图 小组件的数据信息
* @param layerName 饼图小组件所在图层名
* @param id 饼图小组件的id
* @returns 饼图小组件的图表数据信息
* @platform android
*/
export async function getPieChartData(layerName: string, id: number): Promise<ChartData[]>{
if(Platform.OS !== 'android') return []
return await SARMap.getPieChartData(layerName, id)
}
//*********************** 修改对象 ************************************************/
/**
* 删除编辑中的AR对象
*/
export function removeEditElement(): Promise<boolean> {
return SARMap.removeEditElement()
}
/**
* poi 模型参数化变换
* 增量修改AR对象的位置,旋转及缩放
*/
export function setARElementTransform(params: IARTransform): Promise<boolean> {
return SARMap.setARElementTransform(params)
}
/**
* 设置 ar对象 ({@link ARElement}) 的AR坐标
* @param element ar对象所在图层名及id
* @param position 要设置的ar坐标
*/
export function setARElementPosition(element: Pick<ARElement,'layerName' | 'id'>, position: Vector3): Promise<boolean> {
return SARMap.setARElementPosition(element, position)
}
/**
* 设置 AR 场景图层 ({@link ARSceneLayer}) 的AR坐标
*
* 设置场景图层的ar坐标后,其所有子节点(即AR3维图层({@link AR3DLayer}))均会跟随移动
* @param arSceneLayerName AR 场景图层名称
* @param position 要设置的ar坐标
*/
export function setARSceneLayerPosition(arSceneLayerName: string, position: Vector3): Promise<boolean> {
return SARMap.setARSceneLayerPosition(arSceneLayerName, position)
}
/**
* 设置 AR 3维图层 ({@link AR3DLayer}) 的AR坐标
* @param ar3dlayerName AR 3维图层名称
* @param position 要设置的ar坐标
*/
export function setAR3DLayerPosition(ar3dlayerName: string, position: Vector3): Promise<boolean> {
return SARMap.setAR3DLayerPosition(ar3dlayerName, position)
}
/**
* 设置 AR 3维图层 ({@link AR3DLayer}) 相对于场景图层({@link ARSceneLayer})的局部坐标
*
* 设置相对与场景图层的局部坐标时,3维图层最终在AR场景的坐标会受到其父节点(即场景图层)的位置,旋转及缩放影响。
* @param ar3dlayerName AR 3维图层名称
* @param position 相对与场景图层的ar局部坐标
*/
export function setAR3DLayerLocalPosition(ar3dlayerName: string, localPosition: Vector3): Promise<boolean> {
return SARMap.setAR3DLayerLocalPosition(ar3dlayerName, localPosition)
}
/**
* 修改小组件的标题
* @param layerName {@link ARLayerType[AR_WIDGET_LAYER]} 图层名
* @param id 要修改的小组件的id
* @param title 要修改的标题
*/
export function setARWidgetTitle(layerName: string, id: number, title:string): Promise<boolean>{
return SARMap.setARWidgetTitle(layerName, id, title)
}
/** 相册小组件风格 */
interface NodeStyle extends Omit<WidgetTextStyle, 'TextFlags'> {
Flags: number
ButtonTextSize: number
/** 标题字体颜色 */
TextColor: string
LineColor: string
TimeColor: string
/** Node排列方式 */
Array: number
/** 填充颜色,背景色 */
fillColor: string
/** 透明度 0-1 */
opacity: number
/** 边框颜色 */
borderColor: number
/** 边框宽度 单位:米*/
borderWidth: number
/** 标题字体透明度 */
TextOpacity: number
}
/** 相册小组件字体风格 */
interface WidgetTextStyle {
TextShadow: number
TextBold: number
TextFlags: number
/** 标题字体大小 */
TextSize: number
/** 标题字体旋转角度 */
TextRotation: number
}
/**
* 修改相册小组件风格
* @param style 要设置的风格,一次只能设置一个
* @param widget 要修改的对象
*/
export function setNodeStyle(style: Partial<NodeStyle>, widget: ARElement): Promise<boolean>{
return SARMap.setNodeStyle(style, widget)
}
/**
* 获取小组件字体相关风格
* @param params 小组件对象
* @returns 小组件字体相关风格
*/
export function getNodeStyle(widget: ARElement): Promise<WidgetTextStyle | undefined | null>{
return SARMap.getNodeStyle(widget)
}
export type ARWidgetStyle = ARBarChartStyle
| ARPieChartStyle
| NodeStyle
/** 柱状图风格 */
interface ARBarChartStyle {
TextColor: string
TextOpacity: number
opacity: number
fillColor: string
TextSize: number
}
/** 饼图风格 */
interface ARPieChartStyle {
TextColor: string
TextOpacity: number
fillColor: string
TextSize: number
}
/** 其他风格 */
interface NodeStyle {
TextSize: number
TextRotation: number
ButtonTextSize: number
TextOpacity: number
opacity: number
borderWidth: number
}
/**
* 获取小组件当前显示的风格
* @param params 小组件对象
* @returns 对应小组件当前显示的风格
*/
export function getCurrentNodeStyle(params: ARElement): Promise<ARWidgetStyle | undefined | null>{
return SARMap.getCurrentNodeStyle(params)
}
// ************************************
// Animation 对象设置动画
// ************************************
/**
* 添加动画到resource
* @param param 动画参数
* @returns 成功返回 resourceID,失败返回 -1
* @platform android
*/
export async function addAnimation(param: ARModelAnimatorParameter | ARNodeAnimatorParameter): Promise<number> {
if(Platform.OS !== 'android') return -1
return await SARMap.addAnimation(param)
}
/**
* 从resource中移除动画
* @param id 动画的resourceID
*/
export async function removeAnimation(id: number): Promise<boolean> {
return await SARMap.removeAnimation(id)
}
/**
* 编辑动画
* @param id 动画的resourceID
* @param param 动画参数
* @platform android
*/
export async function editAnimation(id: number, param: ARModelAnimatorParameter | ARNodeAnimatorParameter): Promise<boolean> {
if(Platform.OS !== 'android') return false
return await SARMap.editAnimation(id, param)
}
/**
* 获取AR地图资源中所有的动画
* @returns 所有动画参数
* @platform android
*/
export async function getAnimations(): Promise<((ARModelAnimatorParameter & {id: number}) | (ARNodeAnimatorParameter & {id: number}))[]> {
if(Platform.OS !== 'android') return []
return await SARMap.getAnimations()
}
/**
* 设置动画到AR对象
* @param layerName AR对象所在图层
* @param elementID AR对象id
* @param animationID 动画的resourceID
*/
export async function setAnimation(layerName: string, elementID: number, animationID: number): Promise<boolean> {
if(Platform.OS !== 'android') return false
return await SARMap.setAnimation(layerName, elementID, animationID)
}
/**
* 移除AR对象的动画
* @param layerName AR对象所在图层
* @param elementID AR对象id
*/
export function clearAnimation(layerName: string, elementID: number): Promise<boolean> {
return SARMap.clearAnimation(layerName, elementID)
}
/** glb模型中的动画 */
export interface ModelAnimation {
/** 动画id */
id: number
/** 动画名 */
name: string
/** 动画持续时间 */
duration: number
}
/**
* 获取模型自带动画列表
* @param layerName 模型所在图层
* @param modelID 模型对象id
* @returns 模型中的动画列表
*/
export function getModelAnimation(layerName: string, modelID: number): Promise<ModelAnimation[]> {
return SARMap.getModelAnimation(layerName, modelID)
}
/**
* 添加模型动画到resource
* 成功返回 resourceID
* 失败返回 -1
* @deprecated 使用 {@link addAnimation}
* @platform ios
*/
export function addNodeAnimation(params: IAnimationParam): Promise<number> {
return SARMap.addNodeAnimation(params)
}
/**
* 重命名动画
* @platform ios
* @deprecated 使用 {@link editAnimation} 修改
*/
export async function renameAnimation(id: number, name: string): Promise<boolean> {
return await SARMap.renameAnimation(id, name)
}
/**
* 获取当前地图的动画列表
* @deprecated 使用 {@link getAnimations}
* @platform ios
*/
export function getAnimationList(): Promise<{id: number, name: string, type: 'rotation' | 'translation'}[]> {
return SARMap.getAnimationList()
}
/**
* 设置模型动画
* @param animationID 动画id, -1 为取消动画
* @deprecated 使用 {@link setAnimation}
*