UNPKG

@tslsmart/map_adapter

Version:

an adapter for maps,基于高德JSAPI 2.0,百度JavaScript API GL,arcgis api for javascript 3.23,光辉城市及51world sdk

610 lines (598 loc) 19.5 kB
import { mapType } from "../js/MapLocalConfig" import SheencityAdapter from "../js/SheencityAdapter" import WYAdapter from "../js/WYAdapter" import TacosAdapterV4 from "../js/TacosAdapterV4" /** * @class Map3DAdapter * @classdesc 3d地图接口适配器 * 约定: * 1、id作为唯一标识 */ export class Map3DAdapter { /** * 构造函数 * @param {string} div 地图容器dom id */ constructor(div) { switch (window.mapconfig.mapType) { case mapType.Diva: this.mapInstance = new SheencityAdapter(div, window.mapconfig.url, window.mapconfig.key, window.mapconfig.log) break case mapType.SuperAPI: this.mapInstance = new WYAdapter(div, window.mapconfig.url, window.mapconfig.key) break case mapType.TacosSDK: // if (window.mapconfig.version && window.mapconfig.version == 4) { this.mapInstance = new TacosAdapterV4(div) // } else { // this.mapInstance = new TacosAdapter(div) // } break } } // async consFunc(div, callback) { // switch (window.mapconfig.mapType) { // case mapType.Diva: // var mMapAdapter = await import('../js/SheencityAdapter.js') // this.mapInstance = new mMapAdapter.default(div, window.mapconfig.url, window.mapconfig.key) // break // case mapType.SuperAPI: // var mMapAdapter = await import('../js/WYAdapter.js') // this.mapInstance = new mMapAdapter.default(div, window.mapconfig.url, window.mapconfig.key) // break // case mapType.TacosSDK: // var mMapAdapter = await import('../js/TacosAdapter.js') // this.mapInstance = new mMapAdapter.default( // div, // window.mapconfig.url, // window.mapconfig.mapping, // window.mapconfig.modelPath // ) // break // } // this.mapInstance.initialInstance(function (map) { // callback(map) // }) // } /** * 加载地图实例 * @param {Event} callback 加载地图实例回调函数 */ loading(callback) { // this.consFunc(this.div, callback) this.mapInstance.initialInstance(function (map) { callback(map) }) } /** * 加载场景 * @param {object} sceneOpts 场景参数 {name:'',changeCamera:true/false} * @param {function} callback 回调函数 */ loadScene(sceneOpts, callback) { this.mapInstance.loadScene(sceneOpts, function (e) { callback(e) }) } /** * 设置镜头参数 * @param {CameraInfo} info 镜头参数类 * @returns 成功、失败回调 */ setCameraInfo(info) { return this.mapInstance.setCameraInfo(info) } /** * 获得镜头参数 * @returns CameraInfo 镜头参数 */ async getCameraInfo() { return await this.mapInstance.getCameraInfo() } /** * 设置镜头绕场景中心点旋转 * @param {number} time 旋转一周所需要的时间,单位秒 * @param {RotateDirection} direction 旋转方向,clockwise:顺时针; anticlockwise:逆时针; stop:停止旋转 * @returns 成功、失败回调 */ setCameraRotate(options) { return this.mapInstance.setCameraRotate(options) } /** * 场景镜头限制 * @param {object} options 镜头参数 * @param {number[]} options.pitch 俯仰角范围 * @param {number[]} options.yaw 偏航角范围 * @param {object} options.boundingBox {min:[x1,y1,z1],max:[x2,y2,z2]} 镜头坐标限制范围 * @param {number} options.minDistance 最小镜头距离 * @param {number} options.maxDistance 最大镜头距离 * @param { boolean} options.isGeoData 镜头坐标范围是否为经纬度 */ setCameraLimit(options) { return this.mapInstance.setCameraLimit( options.pitch, options.yaw, options.boundingBox, options.minDistance, options.maxDistance, options.isGeoData ) } /** * 设置渲染分辨率(51World和光辉城市支持) * @param {number} width 宽 * @param {number} height 高 */ setResolution(width, height) { return this.mapInstance.setResolution(width, height) } /** * 取消镜头限制 */ removeCameraLimit() { return this.mapInstance.removeCameraLimit() } /** * 开启镜头移动 * @param {object} options 镜头移动参数 * @param {number} options.duration 漫游持续时间 * @param {number} options.speed 漫游速度,单位米/秒 * @param {boolean} options.loop 是否循环 * @param {number} options.armDistance 镜头沿视角到路径的距离,单位米 * @param {number} options.roll 翻滚角 * @param {number} options.pitch 俯仰角 * @param {number} options.yaw 偏航角 * @param {number[][]} options.path 路径点 * @param {array} coordinate 路径点(经纬度) * @returns 成功、失败回调 */ async startThirdPersonRoaming(options) { return await this.mapInstance.startThirdPersonRoaming(options) } /** * 暂停镜头移动 * @returns 成功、失败回调 */ pauseThirdPersonRoaming() { return this.mapInstance.pauseThirdPersonRoaming() } /** * 继续镜头移动 * @returns 成功、失败回调 */ continueThirdPersonRoaming() { return this.mapInstance.continueThirdPersonRoaming() } /** * 停止镜头移动 * @returns 成功、失败回调 */ stopThirdPersonRoaming() { return this.mapInstance.stopThirdPersonRoaming() } /** * 开始播放动画(diva,51world,tacos) * @param {object} options 动画播放参数 * @param {string} objId 实体对象id * @param {string} name 动画名称 * @param {number} start 起始帧 * @param {number} end 结束帧 * @param {boolean} loop 是否循环 */ async playAnimation(options) { return await this.mapInstance.playAnimation(options) } /** * 暂停动画播放 */ async pauseAnimation(id) { return await this.mapInstance.pauseAnimation(id) } /** * 继续动画播放 */ async continueAnimation(id) { return await this.mapInstance.continueAnimation(id) } /** * 停止动画播放 */ async stopAnimation(id) { return await this.mapInstance.stopAnimation(id) } /** * 镜头聚焦实体 * @param {string} id 聚焦目标实体的 id * @param {number} distance 距离,单位米 * @param {EntityType} type 物体类型 * @returns 成功、失败回调 */ focusEntity(options) { return this.mapInstance.focusEntity(options) } /** * 销毁实体 * @param {string} id 需要销毁的实体id * @param {EntityType} type 物体类型 * @returns 成功、失败回调 */ async destroyEntity(id, type) { return await this.mapInstance.destroyEntity(id, type) } /** * 高亮实体 * @param {string} id 高亮实体id * @param {number[]} borderColor 高亮实体边颜色[r,g,b] * @param {number[]} color 实体外立面颜色[r,g,b,a] (51,diva) * @param {number} borderSize 边框宽 (diva) * @param {object} flashingOpts 描边动效参数(diva) * @param {boolean} flashingOpts.enabled 是否启动描边动效(diva) * @param {number[]} flashingOpts.color 实体外表面颜色[r,g,b](diva) * @param { number} flashingOpts.duration 循环周期,单位s(diva) * @param {number } flashingOpts.intensity 循环强度(diva) * @returns 成功、失败回调 */ highlightEntity(options) { return this.mapInstance.highlightEntity( options.id, options.borderColor, options.color, options.borderSize, options.flashingOpts ) } /** * 取消高亮实体 * @param {string} id 取消高亮实体id * @returns 成功、失败回调 */ restoreEntity(id) { return this.mapInstance.restoreEntity(id) } /** * 隐藏实体 * @param {array} options.ids 隐藏实体id数组 * @param {string} options.path 隐藏实体所在路径(diva) * @returns 成功、失败回调 */ hideEntity(options) { return this.mapInstance.hideEntity(options.ids, options.path) } /** * 显示实体 * @param {array} options.ids 显示实体id数组 * @param {string} options.path 显示实体所在路径(diva) * @returns 成功、失败回调 */ showEntity(options) { return this.mapInstance.showEntity(options.ids, options.path) } /** * 创建POI * @param {POI} poidata POI点数据类 * @returns 成功、失败回调 */ addPOI(poidata) { return this.mapInstance.addPOI(poidata) } updatePOI(poidata) { return this.mapInstance.updatePOI(poidata) } /** * 根据id获取实体信息 * 【注:51world superapi 需要点击对应实体获得id】 * @param {string} id 实体id * @returns 实体信息 */ getEntityByID(id) { return this.mapInstance.getEntityByID(id) } /** * 获取场景内所有实体 * @returns 场景内所有实体信息 */ getAllEntityIds() { return this.mapInstance.getAllEntityIds() } // getClickPosition () { // return this.mapInstance.getClickPosition() // } /** * 设置环境时间 * @param {number} datetime 时间戳 * @returns 成功、失败回调 */ setDateTime(datetime) { return this.mapInstance.setDateTime(datetime) } /** * 设置天气 * @param {Weather} name 天气 * @returns 成功、失败回调 */ setWeather(name) { return this.mapInstance.setWeather(name) } /** * 创建热力图 * @param {object} options 热力图参数 * @param {string} options.id 热力图id * @param {number} options.radius 热力半径,单位米 * @param {number[]} options.minCoord 区域最小坐标 [x,y,z] * @param {number[]} options.maxCoord 区域最大坐标 [x,y,z] * @param {number[][]} options.posvalue 位置与数据,[[x,y,value],..] * @param { boolean} options.isGeoData 热力数据是否为经纬度 * @returns 成功、失败回调 */ async createHeatmap(options) { return await this.mapInstance.createHeatmap(options) } /** * 创建弹窗 * @param {object} options 弹窗参数 * @param {string} options.poiId 需要创建弹窗的实体id * @param {string} options.windowID 创建弹窗的id * @param {string} options.windowUrl 弹窗内容html地址 * @param {number} options.width 窗口宽,单位像素 * @param {number} options.height 窗口高,单位像素 * @param {number} options.xoffset 弹窗左上角相对横向偏移量,单位像素 * @param {number} options.yoffset 弹窗左上角相对纵向偏移量,单位像素 * @param {EntityType} options.type 要创建弹窗的实体类型 * @returns 成功、失败回调 */ async addInfowindow(options) { return await this.mapInstance.addInfowindow(options) } /** * 销毁弹窗 *【注:51world superapi存在无法取消实体选中状态问题,若再次addInfowindow需要点击两次,第一次取消实体焦点,第二次点击实体出现弹窗】 * @param {string} poiId 绑定弹窗的实体id * @param {string} windowID 弹窗id * @param {EntityType} type 绑定弹窗的实体类型 * @returns 成功、失败回调 */ async destroyInfowindow(poiId, windowID, type) { return await this.mapInstance.destroyInfowindow(poiId, windowID, type) } /** * 更新弹窗位置(tacos 4) * @param {*} options * @returns */ async updateInfowindow(options) { return await this.mapInstance.updateInfowindow(options.id, options.position) } /** * 楼层展开(diva) * diva 支持两种方式,【1.按楼层id数组展开。2.按楼层目录结构展开】 * @param {object} options 展开楼层参数 * @param {string} options.building 需要展开的建筑id/需要展开的建筑路径(diva,从根目录开始,e.g., 产业园区/楼栋/1#) * @param {string[]} options.floorIds 需要展开的楼层id/楼层文件路径(tacos) * @param {number} options.space 展开后楼层间间隔距离,单位米 * @param {string} options.floor 楼层号 * @param {number} options.floorHeight 楼层高度,单位米(diva) * @returns 成功、失败回调 */ explodeEntity(options) { return this.mapInstance.explodeEntity(options) } /** * 楼层还原 * @param {string} buildingId 需要展开的建筑id/建筑路径(diva) * @param {string[]} floorIds 需要展开的楼层id * @returns 成功、失败回调 */ unexplodedEntity(buildingId, floorIds) { return this.mapInstance.unexplodedEntity(buildingId, floorIds) } /** * 显示楼层平面 * @param {object} options 楼、层参数 * @param {string} buildingId 需要显示楼层的建筑(diva为建筑路径,从根目录开始,e.g., 产业园区/楼栋/1#) * @param {string} floor 显示的楼层id,若缺失,显示整个建筑 * @param {string} pattern 匹配楼层路径正则表达式(仅diva) * @returns 成功、失败回调 */ async exploreFloor(options) { return await this.mapInstance.exploreFloor(options) } /** * 添加模型实体 * @param {object} options 模型参数 * @param {string} options.id 模型实体id * @param {number[]} options.position 位置 [x,y,z] * @param {string} options.resourceName 资源库中资源的名称 * @param {number} options.roll 翻滚角 * @param {number} options.pitch 俯仰角 * @param {number} options.yaw 偏航角 * @param {number[]} options.scale 比例 [scaleX,scaleY,scaleZ] * @returns 成功、失败回调 */ addModel(options) { return this.mapInstance.addModel(options) } /** * 开启模型移动 * @param {object} options 模型移动参数 * @param {string} options.id 模型实体id * @param {number} options.duration 移动持续时间 * @param {number} options.speed 速度,单位米/秒 * @param {boolean} options.loop 是否循环 * @param {number[][]} options.path 路径点 * @param {number} options.roll 翻滚角 * @param {number} options.pitch 俯仰角 * @param {number} options.yaw 偏航角 * @returns 成功、失败回调 */ startEntityMoving(options) { return this.mapInstance.startEntityMoving(options) } /** * 暂停模型移动 * @param {string} id 模型实体id * @returns 成功、失败回调 */ pauseEntityMoving(id) { return this.mapInstance.pauseEntityMoving(id) } /** * 继续模型移动 * @param {string} id 模型实体id * @returns 成功、失败回调 */ resumeEntityMoving(id) { return this.mapInstance.resumeEntityMoving(id) } /** * 停止模型移动 * @param {string} id 模型实体id * @returns 成功、失败回调 */ stopEntityMoving(id) { return this.mapInstance.stopEntityMoving(id) } /** * 创建特效 * @param {object} options 特效参数 * @param {string} options.id 特效id * @param {string} options.resourceName 资源库中资源的名称 * @param {number[]} options.position 特效位置,[x,y,z] * @param {number} options.roll 翻滚角 * @param {number} options.pitch 俯仰角 * @param {number} options.yaw 偏航角 * @param {number[]} options.scale 比例 [scaleX,scaleY,scaleZ] * @returns 成功、失败回调 */ async addEffect(options) { return await this.mapInstance.addEffect(options) } /** * 创建三维文字(51world,diva) * @param {object} options 文字参数 * @param {string} options.id 文字id * @param {string} options.text 文字内容 * @param {number[]} options.position 文字位置,[x,y,z] * @param {number[]} options.color 颜色 [r,g,b,a] * @param {number} options.roll 翻滚角 * @param {number} options.pitch 俯仰角 * @param {number} options.yaw 偏航角 * @param {number[]} options.scale 比例 [scaleX,scaleY,scaleZ] * @param {number} options.thickness 厚度 * @returns 成功、失败回调 */ add3dText(options) { return this.mapInstance.add3dText( options.id, options.text, options.position, options.coordinate, options.color, options.roll, options.pitch, options.yaw, options.scale, options.thickness ) } /** * 更新三维文字(51world,diva) * @param {object} options 更新文字参数 */ update3dText(options) { return this.mapInstance.update3dText(options) } /** * 创建路径 * @param {object} options 路径参数 * @param {string} id 路径id * @param {number[][]} path 路径点 * @param {PathStyle} pathStyle 路径样式 * @param {string} pathStyleName 路径样式名 * @param {number[]} color 颜色 [r,g,b,a] * @param {number} width 宽度 * @returns 成功、失败回调 */ async addPath(options) { return await this.mapInstance.addPath(options) } /** * 创建区域 * @param {object} options 区域参数 * @param {string} id 区域id * @param {number[][]} path 路径点 * @param {AreaStyle} areaStyle 区域样式(立面) * @param {number[]} color 颜色 [r,g,b,a] * @param {number} height 区域高度,单位米 * @param {AreaStyle} topStyle 区域样式(顶面) * @param {AreaStyle} bottomStyle 区域样式(底面) * @returns 成功、失败回调 */ async addArea(options) { return await this.mapInstance.addArea(options) } /** * 设置模型变换参数 * @param {object} options * @returns */ setModelTransform(options) { return this.mapInstance.setModelTransform( options.id, options.duration, options.position, options.coordinate, options.roll, options.pitch, options.yaw, options.scale, options.loop ) } /** * 复原,停止模型变换 * @param {string} id 停止模型变换id * @param {boolean} reset 是否恢复最初状态 * @returns */ resetModelTransform(id, reset) { return this.mapInstance.resetModelTransform(id, reset) } /** * 销毁实例 */ destroyMap() { this.mapInstance.destroyMap() } /** *注册鼠标事件 * @param {string} eventType mouseover,mouseout,click, * @param {function} callback */ on(eventType, callback) { this.mapInstance.addEventListener(eventType, function (e) { callback(e) }) } /** * 移除鼠标事件 * @param {string} eventType mouseover,mouseout,click, */ off(eventType) { this.mapInstance.removeEventListener(eventType) } subscribeEvents(eventType, callback) { this.mapInstance.subscribeEvents(eventType, function (e) { callback(e) }) } unsubscribeEvents(eventType) { this.mapInstance.unsubscribeEvents(eventType) } // enableDragging (name) { // this.mapInstance.mapEditor.enableDragging(name) // } // disableDragging () { // } // saveEditing () { // } }