diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..16f70fa --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "tabWidth": 4, + "singleQuote": true, + "semi": false, + "printWidth": 100, + "trailingComma": "all", + "endOfLine": "auto" +} diff --git a/README.md b/README.md index e69de29..2b4426e 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,75 @@ +# 博诺思管理系统 + +基于若依框架和 Element Plus 组件库构建的企业级组件管理系统。 + +## 环境要求 + +- Node.js 18.0 或更高版本 +- npm 或 yarn + +## 快速开始 + +### 1. 安装依赖 + +```bash +npm install +``` + +### 2. 启动开发服务器 + +```bash +npm run dev +``` + +项目将在 `http://localhost:80` 启动 + +## 项目说明 + +### Mock 数据 + +项目已集成 Mock 数据模拟,无需后端即可进行开发和测试: + +- **登录接口**:任意用户名密码即可登录(验证码输入任意 4 位数字) +- **菜单数据**:自动加载模拟菜单数据 +- Mock 数据位于 `mock/` 目录 + +### 组件库 + +基于 Element Plus 进行二次封装,当前已封装: + +- **ComButton**:按钮组件(示例) +- 更多组件持续封装中... + +## 常用命令 + +```bash +# 开发环境 +npm run dev + +# 生产构建 +npm run build:prod + +# 预览构建结果 +npm run preview +``` + +## 技术栈 + +- Vue 3 + Vite +- Element Plus +- Pinia +- Vue Router +- Axios + +## 项目结构 + +``` +├── mock/ # Mock 数据 +├── src/ +│ ├── api/ # API 接口 +│ ├── components/ # 公共组件 +│ ├── views/ # 页面视图 +│ ├── router/ # 路由配置 +│ └── store/ # 状态管理 +└── vite.config.js # Vite 配置 +``` diff --git a/mock/menu.json b/mock/menu.json index d39def5..307a1e4 100644 --- a/mock/menu.json +++ b/mock/menu.json @@ -23,7 +23,37 @@ "name": "showText", "meta": { "title": "文本组件", - "icon": "text" + "icon": "table" + } + }, + { + "name": "ShowTable", + "path": "showTable", + "hidden": false, + "component": "showComponents/showTable/index", + "meta": { + "title": "表格组件", + "icon": "table", + "noCache": false, + "link": null + } + }, + { + "path": "showMap", + "component": "showComponents/showMap/index", + "name": "showMap", + "meta": { + "title": "地图组件", + "icon": "table" + } + }, + { + "path": "showDialog", + "component": "showComponents/showDialog/index", + "name": "showDialog", + "meta": { + "title": "弹窗组件", + "icon": "table" } } ] diff --git a/package.json b/package.json index cdda7fd..3a03e5b 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ }, "dependencies": { "@element-plus/icons-vue": "2.3.1", + "@turf/turf": "^7.3.1", "@vueup/vue-quill": "1.2.0", "@vueuse/core": "13.3.0", "axios": "1.9.0", @@ -29,22 +30,27 @@ "js-cookie": "3.0.5", "jsencrypt": "3.3.2", "lodash-es": "^4.17.21", + "mars3d": "^3.10.11", + "mars3d-cesium": "^1.136.0", "nprogress": "0.2.0", "pinia": "3.0.2", "splitpanes": "4.0.4", "vue": "3.5.16", "vue-cropper": "1.1.1", + "vue-draggable-plus": "^0.6.0", "vue-router": "4.5.1", "vuedraggable": "4.1.0" }, "devDependencies": { "@vitejs/plugin-vue": "5.2.4", + "less": "^4.5.1", "mockjs": "^1.1.0", "sass-embedded": "1.89.1", "unplugin-auto-import": "0.18.6", "unplugin-vue-setup-extend-plus": "1.0.1", "vite": "6.3.5", "vite-plugin-compression": "0.5.1", + "vite-plugin-mars3d": "^4.2.2", "vite-plugin-mock": "^3.0.2", "vite-plugin-svg-icons": "2.0.1" }, diff --git a/src/assets/3d/tower_1.glb b/src/assets/3d/tower_1.glb new file mode 100644 index 0000000..04ca9a1 Binary files /dev/null and b/src/assets/3d/tower_1.glb differ diff --git a/src/assets/3d/tower_2.glb b/src/assets/3d/tower_2.glb new file mode 100644 index 0000000..7126bf3 Binary files /dev/null and b/src/assets/3d/tower_2.glb differ diff --git a/src/assets/icons/svg/columnConfig.svg b/src/assets/icons/svg/columnConfig.svg new file mode 100644 index 0000000..78d752d --- /dev/null +++ b/src/assets/icons/svg/columnConfig.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/map/icon_five_new.png b/src/assets/images/map/icon_five_new.png new file mode 100644 index 0000000..0345c10 Binary files /dev/null and b/src/assets/images/map/icon_five_new.png differ diff --git a/src/assets/images/map/icon_four_new.png b/src/assets/images/map/icon_four_new.png new file mode 100644 index 0000000..2a2d241 Binary files /dev/null and b/src/assets/images/map/icon_four_new.png differ diff --git a/src/assets/images/map/icon_one_new.png b/src/assets/images/map/icon_one_new.png new file mode 100644 index 0000000..25b12c8 Binary files /dev/null and b/src/assets/images/map/icon_one_new.png differ diff --git a/src/assets/images/map/icon_seven_new.png b/src/assets/images/map/icon_seven_new.png new file mode 100644 index 0000000..4ca455c Binary files /dev/null and b/src/assets/images/map/icon_seven_new.png differ diff --git a/src/assets/images/map/icon_three_new.png b/src/assets/images/map/icon_three_new.png new file mode 100644 index 0000000..6392c74 Binary files /dev/null and b/src/assets/images/map/icon_three_new.png differ diff --git a/src/assets/images/map/icon_two_new.png b/src/assets/images/map/icon_two_new.png new file mode 100644 index 0000000..7a21958 Binary files /dev/null and b/src/assets/images/map/icon_two_new.png differ diff --git a/src/assets/images/map/project.png b/src/assets/images/map/project.png new file mode 100644 index 0000000..6ec40af Binary files /dev/null and b/src/assets/images/map/project.png differ diff --git a/src/assets/images/map/sd.png b/src/assets/images/map/sd.png new file mode 100644 index 0000000..d5fcb25 Binary files /dev/null and b/src/assets/images/map/sd.png differ diff --git a/src/assets/images/map/zt_gary.png b/src/assets/images/map/zt_gary.png new file mode 100644 index 0000000..9b9fbd1 Binary files /dev/null and b/src/assets/images/map/zt_gary.png differ diff --git a/src/assets/images/map/zt_green.png b/src/assets/images/map/zt_green.png new file mode 100644 index 0000000..927352b Binary files /dev/null and b/src/assets/images/map/zt_green.png differ diff --git a/src/assets/images/map/zt_orange.png b/src/assets/images/map/zt_orange.png new file mode 100644 index 0000000..7e7fd4c Binary files /dev/null and b/src/assets/images/map/zt_orange.png differ diff --git a/src/assets/images/map/zt_red.png b/src/assets/images/map/zt_red.png new file mode 100644 index 0000000..7ac847c Binary files /dev/null and b/src/assets/images/map/zt_red.png differ diff --git a/src/components/ComButton/index.vue b/src/components/ComButton/index.vue index a7a1d3d..421572a 100644 --- a/src/components/ComButton/index.vue +++ b/src/components/ComButton/index.vue @@ -13,88 +13,90 @@ :disabled="disabled" :autofocus="autofocus" @click="onButtonClick" - v-bind="omit(attrs, ['onClick'])"> + v-bind="omit(attrs, ['onClick'])" + > diff --git a/src/components/ComDataTable/ColumnSetting.vue b/src/components/ComDataTable/ColumnSetting.vue new file mode 100644 index 0000000..9f6f3dc --- /dev/null +++ b/src/components/ComDataTable/ColumnSetting.vue @@ -0,0 +1,239 @@ + + + + + diff --git a/src/components/ComDataTable/index.vue b/src/components/ComDataTable/index.vue new file mode 100644 index 0000000..029678f --- /dev/null +++ b/src/components/ComDataTable/index.vue @@ -0,0 +1,1083 @@ + + + + + diff --git a/src/components/ComDialog/index.vue b/src/components/ComDialog/index.vue new file mode 100644 index 0000000..c2c84a5 --- /dev/null +++ b/src/components/ComDialog/index.vue @@ -0,0 +1,157 @@ + + + + + diff --git a/src/components/ComMap/expand/graphic/CanvasBillboard.js b/src/components/ComMap/expand/graphic/CanvasBillboard.js new file mode 100644 index 0000000..4998c64 --- /dev/null +++ b/src/components/ComMap/expand/graphic/CanvasBillboard.js @@ -0,0 +1,45 @@ +import * as mars3d from "mars3d" + +// 通过Canvas绘制复杂或动态对象的图标点Graphic +export class CanvasBillboard extends mars3d.graphic.BillboardPrimitive { + /** + * 文字 + * @type {string} + */ + get text() { + return this.style.text + } + + set text(val) { + this.style.text = val + + this.label.text = val + } + + /** + * 对象添加到图层前创建一些对象的钩子方法, + * 只会调用一次 + * @return {Promise} 无 + * @private + */ + _addedHook(style) { + style.image = "//data.mars3d.cn/img/marker/bg/textPnl.png" + style.label = { + ...style, + text: this.style.text, + font_size: 55, + color: style.textColor ?? "#ffffff", + hasPixelOffset: true, + pixelOffsetX: 0, + pixelOffsetY: -36 * (style.scale ?? 1) + } + if (style.scaleByDistance) { + style.label.pixelOffsetScaleByDistance = style.scaleByDistance + } + + super._addedHook(style) + } +} + +// 注册下 +mars3d.GraphicUtil.register("canvasBillboard", CanvasBillboard) diff --git a/src/components/ComMap/expand/index.js b/src/components/ComMap/expand/index.js new file mode 100644 index 0000000..f061ae7 --- /dev/null +++ b/src/components/ComMap/expand/index.js @@ -0,0 +1,18 @@ +// 注册mars3d插件 (插件清单访问:http://mars3d.cn/dev/guide/start/architecture.html) +// import "mars3d-space" +// import "mars3d-heatmap" +// import "mars3d-echarts" +// import "mars3d-mapv" +// import "mars3d-tdt" + +// 注册mars3d继承的相关类 +import './task/CameraList.js' +import './task/CameraView.js' +import './task/MapRotate.js' +import './task/PointRotate.js' +import './task/RouteLine.js' +import './task/ZoomIn.js' +import './task/ZoomOut.js' +import './task/FlickerEntity.js' + +import './graphic/CanvasBillboard.js' diff --git a/src/components/ComMap/expand/task/CameraList.js b/src/components/ComMap/expand/task/CameraList.js new file mode 100644 index 0000000..ffc7a0b --- /dev/null +++ b/src/components/ComMap/expand/task/CameraList.js @@ -0,0 +1,24 @@ +import * as mars3d from "mars3d" + +/** + * 视角列表播放(分步执行) + * + * @param {object} [options] 参数对象,包括以下: + * @param {string} [options.name] 标题名称 + * @param {string} [options.type] 类型标识,自动赋值的,无需手动传入 + * @param {number} [options.start] 开始时间,相当于map.clock.startTime的秒数 + * @param {number} [options.duration] 时长 + * @param {object[]} [options.list] 视角数组 + */ +export class CameraList extends mars3d.TaskItem { + // 进入,激活开始处理事务 + _activateWork() { + this._map.setCameraViewList(this.options.list) + } + + // 暂停(非必须) + _pauseWork() { + this._disableWork() + } +} +mars3d.thing.Task.register("cameraList", CameraList) diff --git a/src/components/ComMap/expand/task/CameraView.js b/src/components/ComMap/expand/task/CameraView.js new file mode 100644 index 0000000..cfb1d3b --- /dev/null +++ b/src/components/ComMap/expand/task/CameraView.js @@ -0,0 +1,25 @@ +import * as mars3d from "mars3d" + +/** + * 单个视角定位 + * + * @param {object} [options] 参数对象,包括以下: + * @param {string} [options.name] 标题名称 + * @param {string} [options.type] 类型标识,自动赋值的,无需手动传入 + * @param {number} [options.start] 开始时间,相当于map.clock.startTime的秒数 + * @param {number} [options.duration] 时长 + * + * @param {object} [options.center] 视角参数 + */ +export class CameraView extends mars3d.TaskItem { + // 进入,激活开始处理事务 + _activateWork() { + this._map.setCameraView(this.options.center, { duration: this._duration }) + } + + // 离开,释放相关对象 + _disableWork() { + this._map.cancelFlyTo() + } +} +mars3d.thing.Task.register("camera", CameraView) diff --git a/src/components/ComMap/expand/task/FlickerEntity.js b/src/components/ComMap/expand/task/FlickerEntity.js new file mode 100644 index 0000000..9454243 --- /dev/null +++ b/src/components/ComMap/expand/task/FlickerEntity.js @@ -0,0 +1,47 @@ +import * as mars3d from "mars3d" + +/** + * 矢量对象高亮闪烁(仅Entity) + * + * @param {object} [options] 参数对象,包括以下: + * @param {string} [options.name] 标题名称 + * @param {string} [options.type] 类型标识,自动赋值的,无需手动传入 + * @param {number} [options.start] 开始时间,相当于map.clock.startTime的秒数 + * @param {number} [options.duration] 时长 + * + * @param {string|number} [options.layerId] 图层ID + * @param {string|number} [options.graphicId] 矢量对象ID + * + * @param {number} [options.step=10] 闪烁增量, 控制速度 + * @param {string} [options.color] 高亮的颜色 + * @param {number} [options.maxAlpha=0.3] 闪烁的最大透明度,从 0 到 maxAlpha 渐变 + */ +export class FlickerEntity extends mars3d.TaskItem { + // 进入,激活开始处理事务 + _activateWork() { + const layer = this._map.getLayerById(this.options.layerId) + if (layer) { + layer.show = true + layer.readyPromise.then(() => { + this._graphic = layer.getGraphicById(this.options.graphicId) + if (this._graphic) { + this._graphic.show = true + this._graphic.startFlicker({ + time: this._duration, + step: this.options.step, + maxAlpha: this.options.maxAlpha, + color: this.options.color + }) + } + }) + } + } + + // 离开,释放相关对象 + _disableWork() { + if (this._graphic) { + this._graphic.stopFlicker() + } + } +} +mars3d.thing.Task.register("flickerEntity", FlickerEntity) diff --git a/src/components/ComMap/expand/task/MapRotate.js b/src/components/ComMap/expand/task/MapRotate.js new file mode 100644 index 0000000..9c51532 --- /dev/null +++ b/src/components/ComMap/expand/task/MapRotate.js @@ -0,0 +1,46 @@ +import * as mars3d from "mars3d" + +/** + * 地球自旋转 + * + * @param {object} [options] 参数对象,包括以下: + * @param {string} [options.name] 标题名称 + * @param {string} [options.type] 类型标识,自动赋值的,无需手动传入 + * @param {number} [options.start] 开始时间,相当于map.clock.startTime的秒数 + * @param {number} [options.duration] 时长 + * + * @param {object} [options.center] 初始视角 + * @param {number} [options.speed] 旋转速度 + */ +export class MapRotate extends mars3d.TaskItem { + constructor(options = {}) { + super(options) + + this._speed = this.options.speed || 0.01 + this._center = this.options.center || { lat: 29.093038, lng: 108.804459, alt: 23321232.7, heading: 0, pitch: -90 } + } + + // 进入,激活开始处理事务 + _activateWork() { + this._map.setCameraView(this._center, { + duration: 1, + complete: () => { + this._map.on(mars3d.EventType.clockTick, this._map_onClockTick, this) + } + }) + } + + // 离开,释放相关对象 + _disableWork() { + this._map.off(mars3d.EventType.clockTick, this._map_onClockTick, this) + } + + _map_onClockTick() { + if (this.isPause) { + return // 暂停时不执行 + } + + this._map.scene.camera.rotate(mars3d.Cesium.Cartesian3.UNIT_Z, this._speed) + } +} +mars3d.thing.Task.register("mapRotate", MapRotate) diff --git a/src/components/ComMap/expand/task/PointRotate.js b/src/components/ComMap/expand/task/PointRotate.js new file mode 100644 index 0000000..0d70aab --- /dev/null +++ b/src/components/ComMap/expand/task/PointRotate.js @@ -0,0 +1,58 @@ +import * as mars3d from "mars3d" + +/** + * 内或外旋转 + * @param {object} [options] 参数对象,包括以下: + * @param {string} [options.name] 标题名称 + * @param {string} [options.type] 类型标识,自动赋值的,无需手动传入 + * @param {number} [options.start] 开始时间,相当于map.clock.startTime的秒数 + * @param {number} [options.duration] 时长 + * + * @param {boolean} [options.isRotateOut] true:绕外旋转 ,false:绕内旋转 + * @param {boolean} [options.direction=false] 旋转方向, true逆时针,false顺时针 + * @param {number} [options.time=60] 飞行一周所需时间(单位 秒),控制速度 + * @param {boolean} [options.autoStop] 是否自动停止 + * @param {number} [options.autoStopAngle] 自动停止的角度值(0-360度),未设置时不自动停止 + * @param {object} [options.point] 绕点旋转对应的中心点位置 + */ +export class PointRotate extends mars3d.TaskItem { + // 进入,激活开始处理事务 + _activateWork() { + if (this.options.center) { + this._map.setCameraView(this.options.center, { duration: 0 }) + } + + if (this.options.autoStop) { + delete this.options.autoStopAngle // 是否自动停止 + } + + if (this.options.isRotateOut) { + this._rotateOut = new mars3d.thing.RotateOut(this.options) + this._map.addThing(this._rotateOut) + } else { + this._rotatePoint = new mars3d.thing.RotatePoint(this.options) + this._map.addThing(this._rotatePoint) + } + + if (this.options.isRotateOut) { + this._rotateOut.start() + } else { + this._rotatePoint.start(this.options.point) + } + } + + // 离开,释放相关对象 + _disableWork() { + if (this._rotatePoint) { + this._rotatePoint.stop() + this._rotatePoint.destroy() + delete this._rotatePoint + } + if (this._rotateOut) { + this._rotateOut.stop() + this._rotateOut.destroy() + delete this._rotateOut + } + } +} +mars3d.thing.Task.register("pointRotate", PointRotate) diff --git a/src/components/ComMap/expand/task/RouteLine.js b/src/components/ComMap/expand/task/RouteLine.js new file mode 100644 index 0000000..1ecb714 --- /dev/null +++ b/src/components/ComMap/expand/task/RouteLine.js @@ -0,0 +1,58 @@ +import * as mars3d from "mars3d" + +/** + * 按路线漫游 + * + * @param {object} [options] 参数对象,包括以下: + * @param {string} [options.name] 标题名称 + * @param {string} [options.type] 类型标识,自动赋值的,无需手动传入 + * @param {number} [options.start] 开始时间,相当于map.clock.startTime的秒数 + * @param {number} [options.duration] 时长 + * + * @param {object} [options.route] FixedRoute对应的构造参数 + */ +export class RouteLine extends mars3d.TaskItem { + // constructor(options) { + // super(options) + // } + + // 进入,激活开始处理事务 + _activateWork() { + this._graphicLayer = new mars3d.layer.GraphicLayer() + this._map.addLayer(this._graphicLayer) + + const fixedRoute = new mars3d.graphic.FixedRoute(this.options.route) + this._graphicLayer.addGraphic(fixedRoute) + this._fixedRoute = fixedRoute + + fixedRoute.start() + } + + // 暂停(非必须) + _pauseWork(options) { + if (this._fixedRoute) { + this._fixedRoute.pause() + } + } + + // 继续(非必须) + _proceedWork() { + if (this._fixedRoute) { + this._fixedRoute.proceed() + } + } + + // 离开,释放相关对象 + _disableWork() { + if (this._fixedRoute) { + this._fixedRoute.stop() + delete this._fixedRoute + } + + if (this._graphicLayer) { + this._graphicLayer.destroy() + delete this._graphicLayer + } + } +} +mars3d.thing.Task.register("routeLine", RouteLine) diff --git a/src/components/ComMap/expand/task/ZoomIn.js b/src/components/ComMap/expand/task/ZoomIn.js new file mode 100644 index 0000000..1c8cb37 --- /dev/null +++ b/src/components/ComMap/expand/task/ZoomIn.js @@ -0,0 +1,20 @@ +import * as mars3d from "mars3d" + +/** + * 放大地图 + * + * @param {object} [options] 参数对象,包括以下: + * @param {string} [options.name] 标题名称 + * @param {string} [options.type] 类型标识,自动赋值的,无需手动传入 + * @param {number} [options.start] 开始时间,相当于map.clock.startTime的秒数 + * @param {number} [options.duration] 时长 + * + * @param {number} [options.relativeAmount=2] 相对量 + */ +export class ZoomIn extends mars3d.TaskItem { + // 进入,激活开始处理事务 + _activateWork() { + this._map.zoomIn(this.options.relativeAmount) + } +} +mars3d.thing.Task.register("zoomIn", ZoomIn) diff --git a/src/components/ComMap/expand/task/ZoomOut.js b/src/components/ComMap/expand/task/ZoomOut.js new file mode 100644 index 0000000..2b9e7a6 --- /dev/null +++ b/src/components/ComMap/expand/task/ZoomOut.js @@ -0,0 +1,20 @@ +import * as mars3d from "mars3d" + +/** + * 缩小地图 + * + * @param {object} [options] 参数对象,包括以下: + * @param {string} [options.name] 标题名称 + * @param {string} [options.type] 类型标识,自动赋值的,无需手动传入 + * @param {number} [options.start] 开始时间,相当于map.clock.startTime的秒数 + * @param {number} [options.duration] 时长 + * + * @param {number} [options.relativeAmount=2] 相对量 + */ +export class ZoomOut extends mars3d.TaskItem { + // 进入,激活开始处理事务 + _activateWork() { + this._map.zoomOut(this.options.relativeAmount) + } +} +mars3d.thing.Task.register("zoomOut", ZoomOut) diff --git a/src/components/ComMap/index.vue b/src/components/ComMap/index.vue new file mode 100644 index 0000000..81457b0 --- /dev/null +++ b/src/components/ComMap/index.vue @@ -0,0 +1,434 @@ + + + + diff --git a/src/components/ComSearchForm/FormItem/ItemCascader.vue b/src/components/ComSearchForm/FormItem/ItemCascader.vue new file mode 100644 index 0000000..a095ac6 --- /dev/null +++ b/src/components/ComSearchForm/FormItem/ItemCascader.vue @@ -0,0 +1,71 @@ + + + diff --git a/src/components/ComSearchForm/FormItem/ItemDate.vue b/src/components/ComSearchForm/FormItem/ItemDate.vue new file mode 100644 index 0000000..3a440fa --- /dev/null +++ b/src/components/ComSearchForm/FormItem/ItemDate.vue @@ -0,0 +1,74 @@ + + + diff --git a/src/components/ComSearchForm/FormItem/ItemInput.vue b/src/components/ComSearchForm/FormItem/ItemInput.vue new file mode 100644 index 0000000..0438f15 --- /dev/null +++ b/src/components/ComSearchForm/FormItem/ItemInput.vue @@ -0,0 +1,54 @@ + + + diff --git a/src/components/ComSearchForm/FormItem/ItemIpt.vue b/src/components/ComSearchForm/FormItem/ItemIpt.vue new file mode 100644 index 0000000..988f867 --- /dev/null +++ b/src/components/ComSearchForm/FormItem/ItemIpt.vue @@ -0,0 +1 @@ + diff --git a/src/components/ComSearchForm/FormItem/ItemSelect.vue b/src/components/ComSearchForm/FormItem/ItemSelect.vue new file mode 100644 index 0000000..5933794 --- /dev/null +++ b/src/components/ComSearchForm/FormItem/ItemSelect.vue @@ -0,0 +1,61 @@ + + + diff --git a/src/components/ComSearchForm/index.vue b/src/components/ComSearchForm/index.vue new file mode 100644 index 0000000..627ea59 --- /dev/null +++ b/src/components/ComSearchForm/index.vue @@ -0,0 +1,327 @@ + + + + + diff --git a/src/components/ComTable/index.vue b/src/components/ComTable/index.vue new file mode 100644 index 0000000..5dd5f9e --- /dev/null +++ b/src/components/ComTable/index.vue @@ -0,0 +1,250 @@ + + + + + diff --git a/src/main.js b/src/main.js index f1f6fe2..7063bba 100644 --- a/src/main.js +++ b/src/main.js @@ -5,6 +5,8 @@ import Cookies from 'js-cookie' import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' import 'element-plus/theme-chalk/dark/css-vars.css' +import 'mars3d-cesium/Build/Cesium/Widgets/widgets.css' +import 'mars3d/mars3d.css' import locale from 'element-plus/es/locale/lang/zh-cn' import '@/assets/styles/index.scss' // global css @@ -26,21 +28,28 @@ import elementIcons from '@/components/SvgIcon/svgicon' import './permission' // permission control import { useDict } from '@/utils/dict' -import { getConfigKey } from "@/api/system/config" -import { parseTime, resetForm, addDateRange, handleTree, selectDictLabel, selectDictLabels } from '@/utils/ruoyi' +import { getConfigKey } from '@/api/system/config' +import { + parseTime, + resetForm, + addDateRange, + handleTree, + selectDictLabel, + selectDictLabels, +} from '@/utils/ruoyi' // 分页组件 import Pagination from '@/components/Pagination' // 自定义表格工具组件 import RightToolbar from '@/components/RightToolbar' // 富文本组件 -import Editor from "@/components/Editor" +import Editor from '@/components/Editor' // 文件上传组件 -import FileUpload from "@/components/FileUpload" +import FileUpload from '@/components/FileUpload' // 图片上传组件 -import ImageUpload from "@/components/ImageUpload" +import ImageUpload from '@/components/ImageUpload' // 图片预览组件 -import ImagePreview from "@/components/ImagePreview" +import ImagePreview from '@/components/ImagePreview' // 字典标签组件 import DictTag from '@/components/DictTag' @@ -76,9 +85,9 @@ directive(app) // 使用element-plus 并且设置全局的大小 app.use(ElementPlus, { - locale: locale, - // 支持 large、default、small - size: Cookies.get('size') || 'default' + locale: locale, + // 支持 large、default、small + size: Cookies.get('size') || 'default', }) app.mount('#app') diff --git a/src/views/showComponents/showDialog/index.vue b/src/views/showComponents/showDialog/index.vue new file mode 100644 index 0000000..84b7a20 --- /dev/null +++ b/src/views/showComponents/showDialog/index.vue @@ -0,0 +1,440 @@ + + + + + diff --git a/src/views/showComponents/showMap/config.json b/src/views/showComponents/showMap/config.json new file mode 100644 index 0000000..4e3a3b2 --- /dev/null +++ b/src/views/showComponents/showMap/config.json @@ -0,0 +1,1453 @@ +{ + "scene": { + "center": { + "lat": 31.686288, + "lng": 117.229619, + "alt": 11333.9, + "heading": 359.2, + "pitch": -39.5 + }, + "scene3DOnly": false, + "shadows": false, + "removeDblClick": true, + "sceneMode": 3, + "showSun": true, + "showMoon": true, + "showSkyBox": true, + "showSkyAtmosphere": true, + "fog": true, + "fxaa": true, + "requestRenderMode": false, + "globe": { + "depthTestAgainstTerrain": false, + "baseColor": "#546a53", + "showGroundAtmosphere": true, + "enableLighting": false + }, + "contextOptions": { + "webgl": { + "preserveDrawingBuffer": true + } + }, + "cameraController": { + "zoomFactor": 3.0, + "minimumZoomDistance": 1, + "maximumZoomDistance": 50000000, + "enableRotate": true, + "enableTranslate": true, + "enableTilt": true, + "enableZoom": true, + "enableCollisionDetection": true, + "minimumCollisionTerrainHeight": 15000 + } + }, + "control": { + "homeButton": true, + "baseLayerPicker": true, + "sceneModePicker": true, + "vrButton": false, + "fullscreenButton": true, + "navigationHelpButton": true, + "animation": false, + "timeline": false, + "infoBox": false, + "geocoder": false, + "selectionIndicator": false, + "showRenderLoopErrors": true, + "contextmenu": { "hasDefault": true }, + "mouseDownView": true, + "zoom": { "insertIndex": 1 }, + "compass": { "bottom": "toolbar", "left": "5px" }, + "distanceLegend": { "left": "10px", "bottom": "2px" }, + "locationBar": { + "crs": "CGCS2000_GK_Zone_3", + "crsDecimal": 0, + "template": "
经度:{lng}
纬度:{lat}
横{crsx} 纵{crsy}
海拔:{alt}米
层级:{level}
方向:{heading}°
俯仰角:{pitch}°
视高:{cameraHeight}米
" + } + }, + "templateValues": { + "dataServer": "//data.mars3d.cn", + "gltfServerUrl": "//data.mars3d.cn/gltf" + }, + "terrain": { + "url": "//data.mars3d.cn/terrain", + "show": true, + "clip": true + }, + "basemaps": [ + { + "id": 10, + "name": "地图底图", + "type": "group" + }, + { + "pid": 10, + "name": "天地图影像", + "icon": "//data.mars3d.cn/img/thumbnail/basemap/tdt_img.png", + "type": "group", + "layers": [ + { + "name": "底图", + "type": "tdt", + "layer": "img_d" + }, + { + "name": "注记", + "type": "tdt", + "layer": "img_z" + } + ], + "show": false + }, + { + "pid": 10, + "name": "天地图电子", + "icon": "//data.mars3d.cn/img/thumbnail/basemap/tdt_vec.png", + "type": "group", + "layers": [ + { + "name": "底图", + "type": "tdt", + "layer": "vec_d" + }, + { + "name": "注记", + "type": "tdt", + "layer": "vec_z" + } + ] + }, + { + "id": 2021, + "pid": 10, + "name": "高德影像", + "type": "group", + "icon": "//data.mars3d.cn/img/thumbnail/basemap/gaode_img.png", + "layers": [ + { + "name": "底图", + "type": "gaode", + "layer": "img_d" + }, + { + "name": "注记", + "type": "gaode", + "layer": "img_z" + } + ], + "show": true + }, + { + "pid": 10, + "name": "高德电子", + "type": "gaode", + "icon": "//data.mars3d.cn/img/thumbnail/basemap/gaode_vec.png", + "layer": "vec" + }, + { + "pid": 10, + "name": "百度影像", + "type": "group", + "icon": "//data.mars3d.cn/img/thumbnail/basemap/bd-img.png", + "layers": [ + { + "name": "底图", + "type": "baidu", + "layer": "img_d" + }, + { + "name": "注记", + "type": "baidu", + "layer": "img_z" + } + ] + }, + { + "pid": 10, + "name": "百度电子", + "icon": "//data.mars3d.cn/img/thumbnail/basemap/bd-vec.png", + "type": "baidu", + "layer": "vec" + }, + { + "pid": 10, + "name": "腾讯影像", + "icon": "//data.mars3d.cn/img/thumbnail/basemap/tencent_img.png", + "type": "group", + "layers": [ + { + "name": "底图", + "type": "tencent", + "layer": "img_d" + }, + { + "name": "注记", + "type": "tencent", + "layer": "img_z" + } + ] + }, + { + "pid": 10, + "name": "腾讯电子", + "icon": "//data.mars3d.cn/img/thumbnail/basemap/tencent_vec.png", + "type": "tencent", + "layer": "vec" + }, + { + "pid": 10, + "name": "ArcGIS影像", + "icon": "//data.mars3d.cn/img/thumbnail/basemap/esriWorldImagery.png", + "type": "xyz", + "url": "https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}", + "enablePickFeatures": false + }, + { + "pid": 10, + "name": "微软影像", + "icon": "//data.mars3d.cn/img/thumbnail/basemap/bingAerial.png", + "type": "bing", + "layer": "Aerial" + }, + { + "id": 2017, + "pid": 10, + "name": "蓝色底图", + "icon": "//data.mars3d.cn/img/thumbnail/basemap/bd-c-midnight.png", + "type": "gaode", + "layer": "vec", + "chinaCRS": "GCJ02", + "invertColor": true, + "filterColor": "#4e70a6", + "brightness": 0.6, + "contrast": 1.8, + "gamma": 0.3, + "hue": 1, + "saturation": 0 + }, + { + "pid": 10, + "name": "黑色底图", + "icon": "//data.mars3d.cn/img/thumbnail/basemap/bd-c-dark.png", + "type": "gaode", + "layer": "vec", + "chinaCRS": "GCJ02", + "invertColor": true, + "filterColor": "#909090", + "brightness": 0.6, + "contrast": 1.8, + "gamma": 0.3, + "hue": 1, + "saturation": 0 + }, + { + "pid": 10, + "name": "离线影像地图 (供参考)", + "icon": "//data.mars3d.cn/img/thumbnail/basemap/google_img.png", + "type": "xyz", + "url": "{dataServer}/tile/img/{z}/{x}/{y}.jpg", + "chinaCRS": "GCJ02", + "maximumLevel": 13 + }, + { + "pid": 10, + "name": "单张图片 (本地离线)", + "icon": "//data.mars3d.cn/img/thumbnail/basemap/offline.png", + "type": "image", + "url": "//data.mars3d.cn/img/map/world/world.jpg" + }, + { + "id": 2023, + "pid": 10, + "name": "无底图", + "icon": "//data.mars3d.cn/img/thumbnail/basemap/null.png", + "type": "grid", + "color": "#ffffff", + "alpha": 0.03, + "cells": 2 + } + ], + "layers": [ + { "id": 50, "name": "辅助图层", "type": "group" }, + { "pid": 50, "type": "graticule", "name": "经纬网" }, + { + "pid": 50, + "name": "行政区划界线", + "type": "tdt", + "layer": "xzqh", + "mapSplit": false + }, + { + "pid": 50, + "name": "高德实时路况", + "type": "gaode", + "layer": "time", + "minimumTerrainLevel": 4, + "minimumLevel": 4, + "proxy": "//server.mars3d.cn/proxy/", + "mapSplit": false + }, + { + "pid": 50, + "name": "百度实时路况", + "type": "baidu", + "layer": "time", + "mapSplit": false + }, + + { "id": 60, "name": "地形", "type": "group" }, + { "pid": 60, "type": "terrain", "name": "Cesium地形", "terrainType": "ion", "radio": true }, + { + "pid": 60, + "type": "terrain", + "name": "Mars3D地形", + "terrainType": "xyz", + "url": "{dataServer}/terrain", + "radio": true + }, + { + "pid": 60, + "type": "terrain", + "name": "ArcGIS地形", + "terrainType": "arcgis", + "url": "https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer", + "radio": true + }, + { "pid": 60, "type": "terrain", "name": "无地形", "terrainType": "none", "radio": true }, + + { "id": 40, "name": "栅格数据", "type": "group" }, + { "id": 4020, "pid": 40, "name": "OGC WMS服务", "type": "group" }, + { + "pid": 4020, + "name": "教育设施点", + "type": "wms", + "url": "//server.mars3d.cn/geoserver/mars/wms", + "layers": "mars:hfjy", + "crs": "EPSG:4326", + "parameters": { "transparent": "true", "format": "image/png" }, + "popup": "名称:{项目名称}
类型:{设施类型}
面积:{用地面积}亩
位置:{具体位置}", + "mapSplit": false, + "show": false, + "flyTo": true + }, + { + "pid": 4020, + "name": "道路线", + "type": "wms", + "url": "//server.mars3d.cn/geoserver/mars/wms", + "layers": "mars:hfdl", + "crs": "EPSG:4326", + "parameters": { "transparent": "true", "format": "image/png" }, + "center": { + "lat": 31.743214, + "lng": 117.277097, + "alt": 47197.7, + "heading": 0.3, + "pitch": -78.8 + }, + "popup": "all", + "mapSplit": false, + "show": false, + "flyTo": true + }, + { + "pid": 4020, + "name": "建筑物面", + "type": "wms", + "url": "//server.mars3d.cn/geoserver/mars/wms", + "layers": "mars:hfjzw", + "crs": "EPSG:4326", + "parameters": { "transparent": "true", "format": "image/png" }, + "highlight": { + "showTime": 5000, + "fill": true, + "color": "#2deaf7", + "opacity": 0.6, + "outline": true, + "outlineWidth": 3, + "outlineColor": "#e000d9", + "outlineOpacity": 1.0, + "clampToGround": true + }, + "center": { + "lat": 31.79513, + "lng": 117.236172, + "alt": 3784.6, + "heading": 0.7, + "pitch": -42.2 + }, + "popup": "all", + "show": false, + "flyTo": true + }, + { + "pid": 4020, + "name": "规划面", + "type": "wms", + "url": "//server.mars3d.cn/geoserver/mars/wms", + "layers": "mars:hfgh", + "crs": "EPSG:4326", + "parameters": { "transparent": "true", "format": "image/png" }, + "center": { + "lat": 31.743214, + "lng": 117.277097, + "alt": 47197.7, + "heading": 0.3, + "pitch": -78.8 + }, + "popup": "all", + "show": false, + "flyTo": true + }, + { "id": 4030, "pid": 40, "name": "ArcGIS 瓦片", "type": "group" }, + { + "pid": 4030, + "name": "合肥规划图", + "type": "arcgis_cache", + "url": "{dataServer}/arcgis_cache/hfgh/_alllayers/{z}/{y}/{x}.png", + "minimumLevel": 1, + "maximumLevel": 17, + "minimumTerrainLevel": 1, + "maximumTerrainLevel": 17, + "rectangle": { "xmin": 116.846, "xmax": 117.642, "ymin": 31.533, "ymax": 32.185 } + }, + { "id": 4010, "pid": 40, "name": "ArcGIS Dynamic", "type": "group" }, + { + "id": 401085, + "pid": 4010, + "type": "arcgis", + "name": "主要道路", + "url": "//server.mars3d.cn/arcgis/rest/services/mars/hefei/MapServer", + "layers": "24", + "highlight": { + "type": "polyline", + "color": "#2deaf7", + "width": 4, + "clampToGround": true + }, + "center": { + "lat": 31.814176, + "lng": 117.225362, + "alt": 5105.3, + "heading": 359.2, + "pitch": -83.1 + }, + "popup": "all", + "onWidget": "layer-picture-heatmap", + "mapSplit": false + }, + { + "id": 401086, + "pid": 4010, + "type": "arcgis", + "name": "建筑物", + "url": "//server.mars3d.cn/arcgis/rest/services/mars/hefei/MapServer", + "layers": "35,36,37,39", + "highlight": { + "fill": true, + "color": "#2deaf7", + "opacity": 0.6, + "outline": true, + "outlineWidth": 3, + "outlineColor": "#e000d9", + "outlineOpacity": 1.0, + "clampToGround": true + }, + "center": { + "lat": 31.816951, + "lng": 117.22898, + "alt": 2916.7, + "heading": 0.3, + "pitch": -78.8 + }, + "popup": "名称:{NAME}
层数:{floor}", + "onWidget": "layer-picture-heatmap" + }, + { + "id": 401087, + "pid": 4010, + "type": "arcgis", + "name": "规划", + "url": "//server.mars3d.cn/arcgis/rest/services/mars/guihua/MapServer", + "highlight": { + "showTime": 5000, + "fill": true, + "color": "#2deaf7", + "opacity": 0.6, + "outline": true, + "outlineWidth": 3, + "outlineColor": "#e000d9", + "outlineOpacity": 1.0, + "clampToGround": true + }, + "center": { + "lat": 31.816951, + "lng": 117.22898, + "alt": 2916.7, + "heading": 0.3, + "pitch": -78.8 + }, + "popup": [ + { "field": "用地名称", "name": "名称" }, + { "field": "用地编号", "name": "编号" }, + { "field": "规划用地", "name": "规划" }, + { + "type": "html", + "html": "
数据仅供参考
" + } + ], + "popupNoTitle": true, + "onWidget": "layer-picture-guihua" + }, + { "id": 30, "name": "矢量数据", "type": "group" }, + { "id": 3030, "pid": 30, "name": "GeoJSON数据", "type": "group" }, + { + "id": 303011, + "pid": 3030, + "type": "geojson", + "name": "平台标绘", + "url": "{dataServer}/file/geojson/mars3d-draw.json", + "popup": "{type}{name}", + "show": false, + "flyTo": true + }, + { + "pid": 3030, + "type": "geojson", + "name": "用地规划", + "url": "{dataServer}/file/geojson/guihua.json", + "symbol": { + "styleOptions": { + "opacity": 0.6, + "color": "#0000FF", + "width": 3, + "clampToGround": true + }, + "styleField": "类型", + "styleFieldOptions": { + "一类居住用地": { "color": "#FFDF7F" }, + "二类居住用地": { "color": "#FFFF00" }, + "社区服务用地": { "color": "#FF6A38" }, + "幼托用地": { "color": "#FF6A38" }, + "商住混合用地": { "color": "#FF850A" }, + "行政办公用地": { "color": "#FF00FF" }, + "文化设施用地": { "color": "#FF00FF" }, + "小学用地": { "color": "#FF7FFF" }, + "初中用地": { "color": "#FF7FFF" }, + "体育场用地": { "color": "#00A57C" }, + "医院用地": { "color": "#A5527C" }, + "社会福利用地": { "color": "#FF7F9F" }, + "商业用地": { "color": "#FF0000" }, + "商务用地": { "color": "#7F0000" }, + "营业网点用地": { "color": "#FF7F7F" }, + "一类工业用地": { "color": "#A57C52" }, + "社会停车场用地": { "color": "#C0C0C0" }, + "通信用地": { "color": "#007CA5" }, + "排水用地": { "color": "#00BFFF" }, + "公园绿地": { "color": "#00FF00" }, + "防护绿地": { "color": "#007F00" }, + "河流水域": { "color": "#7FFFFF" }, + "配建停车场": { "color": "#ffffff" }, + "道路用地": { "color": "#ffffff" } + } + }, + "popup": "{类型}", + "show": false, + "flyTo": true + }, + { + "pid": 3030, + "type": "geojson", + "name": "建筑物面", + "url": "{dataServer}/file/geojson/buildings-demo.json", + "symbol": { + "styleOptions": { "color": "#0d3685", "outlineColor": "#0d3685", "opacity": 0.8 } + }, + "buildings": { "cloumn": "floors", "height": "flo_height" }, + "popup": "all", + "flyTo": true, + "flyToOptions": { "minHeight": 2000 } + }, + { + "pid": 3030, + "type": "geojson", + "name": "安徽各市", + "url": "{dataServer}/file/geojson/areas/340000_full.json", + "symbol": { + "type": "polygon", + "styleOptions": { + "materialType": "PolyGradient", + "materialOptions": { + "color": "rgb(15,176,255)", + "opacity": 0.7, + "alphaPower": 1.3 + }, + "label": { + "text": "{name}", + "opacity": 1, + "font_size": 25, + "color": "#ffffff", + "outline": true, + "outlineColor": "#000000", + "outlineWidth": 3, + "scaleByDistance": true, + "scaleByDistance_far": 2743804, + "scaleByDistance_farValue": 0.3, + "scaleByDistance_near": 10000, + "scaleByDistance_nearValue": 1, + "distanceDisplayCondition": true, + "distanceDisplayCondition_far": 2743804, + "distanceDisplayCondition_near": 0 + } + } + }, + "popup": "{name}", + "show": false, + "flyTo": true + }, + { + "pid": 3030, + "type": "geojson", + "name": "中国省界", + "url": "{dataServer}/file/geojson/areas/100000_full.json", + "symbol": { + "type": "polylineP", + "styleOptions": { + "color": "#ffffff", + "width": 2, + "opacity": 0.8, + "label": { + "text": "{name}", + "position": "center", + "font_size": 30, + "color": "#ffffff", + "outline": true, + "outlineColor": "#000000", + "scaleByDistance": true, + "scaleByDistance_far": 60000000, + "scaleByDistance_farValue": 0.2, + "scaleByDistance_near": 1000000, + "scaleByDistance_nearValue": 1, + "distanceDisplayCondition": true, + "distanceDisplayCondition_far": 12000000, + "distanceDisplayCondition_near": 0 + } + } + }, + "show": false, + "flyTo": true + }, + { + "pid": 3030, + "type": "geojson", + "name": "西藏垭口", + "url": "{dataServer}/file/geojson/xizangyakou.json", + "symbol": { + "styleOptions": { + "image": "//data.mars3d.cn/img/marker/mark-red.png", + "scaleByDistance": true, + "scaleByDistance_far": 5000000, + "scaleByDistance_farValue": 0.5, + "scaleByDistance_near": 1000, + "scaleByDistance_nearValue": 1, + "verticalOrigin": 1, + "horizontalOrigin": 0, + "clampToGround": true, + "label": { + "text": "{NAME}", + "font_size": 25, + "color": "#ffff00", + "font_family": "微软雅黑", + "outline": true, + "outlineColor": "#000000", + "pixelOffsetY": -40, + "scaleByDistance": true, + "scaleByDistance_far": 1000000, + "scaleByDistance_farValue": 0.5, + "scaleByDistance_near": 1000, + "scaleByDistance_nearValue": 1, + "distanceDisplayCondition": true, + "distanceDisplayCondition_far": 1000000, + "distanceDisplayCondition_near": 0, + "visibleDepth": true + } + } + }, + "popup": [ + { "field": "NAME", "name": "名称" }, + { + "type": "details", + "callback": "showPopupDetails", + "field": "图片", + "className": "mars3d-popup-btn-custom" + } + ], + "show": false, + "flyTo": true + }, + { + "pid": 3030, + "type": "geojson", + "name": "体育设施点", + "url": "{dataServer}/file/geojson/hfty-point.json", + "symbol": { + "styleOptions": { + "image": "//data.mars3d.cn/img/marker/mark-red.png", + "scale": 1, + "scaleByDistance": true, + "scaleByDistance_far": 20000, + "scaleByDistance_farValue": 0.5, + "scaleByDistance_near": 1000, + "scaleByDistance_nearValue": 1, + "verticalOrigin": 1, + "horizontalOrigin": 0, + "clampToGround": true, + "label": { + "text": "{项目名称}", + "font_size": 25, + "color": "#ffffff", + "outline": true, + "outlineColor": "#000000", + "pixelOffsetY": -25, + "scaleByDistance": true, + "scaleByDistance_far": 80000, + "scaleByDistance_farValue": 0.5, + "scaleByDistance_near": 1000, + "scaleByDistance_nearValue": 1, + "distanceDisplayCondition": true, + "distanceDisplayCondition_far": 80000, + "distanceDisplayCondition_near": 0 + } + } + }, + "popup": [ + { "field": "项目名称", "name": "项目名称" }, + { "field": "建设性质", "name": "建设性质" }, + { "field": "设施级别", "name": "设施级别" }, + { "field": "所属区县", "name": "所属区县" }, + { "field": "建筑内容及", "name": "建筑内容" }, + { "field": "新增用地(", "name": "新增用地" }, + { "field": "开工", "name": "开工" }, + { "field": "总投资(万", "name": "总投资" }, + { "field": "资金来源", "name": "资金来源" }, + { "field": "初步选址", "name": "初步选址" }, + { "field": "设施类型", "name": "设施类型" }, + { "field": "设施等级", "name": "设施等级" }, + { "field": "所在区县", "name": "所在区县" }, + { "field": "具体位置", "name": "具体位置" }, + { "field": "建设内容(", "name": "建设内容" }, + { + "field": "用地面积(", + "name": "用地面积", + "format": "mars3d.MeasureUtil.formatArea" + }, + { "field": "设施规模(", "name": "设施规模" }, + { "field": "举办者类型", "name": "举办者类型" }, + { "field": "开工时间", "name": "开工时间" }, + { "field": "总投资额(", "name": "总投资额", "unit": "亿元" }, + { "field": "项目推进主", "name": "项目推进主体" }, + { "field": "项目进度", "name": "项目进度" }, + { "field": "项目来源", "name": "项目来源" }, + { "field": "备注", "name": "备注" } + ], + "show": false, + "flyTo": true + }, + { "id": 3070, "pid": 30, "name": "GeoServer WFS", "type": "group" }, + { + "pid": 3070, + "type": "wfs", + "name": "建筑物面", + "url": "//server.mars3d.cn/geoserver/mars/ows", + "layer": "mars:hfjzw", + "parameters": { "maxFeatures": 500 }, + "minimumLevel": 15, + "symbol": { + "type": "polygonP", + "styleOptions": { "color": "#00469c", "outline": false, "opacity": 1 } + }, + "buildings": { "cloumn": "floor" }, + "center": { + "lat": 31.818396, + "lng": 117.229083, + "alt": 2554.4, + "heading": 359.2, + "pitch": -83.1 + }, + "popup": "名称:{NAME}
层数:{floor}" + }, + { + "pid": 3070, + "name": "教育设施点", + "type": "wfs", + "url": "//server.mars3d.cn/geoserver/mars/ows", + "layer": "mars:hfjy", + "parameters": { "maxFeatures": 500 }, + "minimumLevel": 13, + "symbol": { + "type": "billboardP", + "styleOptions": { + "image": "//data.mars3d.cn/img/marker/mark-red.png", + "scaleByDistance": true, + "scaleByDistance_far": 20000, + "scaleByDistance_farValue": 0.6, + "scaleByDistance_near": 1000, + "scaleByDistance_nearValue": 1, + "clampToGround": true, + "label": { + "text": "{项目名称}", + "font_size": 15, + "color": "#ffffff", + "outline": true, + "outlineColor": "#000000", + "pixelOffsetY": -30, + "distanceDisplayCondition": true, + "distanceDisplayCondition_far": 2000, + "distanceDisplayCondition_near": 0 + } + } + }, + "center": { + "lat": 31.812256, + "lng": 117.229873, + "alt": 4683.91, + "heading": 357.4, + "pitch": -65.4 + }, + "popup": "all" + }, + { "id": 3010, "pid": 30, "name": "ArcGIS WFS", "type": "group" }, + { + "pid": 3010, + "type": "arcgis_wfs", + "name": "兴趣点", + "url": "//server.mars3d.cn/arcgis/rest/services/mars/hefei/MapServer/1", + "where": " 1=1 ", + "minimumLevel": 15, + "center": { + "lat": 31.818396, + "lng": 117.229083, + "alt": 2554.4, + "heading": 359.2, + "pitch": -83.1 + }, + "symbol": { + "type": "billboardP", + "styleOptions": { + "image": "//data.mars3d.cn/img/marker/mark-blue.png", + "scaleByDistance": true, + "scaleByDistance_far": 20000, + "scaleByDistance_farValue": 0.6, + "scaleByDistance_near": 1000, + "scaleByDistance_nearValue": 1, + "clampToGround": true, + "label": { + "text": "{NAME}", + "font_size": 15, + "color": "#ffffff", + "outline": true, + "outlineColor": "#000000", + "pixelOffsetY": -30, + "distanceDisplayCondition": true, + "distanceDisplayCondition_far": 3000, + "distanceDisplayCondition_near": 0 + } + }, + "styleField": "address", + "styleFieldOptions": { + "AB03": { "image": "//data.mars3d.cn/img/marker/mark-red.png" }, + "A980": { "image": "//data.mars3d.cn/img/marker/mark-blue.png" }, + "A900": { "image": "//data.mars3d.cn/img/marker/mark-green.png" } + } + }, + "popup": "名称:{NAME}
地址:{address}", + "show": false + }, + { + "pid": 3010, + "type": "arcgis_wfs", + "name": "道路", + "url": "//server.mars3d.cn/arcgis/rest/services/mars/hefei/MapServer/28", + "minimumLevel": 14, + "symbol": { + "type": "polylineP", + "styleOptions": { "color": "#3388ff", "width": 3, "clampToGround": true }, + "styleField": "NAME", + "styleFieldOptions": { + "祁门路": { "color": "#8744c0", "width": 3 }, + "东流路": { "color": "#f7ba2a", "width": 3 }, + "翡翠路": { "color": "#20a0ff", "width": 3 }, + "岳西路": { "color": "#50bfff", "width": 3 } + } + }, + "popup": "名称:{NAME}", + "center": { + "lat": 31.814176, + "lng": 117.225362, + "alt": 5105.3, + "heading": 359.2, + "pitch": -83.1 + } + }, + { + "pid": 3010, + "type": "arcgis_wfs", + "name": "建筑物面", + "url": "//server.mars3d.cn/arcgis/rest/services/mars/hefei/MapServer/37", + "minimumLevel": 15, + "symbol": { + "styleOptions": { "color": "#0d3685", "outlineColor": "#0d3685", "opacity": 0.8 } + }, + "buildings": { "cloumn": "floor" }, + "debuggerTileInfo": false, + "center": { + "lat": 31.816951, + "lng": 117.22898, + "alt": 1916.7, + "heading": 0.3, + "pitch": -78.8 + }, + "popup": "名称:{NAME}
层数:{floor}" + }, + { "id": 3060, "pid": 30, "name": "CZML数据", "type": "group" }, + { + "id": 306010, + "pid": 3060, + "type": "czml", + "name": "汽车", + "url": "{dataServer}/file/czml/car.czml", + "center": { + "lat": 40.894745, + "lng": 121.920252, + "alt": 904, + "heading": 64, + "pitch": -67 + }, + "onWidget": "control-clock", + "radio": true, + "flyTo": true + }, + { + "id": 306011, + "pid": 3060, + "type": "czml", + "name": "卫星轨道", + "url": "{dataServer}/file/czml/satellite-simple.czml", + "popup": "all", + "onWidget": "control-clock", + "radio": true, + "flyTo": true + }, + { "id": 3050, "pid": 30, "name": "KML数据", "type": "group" }, + { + "pid": 3050, + "type": "kml", + "name": "海上安全警告", + "url": "{dataServer}/file/kml/NAVWARN.kmz", + "popup": "all" + }, + { + "pid": 3050, + "type": "kml", + "name": "国境线", + "url": "{dataServer}/file/kml/countryboundary.kml", + "symbol": { "styleOptions": { "color": "#FED976", "width": 2 } } + }, + { + "pid": 3050, + "type": "kml", + "name": "省界线", + "url": "{dataServer}/file/kml/province.kml", + "symbol": { "styleOptions": { "color": "#00FF00", "width": 2 } } + }, + { "id": 20, "name": "三维模型", "type": "group" }, + { "id": 2010, "pid": 20, "name": "gltf模型", "type": "group" }, + { + "pid": 2010, + "type": "graphic", + "name": "风力发电机", + "data": [ + { + "type": "modelP", + "position": [117.219071, 31.828783, 39.87], + "style": { + "url": "//data.mars3d.cn/gltf/mars/fengche.gltf", + "scale": 50, + "heading": -93 + } + } + ], + "popup": "示例信息,这是一个风力发电机", + "center": { + "lat": 31.821083, + "lng": 117.21832, + "alt": 832.64, + "heading": 2.3, + "pitch": -39.2 + } + }, + { + "pid": 2010, + "type": "graphic", + "name": "警车", + "data": [ + { + "type": "modelP", + "position": [117.217458, 31.815349, 35.03], + "style": { + "url": "//data.mars3d.cn/gltf/mars/jingche/jingche.gltf", + "scale": 2, + "heading": -95, + "clampToGround": true + } + } + ], + "center": { + "lat": 31.815363, + "lng": 117.215958, + "alt": 107.35, + "heading": 90.7, + "pitch": -26.1 + } + }, + { "id": 2040, "pid": 20, "name": "城市白模", "type": "group" }, + { + "id": 204011, + "pid": 2040, + "type": "3dtiles", + "name": "合肥市区", + "url": "{dataServer}/3dtiles/jzw-hefei/tileset.json", + "maximumScreenSpaceError": 1, + "style": { + "color": { + "conditions": [["true", "color('rgba(42, 160, 224, 1)')"]] + } + }, + "marsJzwStyle": true, + "highlight": { "type": "click", "color": "#FFFF00" }, + "popup": [ + { "field": "objectid", "name": "编号" }, + { "field": "name", "name": "名称" }, + { "field": "height", "name": "楼高", "unit": "米" } + ], + "center": { + "lat": 31.786281, + "lng": 117.223716, + "alt": 3718, + "heading": 2, + "pitch": -45 + } + }, + { + "pid": 2040, + "type": "3dtiles", + "name": "合肥市区-带贴图", + "url": "{dataServer}/3dtiles/jzw-hefei-cz/tileset.json", + "maximumScreenSpaceError": 1, + "marsJzwStyle": true, + "highlight": { "type": "click", "color": "#FFFF00" }, + "popup": [ + { "field": "objectid", "name": "编号" }, + { "field": "remark", "name": "名称" }, + { "field": "height", "name": "楼高", "unit": "米" } + ], + "center": { + "lat": 31.786281, + "lng": 117.223716, + "alt": 3718, + "heading": 2, + "pitch": -45 + } + }, + { + "id": 204012, + "pid": 2040, + "type": "3dtiles", + "name": "上海市区", + "url": "{dataServer}/3dtiles/jzw-shanghai/tileset.json", + "maximumScreenSpaceError": 4, + "style": { + "color": { + "conditions": [ + ["${floor} >= 200", "rgba(45, 0, 75, 0.5)"], + ["${floor} >= 100", "rgb(170, 162, 204)"], + ["${floor} >= 50", "rgb(224, 226, 238)"], + ["${floor} >= 25", "rgb(252, 230, 200)"], + ["${floor} >= 10", "rgb(248, 176, 87)"], + ["${floor} >= 5", "rgb(198, 106, 11)"], + ["true", "rgb(127, 59, 8)"] + ] + } + }, + "highlight": { "type": "click", "color": "#FFFF00" }, + "popup": [ + { "field": "name", "name": "名称" }, + { "field": "floor", "name": "楼层" } + ], + "center": { + "lat": 31.257341, + "lng": 121.466139, + "alt": 2170.8, + "heading": 122.2, + "pitch": -31.8 + } + }, + + { "id": 2050, "pid": 20, "name": "点云", "type": "group" }, + { + "id": 202016, + "pid": 2050, + "type": "3dtiles", + "name": "高压线塔杆", + "url": "{dataServer}/3dtiles/pnts-ganta/tileset.json", + "maximumScreenSpaceError": 1, + "position": { "alt": 31 }, + "style": { + "color": { + "conditions": [ + [ + "(${Classification} >= 4) && (${Classification} < 5) ", + "color('#DC143C')" + ], + [ + "(${Classification} >= 7) && (${Classification} < 8) ", + "color('#7B68EE')" + ], + [ + "(${Classification} >= 16) && (${Classification} < 17) ", + "color('#00CED1')" + ], + [ + "(${Classification} >= 17) && (${Classification} < 18) ", + "color('#3CB371')" + ], + [ + "(${Classification} >= 18) && (${Classification} < 19) ", + "color('#FFFF00')" + ], + [ + "(${Classification} >= 19) && (${Classification} < 20) ", + "color('#FFA500')" + ], + [ + "(${Classification} >= 20) && (${Classification} < 21) ", + "color('#FF6347')" + ] + ] + } + }, + "hasOpacity": false, + "center": { + "lat": 31.504746, + "lng": 118.264278, + "alt": 580, + "heading": 29, + "pitch": -49 + } + }, + { "id": 2060, "pid": 20, "name": "BIM模型", "type": "group" }, + { + "id": 20601121, + "pid": 2060, + "type": "3dtiles", + "name": "大学教学楼", + "url": "{dataServer}/3dtiles/bim-daxue/tileset.json", + "position": { "lng": 117.251229, "lat": 31.844015, "alt": 31.2 }, + "highlight": { "type": "click", "color": "#FFFF00" }, + "popup": "all", + "scenetree": "scenetree.json", + "center": { "lat": 31.842516, "lng": 117.25107, "alt": 145, "heading": 8, "pitch": -39 } + }, + { + "pid": 2060, + "type": "3dtiles", + "name": "轻轨地铁站", + "url": "{dataServer}/3dtiles/bim-ditiezhan/tileset.json", + "position": { "lng": 117.203994, "lat": 31.857999, "alt": 28.9 }, + "rotation": { "z": 168.1 }, + "highlight": { "type": "click", "color": "#00FF00" }, + "popup": "all", + "scenetree": "scenetree.json", + "center": { + "lat": 31.856125, + "lng": 117.204513, + "alt": 155, + "heading": 350, + "pitch": -31 + } + }, + { + "id": 206012, + "pid": 2060, + "type": "3dtiles", + "name": "桥梁", + "url": "{dataServer}/3dtiles/bim-qiaoliang/tileset.json", + "position": { "lng": 117.096906, "lat": 31.851564, "alt": 45 }, + "rotation": { "z": 17.5 }, + "maximumScreenSpaceError": 16, + "skipLevelOfDetail": true, + "loadSiblings": true, + "cullRequestsWhileMoving": true, + "cullRequestsWhileMovingMultiplier": 10, + "preferLeaves": true, + "progressiveResolutionHeightFraction": 0.5, + "dynamicScreenSpaceError": true, + "preloadWhenHidden": true, + "center": { + "lat": 31.849357, + "lng": 117.099194, + "alt": 306.2, + "heading": 327.1, + "pitch": -30.9 + }, + "scenetree": "scenetree.json", + "highlight": { "type": "click", "color": "#00FF00" }, + "popup": "all" + }, + { "id": 2020, "pid": 20, "name": "人工建模", "type": "group" }, + { + "id": 202013, + "pid": 2020, + "type": "3dtiles", + "name": "地下管网", + "url": "{dataServer}/3dtiles/max-piping/tileset.json", + "position": { "lng": 117.215457, "lat": 31.843363, "alt": -3.6 }, + "rotation": { "z": 336.7 }, + "maximumScreenSpaceError": 2, + "highlight": { "type": "click", "color": "#00FF00" }, + "popup": "all", + "center": { + "lat": 31.838821, + "lng": 117.216402, + "alt": 461, + "heading": 0, + "pitch": -46 + }, + "msg": "演示数据,地下数据拖动时会在地面漂移" + }, + { + "id": 202012, + "pid": 2020, + "type": "3dtiles", + "name": "石化工厂", + "url": "{dataServer}/3dtiles/max-shihua/tileset.json", + "position": { "lng": 117.077158, "lat": 31.659116, "alt": -2.0 }, + "maximumScreenSpaceError": 1, + "highlight": { "type": "click", "color": "#00FF00" }, + "popup": "all", + "scenetree": "scenetree.json", + "center": { + "lat": 31.654916, + "lng": 117.08278, + "alt": 279, + "heading": 316, + "pitch": -29 + } + }, + { + "id": 202030, + "pid": 2020, + "name": "水利闸门", + "type": "group", + "center": { + "lat": 29.794301, + "lng": 121.47998, + "alt": 262, + "heading": 191, + "pitch": -35 + } + }, + { + "pid": 202030, + "name": "闸门", + "type": "graphic", + "data": [ + { + "type": "modelP", + "position": [121.479813, 29.791278, 16], + "style": { + "url": "//data.mars3d.cn/gltf/mars/zhamen.glb", + "heading": 105 + } + } + ], + "center": { + "lat": 29.791607, + "lng": 121.479925, + "alt": 27, + "heading": 198, + "pitch": -18 + } + }, + { + "id": 202011, + "pid": 202030, + "type": "3dtiles", + "name": "整体", + "url": "{dataServer}/3dtiles/max-fsdzm/tileset.json", + "position": { "alt": 15.2 }, + "maximumScreenSpaceError": 1, + "center": { + "lat": 29.792675, + "lng": 121.480207, + "alt": 190.8, + "heading": 196.1, + "pitch": -49 + } + }, + { "id": 2030, "pid": 20, "name": "倾斜摄影", "type": "group" }, + { + "pid": 2030, + "type": "3dtiles", + "name": "大雁塔", + "url": "{dataServer}/3dtiles/qx-dyt/tileset.json", + "position": { "alt": -27 }, + "maximumScreenSpaceError": 1, + "center": { + "lat": 34.215516, + "lng": 108.960251, + "alt": 834, + "heading": 4, + "pitch": -48 + }, + "flat": { + "enabled": true, + "editHeight": -24 + }, + "flyTo": false, + "show": false + }, + { + "pid": 2030, + "name": "校园(含单体)", + "type": "group", + "hasOpacity": true, + "center": { + "lat": 43.821193, + "lng": 125.143124, + "alt": 990, + "heading": 342, + "pitch": -50 + }, + "layers": [ + { + "type": "geojson", + "name": "校园-单体化", + "url": "{dataServer}/file/geojson/dth-xuexiao-fd.json", + "symbol": { + "type": "polygonP", + "styleOptions": { + "color": "rgba(255, 255, 255, 0.01)", + "clampToGround": true, + "classification": true, + "buffer": 1, + "highlight": { + "type": "click", + "color": "rgba(255,255,0,0.4)" + } + } + }, + "popup": [ + { "field": "name", "name": "学校场所" }, + { "field": "sfkf", "name": "是否开放" }, + { "field": "remark", "name": "备注信息" } + ] + }, + { + "pid": 2030, + "type": "3dtiles", + "name": "校园", + "url": "{dataServer}/3dtiles/qx-xuexiao/tileset.json", + "position": { "alt": 279.0 }, + "maximumScreenSpaceError": 1 + } + ] + }, + { + "id": 203014, + "pid": 2030, + "type": "3dtiles", + "name": "县城社区", + "url": "{dataServer}/3dtiles/qx-shequ/tileset.json", + "position": { "alt": 148.2 }, + "maximumScreenSpaceError": 2, + "dynamicScreenSpaceError": true, + "cullWithChildrenBounds": false, + "center": { + "lat": 28.440864, + "lng": 119.486477, + "alt": 588.23, + "heading": 268.6, + "pitch": -37.8 + }, + "show": false, + "flyTo": false + }, + { + "id": 203015, + "pid": 2030, + "name": "合肥天鹅湖", + "type": "3dtiles", + "url": "{dataServer}/3dtiles/qx-teh/tileset.json", + "position": { "lng": 117.218434, "lat": 31.81807, "alt": 163 }, + "maximumScreenSpaceError": 16, + "dynamicScreenSpaceError": true, + "cullWithChildrenBounds": false, + "skipLevelOfDetail": true, + "preferLeaves": true, + "center": { + "lat": 31.795308, + "lng": 117.21948, + "alt": 1820, + "heading": 0, + "pitch": -39 + } + }, + { + "id": 203013, + "pid": 2030, + "type": "geojson", + "name": "文庙-单体化", + "url": " {dataServer}/file/geojson/dth-wm.json", + "symbol": { + "type": "polygonP", + "styleOptions": { + "color": "rgba(255, 255, 255, 0.01)", + "clampToGround": true, + "classification": true, + "buffer": 1, + "highlight": { + "color": "rgba(255,255,0,0.4)" + } + } + }, + "popup": [ + { "field": "name", "name": "房屋名称" }, + { "field": "jznf", "name": "建造年份" }, + { "field": "ssdw", "name": "所属单位" }, + { "field": "remark", "name": "备注信息" } + ] + }, + { + "id": 203012, + "pid": 2030, + "type": "3dtiles", + "name": "文庙", + "url": "{dataServer}/3dtiles/qx-simiao/tileset.json", + "position": { "alt": 38.8 }, + "maximumScreenSpaceError": 2, + "dynamicScreenSpaceError": true, + "cullWithChildrenBounds": false, + "skipLevelOfDetail": true, + "preferLeaves": true, + "center": { + "lat": 33.589536, + "lng": 119.032216, + "alt": 145.08, + "heading": 3.1, + "pitch": -22.9 + } + }, + { "id": 99, "name": "数据图层", "type": "group" } + ] +} diff --git a/src/views/showComponents/showMap/data.js b/src/views/showComponents/showMap/data.js new file mode 100644 index 0000000..f1f3af1 --- /dev/null +++ b/src/views/showComponents/showMap/data.js @@ -0,0 +1,4906 @@ +export default { + // 场地 + aThousandFieldsList: [ + { + id: 44, + name: '测试场地2', + cablewayLength: '200', + cablewayWidth: '120', + cablewaTransPointVoList: [ + { + lng: '106.894781', + lat: '33.687101', + sort: 1, + }, + { + lng: '106.898417', + lat: '33.685833', + sort: 2, + }, + { + lng: '106.897537', + lat: '33.681151', + sort: 3, + }, + { + lng: '106.893373', + lat: '33.68276', + sort: 4, + }, + ], + }, + { + id: 45, + name: '测试3', + cablewayLength: '20', + cablewayWidth: '20', + cablewaTransPointVoList: [ + { + lng: '107.129209', + lat: '33.510739', + sort: 1, + }, + { + lng: '107.130903', + lat: '33.5107', + sort: 2, + }, + { + lng: '107.129784', + lat: '33.508261', + sort: 3, + }, + ], + }, + { + id: 48, + name: '测试6', + cablewayLength: '900', + cablewayWidth: '900', + cablewaTransPointVoList: [ + { + lng: '107.100094', + lat: '33.525052', + sort: 1, + }, + { + lng: '107.120666', + lat: '33.520527', + sort: 2, + }, + { + lng: '107.117893', + lat: '33.496357', + sort: 3, + }, + { + lng: '107.092813', + lat: '33.501846', + sort: 4, + }, + ], + }, + ], + + // 索道 + cablewaTransVos: [ + { + id: 38, + towerName: 'N1625', + cablewayLength: '20', + maxHeight: '20', + safetyDistance: '20', + maxSlope: '20', + baiduLon: '106.87889987499999', + baiduLat: '33.692047024999994', + cablewayWidth: '20', + cablewaTransPointVoList: [ + { + lng: '106.879706', + lat: '33.69304', + sort: 1, + }, + { + lng: '106.881441', + lat: '33.691294', + sort: 2, + }, + { + lng: '106.883368', + lat: '33.69068', + sort: 3, + }, + { + lng: '106.884369', + lat: '33.689842', + sort: 4, + }, + { + lng: '106.885644', + lat: '33.689096', + sort: 5, + }, + { + lng: '106.886563', + lat: '33.688066', + sort: 6, + }, + ], + }, + { + id: 41, + towerName: 'N1630', + cablewayLength: '20', + maxHeight: '20', + safetyDistance: '20', + maxSlope: '20', + baiduLon: '106.89681285555557', + baiduLat: '33.68336431666666', + cablewayWidth: '20', + cablewaTransPointVoList: [ + { + lng: '106.907711', + lat: '33.674689', + sort: 1, + }, + { + lng: '106.913117', + lat: '33.671931', + sort: 2, + }, + { + lng: '106.916066', + lat: '33.667435', + sort: 3, + }, + ], + }, + { + id: 46, + towerName: '1630附近', + cablewayLength: '30', + maxHeight: '20', + safetyDistance: '20', + maxSlope: '20', + baiduLon: null, + baiduLat: null, + cablewayWidth: '20', + cablewaTransPointVoList: [ + { + lng: '106.895372', + lat: '33.681381', + sort: 1, + }, + { + lng: '106.898561', + lat: '33.680006', + sort: 2, + }, + { + lng: '106.901632', + lat: '33.677453', + sort: 3, + }, + { + lng: '106.903168', + lat: '33.675488', + sort: 4, + }, + ], + }, + ], + + // 公路线 + highwayList: [ + { + id: 39, + towerName: 'N1626', + cablewayLength: '3000', + baiduLon: '106.88272635833333', + baiduLat: '33.68936725277777', + cablewayWidth: '50', + cablewaTransPointVoList: [ + { + lng: '106.882835', + lat: '33.69299', + sort: 1, + }, + { + lng: '106.882301', + lat: '33.691049', + sort: 2, + }, + { + lng: '106.881657', + lat: '33.69067', + sort: 3, + }, + { + lng: '106.880292', + lat: '33.689683', + sort: 4, + }, + { + lng: '106.87944', + lat: '33.688693', + sort: 5, + }, + { + lng: '106.878384', + lat: '33.688167', + sort: 6, + }, + { + lng: '106.877823', + lat: '33.687462', + sort: 7, + }, + ], + }, + { + id: 47, + towerName: 'N1646', + cablewayLength: '600', + baiduLon: '106.96266106944445', + baiduLat: '33.629635872222224', + cablewayWidth: '600', + cablewaTransPointVoList: [ + { + lng: '106.948784', + lat: '33.665671', + sort: 1, + }, + { + lng: '106.950726', + lat: '33.662146', + sort: 2, + }, + { + lng: '106.956024', + lat: '33.658033', + sort: 3, + }, + { + lng: '106.960263', + lat: '33.653626', + sort: 4, + }, + { + lng: '106.963477', + lat: '33.646135', + sort: 5, + }, + { + lng: '106.967997', + lat: '33.642522', + sort: 6, + }, + { + lng: '106.972765', + lat: '33.638702', + sort: 7, + }, + { + lng: '106.977563', + lat: '33.633095', + sort: 8, + }, + ], + }, + ], + + // 跨越杆塔 + spanInfoVos: [ + { + id: 103, + spanTowerName: 'N1629-N1630', + towerInfoVo: { + id: 103, + towerName: 'N1629', + baiduLon: '106.89279451111112', + baiduLat: '33.684803744444444', + towerType: null, + altitude: null, + time1: '2025-07-14', + time2: '2025-08-04', + time3: '2026-01-13', + time4: '2026-01-13', + time5: '2026-01-13', + time6: '2026-01-13', + time7: '2026-01-13', + time8: '2026-01-13', + time9: '2026-01-13', + time10: null, + existSpan: 1, + towerProgress: 9, + }, + lonAndLat: + '106.895425@33.688046,106.894839@33.684913,106.893898@33.683099,106.892686@33.681796', + upperLine: '20', + lowerLine: '20', + intersectionAngle: '20', + verticalDistance: '20', + safetyMargin: '20', + }, + { + id: 136, + spanTowerName: 'N1662-N1663', + towerInfoVo: { + id: 136, + towerName: 'N1662', + baiduLon: '107.02483106944445', + baiduLat: '33.586295508333336', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 1, + towerProgress: 0, + }, + lonAndLat: + '106.902942@33.673265,106.905639@33.676488,106.908672@33.681814,106.91297@33.686017', + upperLine: '30', + lowerLine: '60', + intersectionAngle: '120', + verticalDistance: '600', + safetyMargin: '20', + }, + ], + + // 杆塔信息 + towerInfoVos: [ + { + id: 99, + towerName: 'N1625', + baiduLon: '106.87889987499999', + baiduLat: '33.692047024999994', + towerType: null, + altitude: null, + time1: '2025-07-14', + time2: '2025-07-14', + time3: '2025-07-14', + time4: '2026-01-13', + time5: '2026-01-13', + time6: '2026-01-13', + time7: '2026-01-13', + time8: '2026-01-13', + time9: '2026-01-13', + time10: null, + existSpan: 0, + towerProgress: 9, + }, + { + id: 100, + towerName: 'N1626', + baiduLon: '106.88272635833333', + baiduLat: '33.68936725277777', + towerType: null, + altitude: null, + time1: '2025-07-14', + time2: '2025-07-14', + time3: '2025-07-14', + time4: '2026-01-13', + time5: '2026-01-13', + time6: '2026-01-13', + time7: '2026-01-13', + time8: '2026-01-13', + time9: '2026-01-13', + time10: null, + existSpan: 0, + towerProgress: 9, + }, + { + id: 101, + towerName: 'N1627', + baiduLon: '106.88483571666667', + baiduLat: '33.68788987222222', + towerType: null, + altitude: null, + time1: '2025-07-14', + time2: '2025-07-14', + time3: '2025-08-04', + time4: '2025-08-04', + time5: '2025-08-04', + time6: '2025-08-04', + time7: '2025-08-04', + time8: '2025-08-04', + time9: '2026-01-13', + time10: null, + existSpan: 0, + towerProgress: 9, + }, + { + id: 240, + towerName: 'N1628', + baiduLon: '106.88983978611111', + baiduLat: '33.68586292222222', + towerType: '1', + altitude: null, + time1: '2026-01-13', + time2: '2026-01-13', + time3: '2026-01-13', + time4: '2026-01-13', + time5: '2026-01-13', + time6: '2026-01-13', + time7: '2026-01-13', + time8: '2026-01-13', + time9: '2026-01-13', + time10: null, + existSpan: 0, + towerProgress: 9, + }, + { + id: 103, + towerName: 'N1629', + baiduLon: '106.89279451111112', + baiduLat: '33.684803744444444', + towerType: null, + altitude: null, + time1: '2025-07-14', + time2: '2025-08-04', + time3: '2026-01-13', + time4: '2026-01-13', + time5: '2026-01-13', + time6: '2026-01-13', + time7: '2026-01-13', + time8: '2026-01-13', + time9: '2026-01-13', + time10: null, + existSpan: 1, + towerProgress: 9, + }, + { + id: 104, + towerName: 'N1630', + baiduLon: '106.89681285555557', + baiduLat: '33.68336431666666', + towerType: null, + altitude: null, + time1: '2026-01-13', + time2: '2026-01-13', + time3: '2026-01-13', + time4: '2026-01-13', + time5: '2026-01-13', + time6: '2026-01-13', + time7: '2026-01-13', + time8: '2026-01-13', + time9: '2026-01-13', + time10: null, + existSpan: 1, + towerProgress: 9, + }, + { + id: 242, + towerName: 'N1631', + baiduLon: '106.90209481944446', + baiduLat: '33.68147096111111', + towerType: '1', + altitude: null, + time1: '2026-01-13', + time2: '2026-01-13', + time3: '2026-01-13', + time4: '2026-01-13', + time5: '2026-01-13', + time6: '2026-01-13', + time7: '2026-01-13', + time8: '2026-01-13', + time9: '2026-01-13', + time10: null, + existSpan: 0, + towerProgress: 9, + }, + { + id: 106, + towerName: 'N1632', + baiduLon: '106.90469253055556', + baiduLat: '33.68053971111111', + towerType: null, + altitude: null, + time1: '2025-07-28', + time2: '2025-07-28', + time3: '2025-07-28', + time4: '2025-07-28', + time5: '2025-07-28', + time6: '2025-07-28', + time7: '2025-07-28', + time8: '2026-01-13', + time9: '2026-01-13', + time10: null, + existSpan: 0, + towerProgress: 9, + }, + { + id: 107, + towerName: 'N1633', + baiduLon: '106.91053291666667', + baiduLat: '33.678445744444446', + towerType: null, + altitude: null, + time1: '2025-07-28', + time2: '2026-01-13', + time3: '2026-01-13', + time4: '2026-01-13', + time5: '2026-01-13', + time6: '2026-01-13', + time7: '2026-01-13', + time8: '2026-01-13', + time9: '2026-01-13', + time10: null, + existSpan: 0, + towerProgress: 9, + }, + { + id: 108, + towerName: 'N1634', + baiduLon: '106.91516564444446', + baiduLat: '33.676784863888884', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 109, + towerName: 'N1635', + baiduLon: '106.91743894166667', + baiduLat: '33.675969394444444', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 110, + towerName: 'N1636', + baiduLon: '106.92294880277778', + baiduLat: '33.67399321944444', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 111, + towerName: 'N1637', + baiduLon: '106.92540110277778', + baiduLat: '33.67311374722222', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 112, + towerName: 'N1638', + baiduLon: '106.9306479888889', + baiduLat: '33.66812965277778', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 113, + towerName: 'N1639', + baiduLon: '106.93406461666667', + baiduLat: '33.66488340555556', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 114, + towerName: 'N1640', + baiduLon: '106.93877821944444', + baiduLat: '33.660404819444445', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 115, + towerName: 'N1641', + baiduLon: '106.94579118888889', + baiduLat: '33.65373969722222', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 116, + towerName: 'N1642', + baiduLon: '106.95199387222223', + baiduLat: '33.64784385555556', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 117, + towerName: 'N1643', + baiduLon: '106.95911364166668', + baiduLat: '33.64107457777778', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 118, + towerName: 'N1644', + baiduLon: '106.95955625', + baiduLat: '33.63786148888889', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 119, + towerName: 'N1645', + baiduLon: '106.96166594722223', + baiduLat: '33.63196567777778', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 120, + towerName: 'N1646', + baiduLon: '106.96266106944445', + baiduLat: '33.629635872222224', + towerType: null, + altitude: null, + time1: '2025-07-29', + time2: '2026-01-13', + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 2, + }, + { + id: 121, + towerName: 'N1647', + baiduLon: '106.96629031666667', + baiduLat: '33.626488880555556', + towerType: null, + altitude: null, + time1: '2025-07-29', + time2: '2025-07-29', + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 2, + }, + { + id: 122, + towerName: 'N1648', + baiduLon: '106.971664975', + baiduLat: '33.62182780277778', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 123, + towerName: 'N1649', + baiduLon: '106.97446419166667', + baiduLat: '33.619399905555554', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 124, + towerName: 'N1650', + baiduLon: '106.97876885277778', + baiduLat: '33.61566596666667', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 125, + towerName: 'N1651', + baiduLon: '106.98060040833333', + baiduLat: '33.61407688055556', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 126, + towerName: 'N1652', + baiduLon: '106.98310834722223', + baiduLat: '33.60670861388889', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 127, + towerName: 'N1653', + baiduLon: '106.98990595833334', + baiduLat: '33.604237680555556', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 128, + towerName: 'N1654', + baiduLon: '106.99204996666667', + baiduLat: '33.603458297222225', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 129, + towerName: 'N1655', + baiduLon: '106.99390165277778', + baiduLat: '33.602785233333336', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 130, + towerName: 'N1656', + baiduLon: '106.99565646666667', + baiduLat: '33.602147075000005', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 131, + towerName: 'N1657', + baiduLon: '107.00429946111112', + baiduLat: '33.601631358333336', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 132, + towerName: 'N1658', + baiduLon: '107.00667711111112', + baiduLat: '33.599655769444446', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 133, + towerName: 'N1659', + baiduLon: '107.01120240555555', + baiduLat: '33.595895741666666', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 134, + towerName: 'N1660', + baiduLon: '107.0138583', + baiduLat: '33.59368858333334', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 135, + towerName: 'N1661', + baiduLon: '107.01835245', + baiduLat: '33.58995248888889', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 136, + towerName: 'N1662', + baiduLon: '107.02483106944445', + baiduLat: '33.586295508333336', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 1, + towerProgress: 0, + }, + { + id: 137, + towerName: 'N1663', + baiduLon: '107.03117114722222', + baiduLat: '33.58271615555556', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 1, + towerProgress: 0, + }, + { + id: 138, + towerName: 'N1664', + baiduLon: '107.03493397222222', + baiduLat: '33.57686900833334', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 139, + towerName: 'N1665', + baiduLon: '107.03575476111111', + baiduLat: '33.56811136666667', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 140, + towerName: 'N1666', + baiduLon: '107.03609040833334', + baiduLat: '33.56453069166666', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 141, + towerName: 'N1667', + baiduLon: '107.03636213888889', + baiduLat: '33.56163068888888', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 142, + towerName: 'N1668', + baiduLon: '107.03690338333332', + baiduLat: '33.555856025', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 143, + towerName: 'N1669', + baiduLon: '107.03744006388888', + baiduLat: '33.550126202777776', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 144, + towerName: 'N1670', + baiduLon: '107.03928842222221', + baiduLat: '33.546980472222224', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 145, + towerName: 'N1671', + baiduLon: '107.04241076111111', + baiduLat: '33.54166567777778', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 146, + towerName: 'N1672', + baiduLon: '107.04389661944444', + baiduLat: '33.54047245277778', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 147, + towerName: 'N1673', + baiduLon: '107.04648394444445', + baiduLat: '33.53839463055555', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 148, + towerName: 'N1674', + baiduLon: '107.04841307777778', + baiduLat: '33.535635291666665', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 149, + towerName: 'N1675', + baiduLon: '107.05034115555556', + baiduLat: '33.53287725277778', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 150, + towerName: 'N1676', + baiduLon: '107.05264059166666', + baiduLat: '33.5309016', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 151, + towerName: 'N1677', + baiduLon: '107.054675725', + baiduLat: '33.52915297777778', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 152, + towerName: 'N1678', + baiduLon: '107.05588587777777', + baiduLat: '33.528112980555555', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 153, + towerName: 'N1679', + baiduLon: '107.05907606666666', + baiduLat: '33.52705938333333', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 154, + towerName: 'N1680', + baiduLon: '107.06074234722222', + baiduLat: '33.52650909444444', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 155, + towerName: 'N1681', + baiduLon: '107.06761159722222', + baiduLat: '33.52564366111111', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 156, + towerName: 'N1682', + baiduLon: '107.07285009722222', + baiduLat: '33.52343230277778', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 157, + towerName: 'N1683', + baiduLon: '107.08116067499999', + baiduLat: '33.51992359166667', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 158, + towerName: 'N1684', + baiduLon: '107.08675187777777', + baiduLat: '33.517562508333334', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 159, + towerName: 'N1685', + baiduLon: '107.09152458333332', + baiduLat: '33.51554673888889', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 160, + towerName: 'N1686', + baiduLon: '107.09477736666666', + baiduLat: '33.514313275', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 161, + towerName: 'N1687', + baiduLon: '107.09957521388888', + baiduLat: '33.512494225', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 162, + towerName: 'N1688', + baiduLon: '107.10291558888888', + baiduLat: '33.51186830277778', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 163, + towerName: 'N1689', + baiduLon: '107.11012635277777', + baiduLat: '33.510516875', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 164, + towerName: 'N1690', + baiduLon: '107.11437585555555', + baiduLat: '33.51029983055555', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 165, + towerName: 'N1691', + baiduLon: '107.12197627777778', + baiduLat: '33.509911333333335', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 166, + towerName: 'N1692', + baiduLon: '107.12729091388888', + baiduLat: '33.50963937777778', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 167, + towerName: 'N1693', + baiduLon: '107.13185407222221', + baiduLat: '33.509405780555554', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 168, + towerName: 'N1694', + baiduLon: '107.13420824722223', + baiduLat: '33.509285105555556', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 169, + towerName: 'N1695', + baiduLon: '107.14452203611111', + baiduLat: '33.51179395', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 170, + towerName: 'N1696', + baiduLon: '107.14942840833334', + baiduLat: '33.51298703888889', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 171, + towerName: 'N1697', + baiduLon: '107.15320302500001', + baiduLat: '33.51390478611111', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 172, + towerName: 'N1698', + baiduLon: '107.16171986666667', + baiduLat: '33.51274543611111', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 173, + towerName: 'N1699', + baiduLon: '107.16930140277778', + baiduLat: '33.511713125', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 174, + towerName: 'N1700', + baiduLon: '107.17114499444445', + baiduLat: '33.51146171944445', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 175, + towerName: 'N1701', + baiduLon: '107.17717084444445', + baiduLat: '33.51064066944444', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 176, + towerName: 'N1702', + baiduLon: '107.18028758055556', + baiduLat: '33.510215869444444', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 177, + towerName: 'N1703', + baiduLon: '107.18764553888889', + baiduLat: '33.51067403611111', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 178, + towerName: 'N1704', + baiduLon: '107.19631243611111', + baiduLat: '33.50894731388889', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 179, + towerName: 'N1705', + baiduLon: '107.19958722222222', + baiduLat: '33.50919581666667', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 180, + towerName: 'N1706', + baiduLon: '107.20419473333334', + baiduLat: '33.50954535', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 181, + towerName: 'N1707', + baiduLon: '107.21269180277778', + baiduLat: '33.51018920277778', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 182, + towerName: 'N1708', + baiduLon: '107.21754417222222', + baiduLat: '33.50910812777778', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 183, + towerName: 'N1709', + baiduLon: '107.22489088611111', + baiduLat: '33.50747086111111', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 184, + towerName: 'N1710', + baiduLon: '107.2290859888889', + baiduLat: '33.50653593333333', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 185, + towerName: 'N1711', + baiduLon: '107.23252855833333', + baiduLat: '33.50576839722222', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 186, + towerName: 'N1712', + baiduLon: '107.24074991111111', + baiduLat: '33.50393513611111', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 187, + towerName: 'N1713', + baiduLon: '107.24530951944445', + baiduLat: '33.50270233888889', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 188, + towerName: 'N1714', + baiduLon: '107.2521623111111', + baiduLat: '33.500849619444445', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 189, + towerName: 'N1715', + baiduLon: '107.2553572861111', + baiduLat: '33.499984955555554', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 190, + towerName: 'N1716', + baiduLon: '107.26325137222223', + baiduLat: '33.49784932222222', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 191, + towerName: 'N1717', + baiduLon: '107.2672419', + baiduLat: '33.49676971666667', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 192, + towerName: 'N1718', + baiduLon: '107.27186231111111', + baiduLat: '33.49551933055556', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 193, + towerName: 'N1719', + baiduLon: '107.27605959166667', + baiduLat: '33.49438219722222', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 194, + towerName: 'N1720', + baiduLon: '107.27950618333334', + baiduLat: '33.49344821666667', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 195, + towerName: 'N1721', + baiduLon: '107.28556099166667', + baiduLat: '33.491807219444446', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 196, + towerName: 'N1722', + baiduLon: '107.29004617222222', + baiduLat: '33.490591397222225', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 197, + towerName: 'N1723', + baiduLon: '107.29441120833333', + baiduLat: '33.49136511388889', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 198, + towerName: 'N1724', + baiduLon: '107.29902635833334', + baiduLat: '33.49218311111111', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 199, + towerName: 'N1725', + baiduLon: '107.30478243611111', + baiduLat: '33.49185753888889', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 200, + towerName: 'N1726', + baiduLon: '107.3070246861111', + baiduLat: '33.49173063333333', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 201, + towerName: 'N1727', + baiduLon: '107.31045335555555', + baiduLat: '33.491536616666664', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 202, + towerName: 'N1728', + baiduLon: '107.31446390277777', + baiduLat: '33.49130939166667', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 203, + towerName: 'N1729', + baiduLon: '107.31750061944444', + baiduLat: '33.49113733888889', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 204, + towerName: 'N1730', + baiduLon: '107.32287821666667', + baiduLat: '33.490199197222225', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 205, + towerName: 'N1731', + baiduLon: '107.32438668888888', + baiduLat: '33.49017777777778', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 206, + towerName: 'N1732', + baiduLon: '107.32871206666667', + baiduLat: '33.490115933333335', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 207, + towerName: 'N1733', + baiduLon: '107.33307901388889', + baiduLat: '33.49005254166667', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 208, + towerName: 'N1734', + baiduLon: '107.33784155833332', + baiduLat: '33.48998388888889', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 209, + towerName: 'N1735', + baiduLon: '107.34452406666666', + baiduLat: '33.48903289166667', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 210, + towerName: 'N1736', + baiduLon: '107.35018759444444', + baiduLat: '33.48822678333333', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 211, + towerName: 'N1737', + baiduLon: '107.35332285', + baiduLat: '33.48778031388889', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 212, + towerName: 'N1738', + baiduLon: '107.35660183333333', + baiduLat: '33.48763808333334', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 213, + towerName: 'N1739', + baiduLon: '107.36065488888889', + baiduLat: '33.48746216944445', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 214, + towerName: 'N1740', + baiduLon: '107.36523718055555', + baiduLat: '33.48726311111111', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 215, + towerName: 'N1741', + baiduLon: '107.37298667777777', + baiduLat: '33.48720511388889', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 216, + towerName: 'N1742', + baiduLon: '107.37573927777777', + baiduLat: '33.487914036111114', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 217, + towerName: 'N1743', + baiduLon: '107.37808158611111', + baiduLat: '33.488517361111114', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 218, + towerName: 'N1744', + baiduLon: '107.38458668611112', + baiduLat: '33.48867140555556', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 219, + towerName: 'N1745', + baiduLon: '107.38874067222223', + baiduLat: '33.48876953333333', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 220, + towerName: 'N1746', + baiduLon: '107.39265194166667', + baiduLat: '33.48886201111111', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 221, + towerName: 'N1747', + baiduLon: '107.3947088638889', + baiduLat: '33.48891038055556', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 222, + towerName: 'N1748', + baiduLon: '107.40106383888889', + baiduLat: '33.489060075', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 223, + towerName: 'N1749', + baiduLon: '107.4077989888889', + baiduLat: '33.489218236111114', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 224, + towerName: 'N1750', + baiduLon: '107.41075834444445', + baiduLat: '33.489199066666664', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 225, + towerName: 'N1751', + baiduLon: '107.4147729638889', + baiduLat: '33.48917279444444', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 226, + towerName: 'N1752', + baiduLon: '107.42196425', + baiduLat: '33.489125505555556', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 227, + towerName: 'N1753', + baiduLon: '107.42624698611111', + baiduLat: '33.48863003888889', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 228, + towerName: 'N1754', + baiduLon: '107.42808997777779', + baiduLat: '33.488416630555555', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 229, + towerName: 'N1755', + baiduLon: '107.43145668055556', + baiduLat: '33.48802677222222', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 230, + towerName: 'N1756', + baiduLon: '107.43984271111111', + baiduLat: '33.48925576111111', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 231, + towerName: 'N1757', + baiduLon: '107.44432376111112', + baiduLat: '33.48715838611111', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 232, + towerName: 'N1758', + baiduLon: '107.44786725555556', + baiduLat: '33.48549970277778', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 233, + towerName: 'N1759', + baiduLon: '107.453926425', + baiduLat: '33.48266303888889', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 234, + towerName: 'N1760', + baiduLon: '107.45880995277778', + baiduLat: '33.4798154', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 235, + towerName: 'N1761', + baiduLon: '107.46172051388889', + baiduLat: '33.478118127777776', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 236, + towerName: 'N1762', + baiduLon: '107.46597188055556', + baiduLat: '33.475638733333334', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + { + id: 237, + towerName: 'N1801', + baiduLon: '107.472359875', + baiduLat: '33.472528725000004', + towerType: null, + altitude: null, + time1: null, + time2: null, + time3: null, + time4: null, + time5: null, + time6: null, + time7: null, + time8: null, + time9: null, + time10: null, + existSpan: 0, + towerProgress: 0, + }, + ], + + // 3d杆塔 + towerList3D: [ + { + lon: 115.907428, + lat: 30.405114, + height: 52, + type: '耐张塔', + alt: 488.28, + headingStr: '-2°14′', + heading: -2.2333, + }, + { + lon: 115.911864, + lat: 30.403183, + height: 60.1, + type: '直线塔', + alt: 479.71, + }, + { + lon: 115.913812, + lat: 30.402335, + height: 45.1, + type: '直线塔', + alt: 474.25, + }, + { + lon: 115.918144, + lat: 30.40045, + height: 63.1, + type: '直线塔', + alt: 428.95, + }, + { + lon: 115.920923, + lat: 30.39924, + height: 48.1, + type: '直线塔', + alt: 431.67, + }, + { + lon: 115.925004, + lat: 30.397463, + height: 57.1, + type: '直线塔', + alt: 410.53, + }, + { + lon: 115.928455, + lat: 30.395961, + height: 48.1, + type: '直线塔', + alt: 404.58, + }, + { + lon: 115.932996, + lat: 30.393983, + height: 48.3, + type: '直线塔', + alt: 339.45, + }, + { + lon: 115.939062, + lat: 30.391342, + height: 48.3, + type: '直线塔', + alt: 241.84, + }, + { + lon: 115.943992, + lat: 30.389194, + height: 54.1, + type: '直线塔', + alt: 210.57, + }, + { + lon: 115.946526, + lat: 30.38809, + height: 57.1, + type: '直线塔', + alt: 203.05, + }, + { + lon: 115.950042, + lat: 30.386559, + height: 61.4, + type: '直转塔', + alt: 193.32, + headingStr: '-7°4′', + heading: -7.0667, + }, + { + lon: 115.953568, + lat: 30.385471, + height: 78.8, + type: '直线塔', + alt: 159.57, + }, + { + lon: 115.961443, + lat: 30.383047, + height: 54.1, + type: '直线塔', + alt: 235.64, + }, + { + lon: 115.963417, + lat: 30.382439, + height: 46.4, + type: '直转塔', + alt: 265.79, + headingStr: '8°20′', + heading: 8.3333, + }, + { + lon: 115.965152, + lat: 30.381639, + height: 63.3, + type: '直线塔', + alt: 216.62, + }, + { + lon: 115.969927, + lat: 30.379434, + height: 69.3, + type: '直线塔', + alt: 140.15, + }, + { + lon: 115.973529, + lat: 30.377781, + height: 54.1, + type: '直线塔', + alt: 137.4, + }, + { + lon: 115.975728, + lat: 30.37677, + height: 45.3, + type: '直线塔', + alt: 139.65, + headingStr: '-2°44′', + heading: -2.7333, + }, + { + lon: 115.977665, + lat: 30.375977, + height: 48.1, + type: '直线塔', + alt: 125.76, + }, + { + lon: 115.985957, + lat: 30.372585, + height: 46, + type: '耐张塔', + alt: 198.39, + headingStr: '21°3′', + heading: 21.05, + }, + { + lon: 115.988967, + lat: 30.369856, + height: 54.1, + type: '直线塔', + alt: 225.1, + }, + { + lon: 115.992255, + lat: 30.366877, + height: 58.4, + type: '直转塔', + alt: 264.19, + headingStr: '-4°39′', + heading: -4.65, + }, + { + lon: 115.996318, + lat: 30.363748, + height: 69.3, + type: '直线塔', + alt: 279.81, + }, + { + lon: 115.998774, + lat: 30.361854, + height: 66.3, + type: '直线塔', + alt: 274.27, + }, + { + lon: 116.001918, + lat: 30.359431, + height: 52, + type: '耐张塔', + alt: 177.8, + }, + { + lon: 116.010683, + lat: 30.352666, + height: 60.8, + type: '直线塔', + alt: 299.17, + }, + { + lon: 116.014775, + lat: 30.34951, + height: 66.3, + type: '直线塔', + alt: 316.43, + }, + { + lon: 116.017718, + lat: 30.347239, + height: 48.3, + type: '直线塔', + alt: 342.62, + }, + { + lon: 116.025414, + lat: 30.341302, + height: 63.8, + type: '直线塔', + alt: 237.7, + }, + { + lon: 116.030126, + lat: 30.337666, + height: 63.1, + type: '直线塔', + alt: 282.25, + }, + { + lon: 116.032402, + lat: 30.335909, + height: 54.3, + type: '直线塔', + alt: 273.21, + }, + { + lon: 116.038171, + lat: 30.331457, + height: 63.8, + type: '直线塔', + alt: 127, + }, + { + lon: 116.046226, + lat: 30.325239, + height: 54.8, + type: '直线塔', + alt: 159.08, + }, + { + lon: 116.050563, + lat: 30.321891, + height: 69.3, + type: '直线塔', + alt: 62.2, + }, + { + lon: 116.056221, + lat: 30.317522, + height: 69.3, + type: '直线塔', + alt: 60.84, + }, + { + lon: 116.05883, + lat: 30.315508, + height: 48.1, + type: '直线塔', + alt: 111.22, + }, + { + lon: 116.060778, + lat: 30.314004, + height: 52, + type: '耐张塔', + alt: 95.34, + headingStr: '-0°29′', + heading: 0.4833, + }, + { + lon: 116.064806, + lat: 30.310945, + height: 60.1, + type: '直线塔', + alt: 58.94, + }, + { + lon: 116.068182, + lat: 30.30838, + height: 54.1, + type: '直线塔', + alt: 57.99, + }, + { + lon: 116.071759, + lat: 30.305663, + height: 54.1, + type: '直线塔', + alt: 58.81, + }, + { + lon: 116.074106, + lat: 30.303879, + height: 51.1, + type: '直线塔', + alt: 62.84, + }, + { + lon: 116.077522, + lat: 30.301284, + height: 51.1, + type: '直线塔', + alt: 72.11, + }, + { + lon: 116.079528, + lat: 30.299759, + height: 51.1, + type: '直线塔', + alt: 64.66, + }, + { + lon: 116.083291, + lat: 30.2969, + height: 63.1, + type: '直线塔', + alt: 45.31, + }, + { + lon: 116.087237, + lat: 30.293901, + height: 51.1, + type: '直线塔', + alt: 29.76, + }, + { + lon: 116.090697, + lat: 30.291275, + height: 52, + type: '耐张塔', + alt: 30.82, + headingStr: '-37°51′', + heading: -37.85, + }, + { + lon: 116.094727, + lat: 30.29107, + height: 57.1, + type: '直线塔', + alt: 29.57, + }, + { + lon: 116.100003, + lat: 30.290801, + height: 60.1, + type: '直线塔', + alt: 31.58, + }, + { + lon: 116.105117, + lat: 30.29054, + height: 60.1, + type: '直线塔', + alt: 31.32, + }, + { + lon: 116.110117, + lat: 30.290285, + height: 57.1, + type: '直线塔', + alt: 30.08, + }, + { + lon: 116.114316, + lat: 30.29007, + height: 54.1, + type: '直线塔', + alt: 28.04, + }, + { + lon: 116.119416, + lat: 30.289809, + height: 63.1, + type: '直线塔', + alt: 29.16, + }, + { + lon: 116.124413, + lat: 30.289554, + height: 57.1, + type: '直线塔', + alt: 30.25, + }, + { + lon: 116.129676, + lat: 30.289284, + height: 63.1, + type: '直线塔', + alt: 38.32, + }, + { + lon: 116.132977, + lat: 30.289116, + height: 46, + type: '耐张塔', + alt: 56.06, + headingStr: '-0°4′', + heading: 0.0667, + }, + { + lon: 116.136038, + lat: 30.288964, + height: 69.3, + type: '直线塔', + alt: 41.79, + }, + { + lon: 116.140892, + lat: 30.288723, + height: 69.3, + type: '直线塔', + alt: 36.96, + }, + { + lon: 116.144967, + lat: 30.288521, + height: 52, + type: '耐张塔', + alt: 38.03, + }, + { + lon: 116.14706692, + lat: 30.28856676, + height: 54.3, + type: '直线塔', + alt: 43.45, + }, + { + lon: 116.149515, + lat: 30.28829, + height: 57.1, + type: '直线塔', + alt: 44.95, + }, + { + lon: 116.153009, + lat: 30.288114, + height: 63.1, + type: '直线塔', + alt: 50.81, + }, + { + lon: 116.15657, + lat: 30.287934, + height: 54.1, + type: '直线塔', + alt: 59.59, + }, + { + lon: 116.161033, + lat: 30.287708, + height: 57.1, + type: '直线塔', + alt: 52.17, + }, + { + lon: 116.165324, + lat: 30.287491, + height: 57.1, + type: '直线塔', + alt: 55.01, + }, + { + lon: 116.168419, + lat: 30.287334, + height: 54.1, + type: '直线塔', + alt: 55.31, + }, + { + lon: 116.171521, + lat: 30.287177, + height: 57.1, + type: '直线塔', + alt: 53.5, + }, + { + lon: 116.174638, + lat: 30.287019, + height: 63.1, + type: '直线塔', + alt: 56.17, + }, + { + lon: 116.17847, + lat: 30.286842, + height: 60.3, + type: '直线塔', + alt: 52.32, + headingStr: '-0°25′', + heading: 0.4167, + }, + { + lon: 116.183668, + lat: 30.286608, + height: 63.1, + type: '直线塔', + alt: 42.9, + }, + { + lon: 116.18849, + lat: 30.28639, + height: 57.1, + type: '直线塔', + alt: 48.92, + }, + { + lon: 116.19287, + lat: 30.28619, + height: 55, + type: '耐张塔', + alt: 50.95, + }, + { + lon: 116.196204, + lat: 30.286044, + height: 63.1, + type: '直线塔', + alt: 54.94, + }, + { + lon: 116.201039, + lat: 30.28583, + height: 55, + type: '耐张塔', + alt: 48.95, + }, + { + lon: 116.205488, + lat: 30.285631, + height: 57.1, + type: '直线塔', + alt: 44.62, + }, + { + lon: 116.209927, + lat: 30.285434, + height: 63.1, + type: '直线塔', + alt: 29.13, + }, + { + lon: 116.21398, + lat: 30.285255, + height: 54.1, + type: '直线塔', + alt: 26.41, + }, + { + lon: 116.218819, + lat: 30.28504, + height: 54.1, + type: '直线塔', + alt: 21.99, + }, + { + lon: 116.223138, + lat: 30.284848, + height: 54.1, + type: '直线塔', + alt: 18.35, + }, + { + lon: 116.227654, + lat: 30.284647, + height: 57.1, + type: '直线塔', + alt: 41.54, + }, + { + lon: 116.231353, + lat: 30.284482, + height: 57.1, + type: '直线塔', + alt: 37.55, + }, + { + lon: 116.234367, + lat: 30.284348, + height: 57.3, + type: '直线塔', + alt: 32.58, + headingStr: '2°0′', + heading: 2, + }, + { + lon: 116.238777, + lat: 30.284018, + height: 63.1, + type: '直线塔', + alt: 26.34, + }, + { + lon: 116.243447, + lat: 30.283668, + height: 57.1, + type: '直线塔', + alt: 26.3, + }, + { + lon: 116.247362, + lat: 30.283375, + height: 63.1, + type: '直线塔', + alt: 33.87, + }, + { + lon: 116.250398, + lat: 30.283147, + height: 49, + type: '耐张塔', + alt: 41, + headingStr: '0°37′11"', + heading: 0.6197, + }, + { + lon: 116.254092, + lat: 30.28287, + height: 75.3, + type: '直线塔', + alt: 30.02, + }, + { + lon: 116.257569, + lat: 30.282606, + height: 58, + type: '耐张塔', + alt: 20.66, + headingStr: '-13°41′43"', + heading: -13.6953, + }, + { + lon: 116.26096, + lat: 30.283091, + height: 48.1, + type: '直线塔', + alt: 29.04, + }, + { + lon: 116.263755, + lat: 30.28349, + height: 45.1, + type: '直线塔', + alt: 27.67, + }, + { + lon: 116.267784, + lat: 30.284066, + height: 48.1, + type: '直线塔', + alt: 24.68, + }, + { + lon: 116.271405, + lat: 30.284584, + height: 55.4, + type: '直转塔', + alt: 41.54, + headingStr: '-4°45′', + heading: -4.75, + }, + { + lon: 116.275755, + lat: 30.285533, + height: 57.1, + type: '直线塔', + alt: 25.35, + }, + { + lon: 116.28006, + lat: 30.286472, + height: 57.1, + type: '直线塔', + alt: 25.61, + }, + { + lon: 116.284437, + lat: 30.287427, + height: 54.1, + type: '直线塔', + alt: 15.94, + }, + { + lon: 116.288873, + lat: 30.288394, + height: 54.1, + type: '直线塔', + alt: 13.11, + }, + { + lon: 116.292658, + lat: 30.28922, + height: 57.1, + type: '直线塔', + alt: 30.31, + }, + { + lon: 116.297315, + lat: 30.290235, + height: 54.1, + type: '直线塔', + alt: 23.12, + }, + { + lon: 116.301241, + lat: 30.29109, + height: 48.1, + type: '直线塔', + alt: 36.99, + }, + { + lon: 116.304779, + lat: 30.291861, + height: 51.1, + type: '直线塔', + alt: 32.19, + }, + { + lon: 116.309418, + lat: 30.292872, + height: 58.4, + type: '直转塔', + alt: 26.9, + headingStr: '4°10′', + heading: 4.1667, + }, + { + lon: 116.314255, + lat: 30.293608, + height: 54.1, + type: '直线塔', + alt: 24.72, + }, + { + lon: 116.317336, + lat: 30.294075, + height: 55, + type: '耐张塔', + alt: 25.41, + headingStr: '1°56′', + heading: 1.9333, + }, + { + lon: 116.321516, + lat: 30.294584, + height: 51.1, + type: '直线塔', + alt: 19.43, + }, + { + lon: 116.325463, + lat: 30.295065, + height: 51.1, + type: '直线塔', + alt: 16.62, + }, + { + lon: 116.330066, + lat: 30.295626, + height: 57.1, + type: '直线塔', + alt: 21.32, + }, + { + lon: 116.334523, + lat: 30.296169, + height: 60.1, + type: '直线塔', + alt: 25.04, + }, + { + lon: 116.33903, + lat: 30.296717, + height: 60.1, + type: '直线塔', + alt: 28.5, + }, + { + lon: 116.343053, + lat: 30.297207, + height: 54.3, + type: '直线塔', + alt: 32.76, + headingStr: '-1°42′', + heading: -1.7, + }, + { + lon: 116.347243, + lat: 30.297826, + height: 57.1, + type: '直线塔', + alt: 27.04, + }, + { + lon: 116.351799, + lat: 30.298499, + height: 54.1, + type: '直线塔', + alt: 28.26, + }, + { + lon: 116.356964, + lat: 30.299263, + height: 60.1, + type: '直线塔', + alt: 27.05, + }, + { + lon: 116.361918, + lat: 30.299995, + height: 60.1, + type: '直线塔', + alt: 26.78, + }, + { + lon: 116.366584, + lat: 30.300684, + height: 69.3, + type: '直线塔', + alt: 32.43, + }, + { + lon: 116.370077, + lat: 30.3012, + height: 57.1, + type: '直线塔', + alt: 32.95, + }, + { + lon: 116.374683, + lat: 30.30188, + height: 60.1, + type: '直线塔', + alt: 29.33, + }, + { + lon: 116.377665, + lat: 30.302321, + height: 57.1, + type: '直线塔', + alt: 28.18, + }, + { + lon: 116.382747, + lat: 30.303071, + height: 60.3, + type: '直线塔', + alt: 30.75, + }, + { + lon: 116.388458, + lat: 30.303914, + height: 63.3, + type: '直线塔', + alt: 28.65, + }, + { + lon: 116.394208, + lat: 30.304762, + height: 63.3, + type: '直线塔', + alt: 28.03, + }, + { + lon: 116.399703, + lat: 30.305572, + height: 60.1, + type: '直线塔', + alt: 27.1, + }, + { + lon: 116.403941, + lat: 30.306197, + height: 57.1, + type: '直线塔', + alt: 22.66, + }, + { + lon: 116.408435, + lat: 30.30686, + height: 63.1, + type: '直线塔', + alt: 22.58, + }, + { + lon: 116.412909, + lat: 30.307519, + height: 52, + type: '耐张塔', + alt: 19.32, + headingStr: '4°58′', + heading: 4.9667, + }, + { + lon: 116.418137, + lat: 30.30789, + height: 63.1, + type: '直线塔', + alt: 30.86, + }, + { + lon: 116.423433, + lat: 30.308265, + height: 60.1, + type: '直线塔', + alt: 25.74, + }, + { + lon: 116.427595, + lat: 30.308559, + height: 48.1, + type: '直线塔', + alt: 30.94, + }, + { + lon: 116.431187, + lat: 30.308813, + height: 52, + type: '耐张塔', + alt: 31.45, + headingStr: '-9°34′', + heading: -9.5667, + }, + { + lon: 116.435683, + lat: 30.309805, + height: 69.3, + type: '直线塔', + alt: 32.58, + }, + { + lon: 116.439571, + lat: 30.310653, + height: 57.1, + type: '直线塔', + alt: 34.38, + }, + { + lon: 116.44446, + lat: 30.311719, + height: 54.3, + type: '直线塔', + alt: 38.14, + headingStr: '0°20′', + heading: 0.3333, + }, + { + lon: 116.449317, + lat: 30.312777, + height: 60.1, + type: '直线塔', + alt: 31.63, + }, + { + lon: 116.454223, + lat: 30.313831, + height: 57.1, + type: '直线塔', + alt: 30.54, + }, + { + lon: 116.459388, + lat: 30.31494, + height: 54.1, + type: '直线塔', + alt: 37.8, + }, + { + lon: 116.465127, + lat: 30.316173, + height: 66.3, + type: '直线塔', + alt: 38.93, + }, + { + lon: 116.47141, + lat: 30.317522, + height: 69.3, + type: '直线塔', + alt: 31.03, + }, + { + lon: 116.476797, + lat: 30.318678, + height: 54.1, + type: '直线塔', + alt: 31.1, + }, + { + lon: 116.480744, + lat: 30.319525, + height: 54.3, + type: '直线塔', + alt: 50.91, + }, + { + lon: 116.486309, + lat: 30.320908, + height: 69.8, + type: '直线塔', + alt: 50.16, + }, + { + lon: 116.493763, + lat: 30.322758, + height: 69.3, + type: '直线塔', + alt: 34.67, + }, + { + lon: 116.497393, + lat: 30.323659, + height: 60.1, + type: '直线塔', + alt: 37.63, + }, + { + lon: 116.499945, + lat: 30.324292, + height: 51.1, + type: '直线塔', + alt: 36.23, + }, + { + lon: 116.506902, + lat: 30.326018, + height: 51.3, + type: '直线塔', + alt: 56.25, + }, + { + lon: 116.510451, + lat: 30.326897, + height: 46, + type: '耐张塔', + alt: 26.56, + headingStr: '23°4′', + heading: 23.0667, + }, + { + lon: 116.515104, + lat: 30.326394, + height: 60.1, + type: '直线塔', + alt: 31.47, + }, + { + lon: 116.518916, + lat: 30.325981, + height: 57.1, + type: '直线塔', + alt: 22.73, + }, + { + lon: 116.523526, + lat: 30.325481, + height: 54.1, + type: '直线塔', + alt: 27.66, + }, + { + lon: 116.52634, + lat: 30.32518, + height: 46, + type: '耐张塔', + alt: 14.1, + headingStr: '38°5′', + heading: 38.0833, + }, + { + lon: 116.530026, + lat: 30.321952, + height: 69.3, + type: '直线塔', + alt: 12.52, + }, + { + lon: 116.533881, + lat: 30.318577, + height: 55, + type: '耐张塔', + alt: 11.42, + headingStr: '-19°34′', + heading: -19.5667, + }, + { + lon: 116.537816, + lat: 30.316941, + height: 54.1, + type: '直线塔', + alt: 13.69, + }, + { + lon: 116.541609, + lat: 30.315362, + height: 54.1, + type: '直线塔', + alt: 10.19, + }, + { + lon: 116.545718, + lat: 30.313651, + height: 57.1, + type: '直线塔', + alt: 12.35, + }, + { + lon: 116.549391, + lat: 30.312122, + height: 54.1, + type: '直线塔', + alt: 7.72, + }, + { + lon: 116.553336, + lat: 30.31048, + height: 49, + type: '耐张塔', + alt: 8.54, + headingStr: '-38°41′', + heading: -38.6833, + }, + { + lon: 116.558652, + lat: 30.311546, + height: 66.3, + type: '直线塔', + alt: 12.78, + }, + { + lon: 116.563365, + lat: 30.31249, + height: 55, + type: '耐张塔', + alt: 7.79, + headingStr: '0°0′', + heading: 0, + }, + { + lon: 116.566911, + lat: 30.313205, + height: 69.1, + type: '直线塔', + alt: 5.45, + }, + { + lon: 116.571668, + lat: 30.314164, + height: 55, + type: '耐张塔', + alt: 4.12, + headingStr: '0°0′', + heading: 0, + }, + { + lon: 116.576313, + lat: 30.315092, + height: 66.1, + type: '直线塔', + alt: 7.79, + }, + { + lon: 116.58084, + lat: 30.316, + height: 54.1, + type: '直线塔', + alt: 4.71, + }, + { + lon: 116.584852, + lat: 30.316804, + height: 51.1, + type: '直线塔', + alt: 4.49, + }, + { + lon: 116.589153, + lat: 30.317667, + height: 52, + type: '耐张塔', + alt: 13.25, + headingStr: ' 2°21′', + heading: 2.35, + }, + { + lon: 116.593944, + lat: 30.31845, + height: 63.1, + type: '直线塔', + alt: 12.69, + }, + { + lon: 116.597918, + lat: 30.319099, + height: 66.1, + type: '直线塔', + alt: 4.7, + }, + { + lon: 116.602354, + lat: 30.319825, + height: 55, + type: '耐张塔', + alt: 4.85, + headingStr: ' 0°0′', + heading: 0, + }, + { + lon: 116.606353, + lat: 30.320477, + height: 63.1, + type: '直线塔', + alt: 6.12, + }, + { + lon: 116.610152, + lat: 30.321096, + height: 49, + type: '耐张塔', + alt: 12.04, + headingStr: ' 13°19′', + heading: 13.3167, + }, + { + lon: 116.615712, + lat: 30.32087, + height: 69.3, + type: '直线塔', + alt: 25.75, + }, + { + lon: 116.62173, + lat: 30.320625, + height: 63.3, + type: '直线塔', + alt: 11.62, + }, + { + lon: 116.626729, + lat: 30.320421, + height: 57.1, + type: '直线塔', + alt: 16.24, + }, + { + lon: 116.631023, + lat: 30.320289, + height: 46, + type: '耐张塔', + alt: 20.69, + headingStr: ' 27°37′', + heading: 27.6167, + }, + { + lon: 116.634552, + lat: 30.318449, + height: 54.1, + type: '直线塔', + alt: 16.31, + }, + { + lon: 116.638016, + lat: 30.316691, + height: 54.1, + type: '直线塔', + alt: 14.33, + }, + { + lon: 116.642585, + lat: 30.314372, + height: 57.1, + type: '直线塔', + alt: 4.12, + }, + { + lon: 116.647227, + lat: 30.312015, + height: 60.1, + type: '直线塔', + alt: 4.14, + }, + { + lon: 116.650102, + lat: 30.310556, + height: 57.1, + type: '直线塔', + alt: 17.53, + }, + { + lon: 116.653481, + lat: 30.30884, + height: 57.1, + type: '直线塔', + alt: 12.24, + }, + { + lon: 116.656954, + lat: 30.307076, + height: 45.1, + type: '直线塔', + alt: 18.66, + }, + { + lon: 116.659633, + lat: 30.305712, + height: 46, + type: '耐张塔', + alt: 16.56, + headingStr: '-20°0′', + heading: -20, + }, + { + lon: 116.663028, + lat: 30.305176, + height: 63.1, + type: '直线塔', + alt: 4.41, + }, + { + lon: 116.669189, + lat: 30.304202, + height: 66.3, + type: '直线塔', + alt: 14.18, + }, + { + lon: 116.673579, + lat: 30.303508, + height: 55, + type: '耐张塔', + alt: 22.33, + headingStr: '31°25′', + heading: 31.4167, + }, + { + lon: 116.677117, + lat: 30.300768, + height: 60.1, + type: '直线塔', + alt: 13.47, + }, + { + lon: 116.679824, + lat: 30.29867, + height: 55, + type: '耐张塔', + alt: 10.76, + headingStr: '-23°23′', + heading: -23.3833, + }, + { + lon: 116.682697, + lat: 30.297841, + height: 63.1, + type: '直线塔', + alt: 17.4, + }, + { + lon: 116.686795, + lat: 30.296659, + height: 63.1, + type: '直线塔', + alt: 19.83, + }, + { + lon: 116.69, + lat: 30.295734, + height: 61.72, + type: '直转塔', + alt: 14.34, + headingStr: '7°49′', + heading: 7.8167, + }, + { + lon: 116.693027, + lat: 30.294439, + height: 63.1, + type: '直线塔', + alt: 6.81, + }, + { + lon: 116.695858, + lat: 30.293228, + height: 57.3, + type: '直线塔', + alt: 4.36, + }, + { + lon: 116.700764, + lat: 30.29113, + height: 84.8, + type: '直线塔', + alt: 9.72, + }, + { + lon: 116.706875, + lat: 30.288515, + height: 57.1, + type: '直线塔', + alt: 22.58, + }, + { + lon: 116.710944, + lat: 30.286774, + height: 51.1, + type: '直线塔', + alt: 18.05, + }, + { + lon: 116.71376, + lat: 30.285569, + height: 46, + type: '耐张塔', + alt: 12.15, + headingStr: '-39°37′', + heading: -39.6167, + }, + { + lon: 116.717975, + lat: 30.286438, + height: 63.1, + type: '直线塔', + alt: 9.93, + }, + { + lon: 116.7214, + lat: 30.287146, + height: 57.1, + type: '直线塔', + alt: 3.47, + }, + { + lon: 116.724224, + lat: 30.287729, + height: 51.1, + type: '直线塔', + alt: 3.49, + }, + { + lon: 116.727241, + lat: 30.288352, + height: 48.1, + type: '直线塔', + alt: 3.61, + }, + { + lon: 116.731768, + lat: 30.289286, + height: 60.1, + type: '直线塔', + alt: 12.75, + }, + { + lon: 116.735313, + lat: 30.290018, + height: 66.3, + type: '直线塔', + alt: 12.17, + }, + { + lon: 116.739889, + lat: 30.290964, + height: 46, + type: '耐张塔', + alt: 24.05, + headingStr: '-59°47′', + heading: -59.7833, + }, + { + lon: 116.740759, + lat: 30.293456, + height: 63.1, + type: '直线塔', + alt: 15.77, + }, + { + lon: 116.742334, + lat: 30.297967, + height: 69.3, + type: '直线塔', + alt: 23.78, + }, + { + lon: 116.743717, + lat: 30.301924, + height: 52, + type: '耐张塔', + alt: 29.6, + headingStr: '25°3′', + heading: 25.05, + }, + { + lon: 116.746702, + lat: 30.304811, + height: 63.1, + type: '直线塔', + alt: 29.54, + }, + { + lon: 116.750438, + lat: 30.308424, + height: 60.3, + type: '直线塔', + alt: 18.32, + }, + { + lon: 116.753871, + lat: 30.311745, + height: 55, + type: '耐张塔', + alt: 18.93, + headingStr: '28°53′', + heading: 28.8833, + }, + { + lon: 116.75861, + lat: 30.313178, + height: 69.3, + type: '直线塔', + alt: 12.15, + }, + { + lon: 116.763287, + lat: 30.314591, + height: 57.1, + type: '直线塔', + alt: 13.04, + }, + { + lon: 116.768523, + lat: 30.316173, + height: 63.3, + type: '直线塔', + alt: 6.64, + }, + { + lon: 116.774409, + lat: 30.317951, + height: 69.3, + type: '直线塔', + alt: 14.17, + }, + { + lon: 116.779713, + lat: 30.319552, + height: 66.3, + type: '直线塔', + alt: 10.32, + }, + { + lon: 116.784366, + lat: 30.320957, + height: 57.1, + type: '直线塔', + alt: 13.85, + }, + { + lon: 116.788543, + lat: 30.322217, + height: 52, + type: '耐张塔', + alt: 17.49, + headingStr: '-15°51′', + heading: -15.85, + }, + { + lon: 116.792349, + lat: 30.324533, + height: 57.1, + type: '直线塔', + alt: 19.95, + }, + { + lon: 116.795233, + lat: 30.326288, + height: 46, + type: '耐张塔', + alt: 29.97, + headingStr: '-17°37′', + heading: -17.6167, + }, + { + lon: 116.79836, + lat: 30.329845, + height: 66.3, + type: '直线塔', + alt: 10.99, + }, + { + lon: 116.801301, + lat: 30.333196, + height: 52, + type: '耐张塔', + alt: 8.23, + angle: -20, + headingStr: '62°26′', + heading: 62.4333, + }, + { + lon: 116.80575, + lat: 30.33253, + height: 57.1, + type: '直线塔', + alt: 9.2, + }, + { + lon: 116.811092, + lat: 30.331731, + height: 63.1, + type: '直线塔', + alt: 7.76, + }, + { + lon: 116.81606, + lat: 30.330987, + height: 60.1, + type: '直线塔', + alt: 10, + }, + { + lon: 116.821136, + lat: 30.330227, + height: 60.1, + type: '直线塔', + alt: 7.36, + }, + { + lon: 116.826402, + lat: 30.329438, + height: 60.1, + type: '直线塔', + alt: 4.91, + }, + { + lon: 116.831438, + lat: 30.328683, + height: 54.1, + type: '直线塔', + alt: 5.01, + }, + { + lon: 116.836329, + lat: 30.32795, + height: 60.1, + type: '直线塔', + alt: 6.11, + }, + { + lon: 116.841564, + lat: 30.327165, + height: 54.1, + type: '直线塔', + alt: 7.33, + }, + { + lon: 116.846501, + lat: 30.326425, + height: 60.1, + type: '直线塔', + alt: 5.76, + }, + { + lon: 116.851719, + lat: 30.325642, + height: 57.1, + type: '直线塔', + alt: 9.24, + }, + { + lon: 116.856932, + lat: 30.32486, + height: 60.1, + type: '直线塔', + alt: 5.5, + }, + { + lon: 116.861998, + lat: 30.3241, + height: 54.1, + type: '直线塔', + alt: 7.14, + }, + { + lon: 116.867017, + lat: 30.323346, + height: 60.1, + type: '直线塔', + alt: 4.16, + }, + { + lon: 116.872034, + lat: 30.322593, + height: 54.1, + type: '直线塔', + alt: 7.04, + }, + { + lon: 116.876935, + lat: 30.321857, + height: 60.1, + type: '直线塔', + alt: 9.13, + }, + { + lon: 116.882049, + lat: 30.321089, + height: 60.1, + type: '直线塔', + alt: 7.44, + }, + { + lon: 116.88679, + lat: 30.320376, + height: 51.1, + type: '直线塔', + alt: 12.55, + }, + { + lon: 116.890625, + lat: 30.3198, + height: 54.1, + type: '直线塔', + alt: 11.65, + }, + { + lon: 116.895219, + lat: 30.319109, + height: 52, + type: '耐张塔', + alt: 10.14, + headingStr: '-4°16′', + heading: -4.2667, + }, + { + lon: 116.903052, + lat: 30.318583, + height: 37, + type: '耐张塔', + angle: 45, + alt: 18.06, + headingStr: '-4°16′18″', + heading: -4.2667, + }, + { + lon: 116.903018, + lat: 30.316138, + height: 37, + type: '耐张塔', + alt: 15.14, + }, + ], +} diff --git a/src/views/showComponents/showMap/demo.js b/src/views/showComponents/showMap/demo.js new file mode 100644 index 0000000..0bf4fe0 --- /dev/null +++ b/src/views/showComponents/showMap/demo.js @@ -0,0 +1,1735 @@ +let map = null // 地图实例 +let graphicLayer = null // 图形图层 +let graphicLayerList = [] // 图形图层列表 +let treeData = [] // 组织机构树数据 +let nodeId = '' // 当前选中的节点ID +let cablewayList = [] // 索道列表 +let towerList = [] // 塔列表 +let crossingList = [] // 跨越列表 +let crossingListNew = [] // 跨越列表 +let crossingLineListNew = [] // 跨越线列表 +let highwayList = [] // 公路列表 +let aThousandFieldsList = [] // 牵张场地 +let intLng = 116.254 // 初始经度 +let intLat = 39.965 // 初始纬度 +let isMap = true // 是否是地图模式 +let projectOverview = '' // 工程概况 +let projectTitle = '' // 项目名称 +let centerTitle = '' // 中间标题 +let polylines1 = [] +let polylines2 = [] +let polylines3 = [] + +// 转换函数 +function dmsToDecimal(dmsString) { + // 替换所有可能的符号变体 + const cleaned = dmsString + .replace(/[°′″]/g, ' ') // 替换° ′ ″为空格 + .replace(/'/g, ' ') // 替换单引号 + .replace(/"/g, ' ') // 替换双引号 + .replace(/\s+/g, ' ') // 合并多个空格 + .trim() + + const parts = cleaned.split(' ') + + const degrees = parseFloat(parts[0]) + const minutes = parseFloat(parts[1] || 0) + const seconds = parseFloat(parts[2] || 0) + + return degrees + minutes / 60 + seconds / 3600 +} + +/** + * 根据经纬度获取海拔高度 + * @param {number} lng - 经度 + * @param {number} lat - 纬度 + * @returns {Promise} 返回海拔高度(米),如果获取失败则返回0 + */ +async function getAltitude(lng, lat) { + try { + // 确保 map 实例已初始化 + if (!map || !map.scene) { + console.warn('地图未初始化,无法获取海拔高度') + return 0 + } + + const Cesium = window.mars3d.Cesium + + // 将经纬度转换为 Cartographic 对象(弧度) + const cartographic = Cesium.Cartographic.fromDegrees(lng, lat) + + // 方法1: 使用 sampleTerrainMostDetailed 获取精确的地形高度(推荐) + const terrainProvider = map.scene.terrainProvider + if (terrainProvider) { + try { + // 检查地形提供者是否支持采样 + if (terrainProvider.availability || terrainProvider.ready) { + const positions = [cartographic] + const updatedPositions = await Cesium.sampleTerrainMostDetailed( + terrainProvider, + positions, + ) + if ( + updatedPositions && + updatedPositions.length > 0 && + updatedPositions[0].height !== undefined && + updatedPositions[0].height !== null + ) { + return updatedPositions[0].height + } + } + } catch (error) { + console.warn('使用 sampleTerrainMostDetailed 获取海拔失败:', error) + } + } + + // 方法2: 使用 sampleTerrain 作为备选方案(精度较低但更兼容) + if (terrainProvider && Cesium.sampleTerrain) { + try { + const level = 11 // 地形级别,可以根据需要调整 + const positions = [cartographic] + const updatedPositions = await Cesium.sampleTerrain( + terrainProvider, + level, + positions, + ) + if ( + updatedPositions && + updatedPositions.length > 0 && + updatedPositions[0].height !== undefined && + updatedPositions[0].height !== null + ) { + return updatedPositions[0].height + } + } catch (error) { + console.warn('使用 sampleTerrain 获取海拔失败:', error) + } + } + + // 方法3: 如果以上方法都失败,返回0作为默认值 + console.warn(`无法获取坐标(${lng}, ${lat})的海拔高度,返回默认值0`) + return 0 + } catch (error) { + console.error('获取海拔高度时发生错误:', error) + return 0 + } +} + +/** + * 方案1: 使用第三方 OpenElevation API 获取海拔(推荐,不依赖地形服务) + * @param {number} lng - 经度 + * @param {number} lat - 纬度 + * @returns {Promise} 返回海拔高度(米) + */ +async function getElevationByAPI(lng, lat) { + try { + // 使用 OpenElevation API(免费,无需API密钥) + const response = await fetch( + `https://api.open-elevation.com/api/v1/lookup?locations=${lat},${lng}`, + ) + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`) + } + const data = await response.json() + if (data.results && data.results.length > 0) { + const elevation = data.results[0].elevation + console.log(`API获取海拔成功: ${elevation}米 (${lng}, ${lat})`) + return elevation + } + return 0 + } catch (error) { + console.warn('OpenElevation API 获取海拔失败:', error) + // 尝试备用API + return await getElevationByBackupAPI(lng, lat) + } +} + +/** + * 备用API方案: 使用其他高程API服务 + * @param {number} lng - 经度 + * @param {number} lat - 纬度 + * @returns {Promise} 返回海拔高度(米) + */ +async function getElevationByBackupAPI(lng, lat) { + try { + // 备用方案1: 使用 elevation-api.io(需要注册但免费额度较大) + // const response = await fetch( + // `https://api.elevation-api.io/api/v1/lookup?locations=${lat},${lng}` + // ); + + // 备用方案2: 使用 Google Elevation API(需要API密钥) + // const response = await fetch( + // `https://maps.googleapis.com/maps/api/elevation/json?locations=${lat},${lng}&key=YOUR_API_KEY` + // ); + + // 备用方案3: 使用 MapBox Elevation API(需要API密钥) + // const response = await fetch( + // `https://api.mapbox.com/v4/mapbox.terrain-rgb/${lng},${lat}.json?access_token=YOUR_ACCESS_TOKEN` + // ); + + // 如果以上API都不可用,返回0 + return 0 + } catch (error) { + console.warn('备用API获取海拔失败:', error) + return 0 + } +} + +/** + * 方案2: 使用 mars3d/Cesium 的地形采样(需要地形服务已加载) + * @param {number} lng - 经度 + * @param {number} lat - 纬度 + * @returns {Promise} 返回海拔高度(米) + */ +async function getElevationByTerrain(lng, lat) { + try { + if (!map || !map.scene) { + console.warn('地图未初始化') + return 0 + } + + const Cesium = window.mars3d.Cesium + const cartographic = Cesium.Cartographic.fromDegrees(lng, lat) + const terrainProvider = map.scene.terrainProvider + + if (!terrainProvider) { + console.warn('地形提供者未加载') + return 0 + } + + // 等待地形提供者准备就绪 + if (terrainProvider.readyPromise) { + await terrainProvider.readyPromise + } + + // 使用 sampleTerrainMostDetailed + const positions = [cartographic] + const updatedPositions = await Cesium.sampleTerrainMostDetailed(terrainProvider, positions) + + if ( + updatedPositions && + updatedPositions.length > 0 && + updatedPositions[0].height !== undefined && + updatedPositions[0].height !== null + ) { + const elevation = updatedPositions[0].height + console.log(`地形采样获取海拔成功: ${elevation}米 (${lng}, ${lat})`) + return elevation + } + + return 0 + } catch (error) { + console.warn('地形采样获取海拔失败:', error) + return 0 + } +} + +/** + * 方案3: 使用 Cesium 的 pickPosition 方法(需要场景已渲染) + * @param {number} lng - 经度 + * @param {number} lat - 纬度 + * @returns {Promise} 返回海拔高度(米) + */ +async function getElevationByPickPosition(lng, lat) { + try { + if (!map || !map.scene) { + console.warn('地图未初始化') + return 0 + } + + const Cesium = window.mars3d.Cesium + const cartesian = Cesium.Cartesian3.fromDegrees(lng, lat, 10000) + const cartographic = Cesium.Cartographic.fromCartesian(cartesian) + + // 使用 pickPosition 获取地形高度 + const pickedPosition = map.scene.pickPosition(cartesian) + if (pickedPosition) { + const pickedCartographic = Cesium.Cartographic.fromCartesian(pickedPosition) + const elevation = pickedCartographic.height + console.log(`pickPosition获取海拔成功: ${elevation}米 (${lng}, ${lat})`) + return elevation + } + + return 0 + } catch (error) { + console.warn('pickPosition获取海拔失败:', error) + return 0 + } +} + +/** + * 方案4: 使用 mars3d 的工具方法(如果可用) + * @param {number} lng - 经度 + * @param {number} lat - 纬度 + * @returns {Promise} 返回海拔高度(米) + */ +async function getElevationByMars3dUtil(lng, lat) { + try { + if (!map || !map.scene) { + console.warn('地图未初始化') + return 0 + } + + const mars3d = window.mars3d + const Cesium = window.mars3d.Cesium + + // 尝试使用 mars3d 的工具方法 + if (mars3d.PointUtil && mars3d.PointUtil.getTerrainHeight) { + const height = await mars3d.PointUtil.getTerrainHeight(map.scene, lng, lat) + if (height !== undefined && height !== null) { + console.log(`mars3d工具获取海拔成功: ${height}米 (${lng}, ${lat})`) + return height + } + } + + return 0 + } catch (error) { + console.warn('mars3d工具获取海拔失败:', error) + return 0 + } +} + +/** + * 综合方案: 按优先级尝试多种方法获取海拔 + * @param {number} lng - 经度 + * @param {number} lat - 纬度 + * @returns {Promise} 返回海拔高度(米) + */ +async function getElevationByLngLat(lng, lat) { + // 方案1: 优先使用第三方 API(最可靠,不依赖地形服务) + let elevation = await getElevationByAPI(lng, lat) + if (elevation > 0) { + return elevation + } + + // 方案2: 尝试使用 mars3d 工具方法 + elevation = await getElevationByMars3dUtil(lng, lat) + if (elevation > 0) { + return elevation + } + + // 方案3: 尝试使用地形采样 + elevation = await getElevationByTerrain(lng, lat) + if (elevation > 0) { + return elevation + } + + // 方案4: 尝试使用 pickPosition + elevation = await getElevationByPickPosition(lng, lat) + if (elevation > 0) { + return elevation + } + + // 所有方法都失败,返回0 + console.warn(`所有方法都无法获取坐标(${lng}, ${lat})的海拔高度,返回默认值0`) + return 0 +} + +const mapConfig = { + scene: { + center: { + lat: 31.686288, + lng: 117.229619, + // alt: 11333.9, + // heading: 359.2, + // pitch: -39.5, + alt: 12000, // 高度≈缩放级别 + heading: 30, // 旋转30度 + pitch: -45, // 俯视角45度 + }, + + highDynamicRange: false, // 关闭HDR(可减少模糊) + + scene3DOnly: false, + shadows: false, + removeDblClick: true, + sceneMode: 3, + showSun: true, + showMoon: true, + showSkyBox: true, + showSkyAtmosphere: true, + fog: true, + fxaa: false, + requestRenderMode: false, + globe: { + depthTestAgainstTerrain: false, + baseColor: '#546a53', + showGroundAtmosphere: true, + enableLighting: false, + }, + cameraController: { + zoomFactor: 3.0, + minimumZoomDistance: 1, + maximumZoomDistance: 50000000, + enableRotate: true, + enableTranslate: true, + enableTilt: true, + enableZoom: true, + enableCollisionDetection: true, + minimumCollisionTerrainHeight: 15000, + }, + }, + control: { + homeButton: true, + baseLayerPicker: true, + sceneModePicker: true, + vrButton: false, + fullscreenButton: true, + navigationHelpButton: true, + animation: false, + timeline: false, + infoBox: false, + geocoder: false, + selectionIndicator: false, + contextmenu: { hasDefault: false }, + mouseDownView: true, + zoom: { insertIndex: 1 }, + compass: { bottom: 'toolbar', left: '5px' }, + distanceLegend: { left: '10px', bottom: '2px' }, + locationBar: { + fps: true, + crs: 'CGCS2000_GK_Zone_3', + crsDecimal: 0, + template: + "
经度:{lng}
纬度:{lat}
横{crsx} 纵{crsy}
海拔:{alt}米
层级:{level}
方向:{heading}°
俯仰角:{pitch}°
视高:{cameraHeight}米
", + }, + }, + templateValues: { + dataServer: '//data.mars3d.cn', + gltfServerUrl: '//data.mars3d.cn/gltf', + }, + terrain: { + url: '//data.mars3d.cn/terrain', + show: true, + }, + basemaps: [ + { id: 10, name: '地图底图', type: 'group' }, + { + id: 2021, + pid: 10, + name: '天地图影像', + icon: '../../img/mars-map-img/tdt_img.png', + type: 'group', + layers: [ + { name: '底图', type: 'tdt', layer: 'img_d' }, + { name: '注记', type: 'tdt', layer: 'img_z' }, + ], + show: true, + }, + { + pid: 10, + name: '天地图电子', + icon: '../../img/mars-map-img/tdt_vec.png', + type: 'group', + layers: [ + { name: '底图', type: 'tdt', layer: 'vec_d' }, + { name: '注记', type: 'tdt', layer: 'vec_z' }, + ], + }, + { + pid: 10, + name: '高德影像', + type: 'group', + icon: '../../img/mars-map-img/gaode_img.png', + layers: [ + { name: '底图', type: 'gaode', layer: 'img_d' }, + { name: '注记', type: 'gaode', layer: 'img_z' }, + ], + }, + { + pid: 10, + name: '高德电子', + type: 'gaode', + icon: '../../img/mars-map-img/gaode_vec.png', + layer: 'vec', + }, + { + pid: 10, + name: '百度影像', + type: 'group', + icon: '../../img/mars-map-img/bd-img.png', + layers: [ + { name: '底图', type: 'baidu', layer: 'img_d' }, + { name: '注记', type: 'baidu', layer: 'img_z' }, + ], + }, + { + pid: 10, + name: '百度电子', + icon: '../../img/mars-map-img/bd-vec.png', + type: 'baidu', + layer: 'vec', + }, + { + pid: 10, + name: '腾讯影像', + icon: '../../img/mars-map-img/tencent_img.png', + type: 'group', + layers: [ + { name: '底图', type: 'tencent', layer: 'img_d' }, + { name: '注记', type: 'tencent', layer: 'img_z' }, + ], + }, + { + pid: 10, + name: '腾讯电子', + icon: '../../img/mars-map-img/tencent_vec.png', + type: 'tencent', + layer: 'vec', + }, + { + pid: 10, + name: 'ArcGIS影像', + icon: '../../img/mars-map-img/esriWorldImagery.png', + type: 'xyz', + url: 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', + enablePickFeatures: false, + }, + ], +} + +// 图例数据 +const legendData = [ + { + name: '协调完成', + value: 0, + // icon: "../../img/digitalSignage/icon_three.png", + icon: '../../img/digitalSignage/icon_three_new.png', + }, + { + name: '基础开挖', + value: 0, + // icon: "../../img/digitalSignage/icon_two.png", + icon: '../../img/digitalSignage/icon_two_new.png', + }, + { + name: '基础开挖完成', + value: 0, + // icon: "../../img/digitalSignage/icon_five.png", + icon: '../../img/digitalSignage/icon_five_new.png', + }, + { + name: '基础浇筑', + value: 0, + // icon: "../../img/digitalSignage/icon_seven.png", + icon: '../../img/digitalSignage/icon_seven_new.png', + }, + { + name: '基础浇筑完成', + value: 0, + // icon: "../../img/digitalSignage/icon_four.png", + icon: '../../img/digitalSignage/icon_four_new.png', + }, + { + name: '铁塔组立', + value: 0, + // icon: "../../img/digitalSignage/icon_six.png", + icon: '../../img/digitalSignage/zt_orange.png', + }, + { + name: '铁塔组立完成', + value: 0, + icon: '../../img/digitalSignage/zt_red.png', + }, + { + name: '架线施工', + value: 0, + icon: '../../img/digitalSignage/line_y.png', + }, + // { + // name: "架线施工完成", + // value: 0, + // icon: "../../img/digitalSignage/zt_purple.png", + // }, + { + name: '架线施工完成', + value: 0, + icon: '../../img/digitalSignage/line_r.png', + }, + { + name: '附件安装完成', + value: 0, + icon: '../../img/digitalSignage/zt_green.png', + }, + { + name: '未 开 始', + value: 0, + icon: '../../img/digitalSignage/icon_one_new.png', + }, + { + name: '索道运输', + value: 0, + icon: '../../img/digitalSignage/sd.png', + }, + // { + // name: "项 目 部", + // value: 0, + // icon: "../../img/digitalSignage/project.png", + // }, +] + +// 地图配置项 +const config = { + polyline: { + strokeWeight: 3, // 线条宽度 + strokeOpacity: 0.9, // 透明度 + strokeStyle: 'dashed', // solid(实线)或dashed(虚线) + enableEditing: false, // 是否可编辑 + enableClicking: true, // 是否可点击 + }, +} + +// 获取位置信息 +function getLocationInfo(id) { + const params = { + encryptedData: encryptCBC(JSON.stringify({ id })), + } + ajaxRequest( + dataUrl + '/backstage/digitalSignage/getTowersInfo', + 'POST', + params, + true, + function () {}, + function (result) { + console.log(result, '获取位置信息---') + const { data } = result + + crossingList = [] + crossingListNew = [] + crossingLineListNew = [] + cablewayList = [] + towerList = [] + + if (data.cablewaTransVos.length > 0) { + cablewayList = data.cablewaTransVos + } else { + cablewayList = [] + } + if (data.towerInfoVos.length > 0) { + towerList = data.towerInfoVos + } else { + towerList = [] + } + if (data.spanInfoVos.length > 0) { + crossingList = data.spanInfoVos + } else { + crossingList = [] + crossingListNew = [] + crossingLineListNew = [] + } + + if (data.highwayList.length > 0) { + highwayList = data.highwayList + } else { + highwayList = [] + } + + if (data.aThousandFieldsList.length > 0) { + aThousandFieldsList = data.aThousandFieldsList + } else { + aThousandFieldsList = [] + } + + // 处理一下交叉信息 + if (crossingList && crossingList.length > 0) { + crossingList.forEach((item) => { + let lineList = [] + if (item.lonAndLat && item.lonAndLat.indexOf(',') > -1) { + const lonAndLatList = item.lonAndLat.split(',') + + lonAndLatList.forEach((lonAndLat, index) => { + const lonAndLatItem = lonAndLat.split('@') + crossingListNew.push({ + baiduLon: lonAndLatItem[0], + baiduLat: lonAndLatItem[1], + ...item, + }) + + lineList.push({ + baiduLon: lonAndLatItem[0], + baiduLat: lonAndLatItem[1], + ...item, + }) + }) + } + + crossingLineListNew.push({ lineList }) + }) + } + initMap() + }, + function (xhr) { + error(xhr) + }, + ) +} + +async function initMap() { + const mars3d = window.mars3d // 静态资源引入时,对象都是挂载在window中 + const Cesium = window.mars3d.Cesium + try { + if (map) { + // 移除所有自定义图层 + if (graphicLayer) { + graphicLayerList.forEach((e) => { + graphicLayer.removeGraphic(e) + }) + + polylines1.forEach((e) => { + graphicLayer.removeGraphic(e) + }) + polylines2.forEach((e) => { + graphicLayer.removeGraphic(e) + }) + polylines3.forEach((e) => { + graphicLayer.removeGraphic(e) + }) + + polylines1 = [] + polylines2 = [] + polylines3 = [] + } + const centerPoint = [intLng, intLat] + + // 方式1:直接飞向目标点 + map.flyToPoint(centerPoint, { + radius: 5000, // 可视范围半径(米) + duration: 2, // 飞行时间(秒) + heading: 0, // 视角方向(0-360度) + pitch: -45, // 俯仰角度(-90俯视,0平视,90仰视) + }) + await addAllMapPoints(graphicLayer, mars3d, Cesium) + await addMapLine(graphicLayer, mars3d, Cesium) + await addMapAThousandFields(graphicLayer, mars3d, Cesium) + } else { + // 2. WebGL兼容性检查 + if (!mars3d.Util.webglreport()) { + mars3d.Util.webglerror() + return + } + + // 3. 初始化新地图 + mapConfig.scene.center.lat = intLat || 31.686288 + mapConfig.scene.center.lng = intLng || 117.229619 + map = new mars3d.Map('map-box', mapConfig) + + // 4. 创建新的图形图层 + graphicLayer = new mars3d.layer.GraphicLayer() + + const centerPoint = [intLng, intLat] + + map.flyToPoint(centerPoint, { + radius: 5000, // 可视范围半径(米) + duration: 5, // 飞行时间(秒) + heading: 0, // 视角方向(0-360度) + pitch: -45, // 俯仰角度(-90俯视,0平视,90仰视) + }) + + map.addLayer(graphicLayer) + + // 5. 添加内容 + await addAllMapPoints(graphicLayer, mars3d, Cesium) + await addMapLine(graphicLayer, mars3d, Cesium) + await addMapAThousandFields(graphicLayer, mars3d, Cesium) + } + } catch (error) { + // 失败时也清理残留 + if (map) { + map.destroy() + map = null + } + } +} + +// 添加标点 +async function addAllMapPoints(graphicLayer, mars3d, Cesium) { + const iconTypeList = { + // 1: "../../img/digitalSignage/icon_three.png", + 1: '../../img/digitalSignage/icon_three_new.png', + // 2: "../../img/digitalSignage/icon_two.png", + 2: '../../img/digitalSignage/icon_two_new.png', + // 3: "../../img/digitalSignage/icon_five.png", + 3: '../../img/digitalSignage/icon_five_new.png', + // 4: "../../img/digitalSignage/icon_seven.png", + // 4: "../../img/digitalSignage/icon_purple.png", + 4: '../../img/digitalSignage/icon_seven_new.png', + // 5: "../../img/digitalSignage/icon_four.png", + 5: '../../img/digitalSignage/icon_four_new.png', + // 6: "../../img/digitalSignage/icon_six.png", + 6: '../../img/digitalSignage/zt_orange.png', + 7: '../../img/digitalSignage/zt_red.png', + 8: '../../img/digitalSignage/zt_red.png', // 新增的工序 + 9: '../../img/digitalSignage/zt_red.png', + 10: '../../img/digitalSignage/zt_green.png', + // 0: "../../img/digitalSignage/icon_one.png", + 0: '../../img/digitalSignage/icon_one_new.png', + 12: '../../img/digitalSignage/sd.png', + 20: '../../img/digitalSignage/project.png', + // 21: "../../img/digitalSignage/zt_white.png", + 21: '../../img/digitalSignage/zt_gary.png', + } + + // 绘制索道标点 + if (cablewayList && cablewayList.length > 0) { + cablewayList.forEach((pointData, index) => { + if (pointData.cablewaTransPointVoList && pointData.cablewaTransPointVoList.length > 0) { + // const positionNew = mars3d.PointTrans.bd2wgs([ + // pointData.cablewaTransPointVoList[0].lng, + // pointData.cablewaTransPointVoList[0].lat, + // ]); + const billboard = new mars3d.graphic.BillboardEntity({ + position: [ + pointData.cablewaTransPointVoList[0].lng, + pointData.cablewaTransPointVoList[0].lat, + 1000, + ], + style: { + image: iconTypeList[12], + width: 30, + height: 30, + scale: 1, + horizontalOrigin: Cesium.HorizontalOrigin.CENTER, + verticalOrigin: Cesium.VerticalOrigin.BOTTOM, + clampToGround: true, + }, + }) + + // 添加点击事件 + billboard.on(mars3d.EventType.click, function (event) { + // console.log("点击了标点", event.graphic.attr); + const graphic = event.graphic + const infoContent = ` +
+

+ 索道运输 +

+
+ 索道位置 + ${pointData.towerName} +
+
+ 索道长度 + ${pointData.cablewayLength} KM +
+
+ 最大载重 + ${pointData.maxHeight} kg +
+
+ 安全距离 + ${pointData.safetyDistance} m +
+
+ 最大坡度 + ${pointData.maxSlope} ° +
+
+ 索道宽度 + ${pointData.cablewayWidth} m +
+
` + // 创建自定义信息窗体 + graphicLayer.bindPopup(infoContent, { + position: graphic.position, + }) + }) + + graphicLayer.addGraphic(billboard) + + graphicLayerList.push(billboard) + } + }) + } + + // 绘制项目部 + if (intLng && intLat) { + // const positionNew = mars3d.PointTrans.bd2wgs([intLng, intLat]); + const billboard = new mars3d.graphic.BillboardEntity({ + position: [intLng, intLat, 1000], + style: { + image: iconTypeList[20], + width: 30, + height: 30, + + scale: 1, + horizontalOrigin: Cesium.HorizontalOrigin.CENTER, + verticalOrigin: Cesium.VerticalOrigin.BOTTOM, + clampToGround: true, + }, + }) + + // 添加点击事件 + billboard.on(mars3d.EventType.click, function (event) { + // console.log("点击了标点", event.graphic.attr); + const graphic = event.graphic + const infoContent = ` +
+

+ ${projectTitle} +

+
` + // 创建自定义信息窗体 + graphicLayer.bindPopup(infoContent, { + position: graphic.position, + }) + }) + + graphicLayer.addGraphic(billboard) + graphicLayerList.push(billboard) + } + + // 绘制杆塔 + if (towerList && towerList.length > 0) { + // showData(towerList, graphicLayer); + + const towerList1 = towerList + + // 异步获取所有点的海拔高度 + // const hList = [ + // 1719.018, 1692.086, 1603.903, 1613.565, 1766.005, 1731.971, 1740.48, + // 1751.94, 1762.712, 1711.249, + // ]; + + const newTowerList2D = towerList1.filter( + (item) => + item.towerProgress != 6 && + item.towerProgress != 7 && + item.towerProgress != 8 && + item.towerProgress != 9 && + item.towerProgress != 10, + ) + const newTowerList3D = towerList1.filter( + (item) => + item.towerProgress == 6 || + item.towerProgress == 7 || + item.towerProgress == 8 || + item.towerProgress == 9 || + item.towerProgress == 10, + ) + const newTowerList3DData = await Promise.all( + newTowerList3D.map(async (item, index) => { + const altitude = await getElevationByLngLat(item.baiduLon, item.baiduLat) + + const heightInit = item.towerType == 1 ? 68.5 : 80 + return { + alt: altitude - heightInit, // 海拔高度 根据经纬度计算 + heading: 23.0667, // 方向 + headingStr: '23°4′', // 方向字符串 + height: heightInit, // 杆塔高度 + lat: item.baiduLat, // 纬度 + lon: item.baiduLon, // 经度 + ...item, + type: item.towerType, + } + }), + ) + + // 过滤出需要绘制3D塔的数据 + + showData(newTowerList3DData, graphicLayer) + + newTowerList2D.forEach((pointData, index) => { + const isEven = index % 2 === 0 + // 标点垂直方向设置 + const billboardVerticalOrigin = Cesium.VerticalOrigin.BOTTOM // 标点固定底部对齐 + + // 标签位置设置 + const labelVerticalOrigin = isEven + ? Cesium.VerticalOrigin.BOTTOM + : Cesium.VerticalOrigin.TOP + const pixelOffsetY = isEven ? 40 : -70 // 调整偏移量(根据标点大小适当调整) + + const iconUrl = iconTypeList[parseInt(pointData.towerProgress)] + + // const wgsPoint = mars3d.PointTrans.bd2wgs([ + // pointData.baiduLon, + // pointData.baiduLat, + // ]); + + // const wgsPoint = [ + // dmsToDecimal(pointData.baiduLon), + // dmsToDecimal(pointData.baiduLat), + // ]; + + const billboard = new mars3d.graphic.BillboardEntity({ + position: [pointData.baiduLon, pointData.baiduLat], + style: { + image: iconUrl, + width: 30, + height: 30, + scale: 1, + horizontalOrigin: Cesium.HorizontalOrigin.CENTER, + verticalOrigin: Cesium.VerticalOrigin.BOTTOM, + clampToGround: true, + heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, // 必须设置 + disableDepthTestDistance: Number.POSITIVE_INFINITY, // 防止被地形遮挡 + }, + // 其他属性 + attr: { + id: index, + name: pointData.towerName, + }, + }) + + const label2 = new mars3d.graphic.DivGraphic({ + position: [pointData.baiduLon, pointData.baiduLat], + style: { + html: `
${pointData.towerName}
`, + horizontalOrigin: Cesium.HorizontalOrigin.CENTER, + verticalOrigin: labelVerticalOrigin, + scaleByDistance: true, + offsetY: isEven ? -40 : 10, + heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, + disableDepthTestDistance: Number.POSITIVE_INFINITY, + }, + }) + + graphicLayer.addGraphic(billboard) + graphicLayer.addGraphic(label2) + + // 添加点击事件 + billboard.on(mars3d.EventType.click, function (event) { + // console.log("点击了标点", event.graphic.attr); + const graphic = event.graphic + let infoContent = ` +
+

${pointData.towerName}

+
+ 协调完成 + ${pointData.time1 || '/'} +
+
+ 基础开挖 + ${pointData.time2 || '/'} +
+
+ 基础开挖完成 + ${pointData.time3 || '/'} +
+
+ 基础浇筑 + ${pointData.time4 || '/'} +
+
+ 基础浇筑完成 + ${pointData.time5 || '/'} +
+
+ 铁塔组立 + ${pointData.time6 || '/'} +
+
+ 铁塔组立完成 + ${pointData.time7 || '/'} +
+
+ 架线施工 + ${pointData.time8 || '/'} +
+
+ 架线施工完成 + ${pointData.time9 || '/'} +
+
+ 附件安装完成 + ${pointData.time10 || '/'} +
+
` + // 创建自定义信息窗体 + graphicLayer.bindPopup(infoContent, { + position: graphic.position, + }) + }) + + graphicLayerList.push(billboard) + graphicLayerList.push(label2) + }) + } + + // 绘制交叉跨越 + if (crossingListNew.length > 0) { + crossingListNew.forEach((pointData, index) => { + // const positionNew = mars3d.PointTrans.bd2wgs([ + // pointData.baiduLon, + // pointData.baiduLat, + // ]); + const billboard = new mars3d.graphic.BillboardEntity({ + position: [pointData.baiduLon, pointData.baiduLat, 1000], + style: { + image: iconTypeList[21], + width: 30, + height: 30, + scale: 1, + horizontalOrigin: Cesium.HorizontalOrigin.CENTER, + verticalOrigin: Cesium.VerticalOrigin.BOTTOM, + clampToGround: true, + }, + }) + + // 添加点击事件 + billboard.on(mars3d.EventType.click, function (event) { + // console.log("点击了标点", event.graphic.attr); + + console.log(event, 'pointData点击了----') + + //
+ //

+ // ${pointData.towerInfoVo.towerName} + //

+ //
+ // 协调完成 + // ${ + // pointData.towerInfoVo.time1 || "/" + // } + //
+ //
+ // 基础开挖 + // + // ${pointData.towerInfoVo.time2 || "/"} + // + //
+ //
+ // 基础开挖完成 + // + // ${pointData.towerInfoVo.time3 || "/"} + // + //
+ //
+ // 基础浇筑 + // + // ${pointData.towerInfoVo.time4 || "/"} + // + //
+ //
+ // 基础浇筑完成 + // + // ${pointData.towerInfoVo.time5 || "/"} + // + //
+ //
+ // 铁塔组立 + // + // ${pointData.towerInfoVo.time6 || "/"} + // + //
+ //
+ // 铁塔组立完成 + // + // ${pointData.towerInfoVo.time7 || "/"} + // + //
+ //
+ // 架线施工 + // + // ${pointData.towerInfoVo.time8 || "/"} + // + //
+ //
+ // 架线施工完成 + // + // ${pointData.towerInfoVo.time9 || "/"} + // + //
+ //
+ // 附件安装完成 + // + // ${pointData.towerInfoVo.time10 || "/"} + // + //
+ //
+ const graphic = event.graphic + const infoContent = ` +
+ +
+

+ 交叉跨越信息 ( ${pointData.spanTowerName} ) +

+
+ 上层线路 + ${pointData.upperLine} +
+
+ 下层线路 + ${pointData.lowerLine} +
+
+ 交叉角度 + ${pointData.intersectionAngle} ° +
+
+ 垂直距离 + ${pointData.verticalDistance} m +
+
+ 安全裕度 + ${pointData.safetyMargin} m +
+
+
` + // 创建自定义信息窗体 + graphicLayer.bindPopup(infoContent, { + position: graphic.position, + }) + }) + + graphicLayer.addGraphic(billboard) + graphicLayerList.push(billboard) + }) + } +} + +// 添加标点折线(智能绘制虚实线) +async function addMapLine(graphicLayer, mars3d, Cesium) { + const newTowerList1 = towerList.filter( + (item) => + item.towerProgress != 6 && + item.towerProgress != 7 && + item.towerProgress != 8 && + item.towerProgress != 9 && + item.towerProgress != 10, + ) + + console.log(newTowerList1, 'newTowerList1----') + // 存储所有线段 + const segments = [] + // 绘制杆塔线 + for (let i = 0; i < newTowerList1.length - 1; i++) { + const startPoint = newTowerList1[i] + const endPoint = newTowerList1[i + 1] + + let lineColor = '' + let lineMaterial = null // 用于存储线材质 + + // 判断条件部分保持不变 + if ( + (startPoint.towerProgress == 8 && endPoint.towerProgress == 8) || + startPoint.towerProgress == 8 + ) { + // lineColor = "#FFFF00"; + // lineMaterial = new Cesium.ColorMaterialProperty({ + // // 实线 + // color: Cesium.Color.fromCssColorString("#FFFF00"), + // }); + + // 创建线段点数组 + const positions = [ + [startPoint.baiduLon, startPoint.baiduLat, 500], + [endPoint.baiduLon, endPoint.baiduLat, 500], + ] + const polyline = new mars3d.graphic.PolylineEntity({ + positions: positions, + eventParent: false, + style: { + width: 2, // 线宽(像素) + color: '#FFFF00', // 使用动态设置的材质 + clampToGround: true, // 是否贴地(山区建议设为true) + }, + }) + graphicLayer.addGraphic(polyline) + graphicLayerList.push(polyline) + } else if ( + endPoint.existSpan === 1 && + startPoint.existSpan === 1 && + startPoint.towerProgress != 9 && + endPoint.towerProgress != 9 && + startPoint.towerProgress != 8 && + endPoint.towerProgress != 8 && + startPoint.towerProgress != 10 && + endPoint.towerProgress != 10 + ) { + // lineColor = "#d81e06"; + // lineMaterial = new Cesium.PolylineDashMaterialProperty({ + // // 虚线 + // color: Cesium.Color.fromCssColorString(lineColor), + // dashLength: 16.0, // 可调整虚线长度 + // }); + // // 创建线段点数组 + // const positions = [ + // [startPoint.baiduLon, startPoint.baiduLat, 500], + // [endPoint.baiduLon, endPoint.baiduLat, 500], + // ]; + // const polyline = new mars3d.graphic.PolylineEntity({ + // positions: positions, + // eventParent: false, + // style: { + // width: 2, // 线宽(像素) + // material: lineMaterial, // 使用动态设置的材质 + // clampToGround: true, // 是否贴地(山区建议设为true) + // }, + // }); + // graphicLayer.addGraphic(polyline); + // graphicLayerList.push(polyline); + } else if ( + (startPoint.towerProgress === 9 && endPoint.towerProgress === 9) || + (startPoint.towerProgress === 10 && endPoint.towerProgress === 10) || + startPoint.towerProgress === 9 + ) { + // lineColor = "#d81e06"; + // lineMaterial = new Cesium.ColorMaterialProperty({ + // // 实线 + // color: Cesium.Color.fromCssColorString(lineColor), + // }); + + // 创建线段点数组 + const positions = [ + [startPoint.baiduLon, startPoint.baiduLat], + [endPoint.baiduLon, endPoint.baiduLat], + ] + const polyline = new mars3d.graphic.PolylineEntity({ + positions: positions, + eventParent: false, + style: { + width: 2, // 线宽(像素) + color: '#d81e06', // 使用动态设置的材质 + clampToGround: true, // 是否贴地(山区建议设为true) + }, + }) + graphicLayer.addGraphic(polyline) + graphicLayerList.push(polyline) + } else { + lineColor = '#fff' + lineMaterial = new Cesium.PolylineDashMaterialProperty({ + // 虚线 + // color: Cesium.Color.fromCssColorString(lineColor), + color: Cesium.Color.TRANSPARENT, + dashLength: 16.0, // 可调整虚线长度 + }) + } + } + + // 绘制交叉线路 + if (crossingLineListNew.length > 0) { + for (let i = 0; i < crossingLineListNew.length; i++) { + for (let j = 0; j < crossingLineListNew[i].lineList.length - 1; j++) { + const startPoint = crossingLineListNew[i].lineList[j] + const endPoint = crossingLineListNew[i].lineList[j + 1] + + // 创建线段点数组 + const positions = [ + [startPoint.baiduLon, startPoint.baiduLat], + [endPoint.baiduLon, endPoint.baiduLat], + ] + + // const positions2 = positions.map((item) => { + // return mars3d.PointTrans.bd2wgs(item); + // }); + + const polyline = new mars3d.graphic.PolylineEntity({ + positions: positions, + eventParent: false, + style: { + width: 2, // 线宽(像素) + color: '#800080', // 线颜色 + clampToGround: true, // 是否贴地(山区建议设为true) + }, + }) + graphicLayer.addGraphic(polyline) + graphicLayerList.push(polyline) + } + } + } + + // 绘制索道线 + if (cablewayList.length > 0) { + cablewayList.forEach((pointData) => { + if (pointData.cablewaTransPointVoList && pointData.cablewaTransPointVoList.length > 0) { + for (let j = 0; j < pointData.cablewaTransPointVoList.length - 1; j++) { + const startPoint = pointData.cablewaTransPointVoList[j] + const endPoint = pointData.cablewaTransPointVoList[j + 1] + + // 创建线段点数组 + const positions = [ + [startPoint.lng, startPoint.lat], + [endPoint.lng, endPoint.lat], + ] + + // const positions2 = positions.map((item) => { + // return mars3d.PointTrans.bd2wgs(item); + // }); + + const polyline = new mars3d.graphic.PolylineEntity({ + positions: positions, + eventParent: false, + style: { + width: 2, // 线宽(像素) + color: '#262fc9', // 线颜色 + clampToGround: true, // 是否贴地(山区建议设为true) + }, + }) + graphicLayer.addGraphic(polyline) + graphicLayerList.push(polyline) + } + } + }) + } + + // 绘制公路线 + if (highwayList.length > 0) { + for (let i = 0; i < highwayList.length; i++) { + if (highwayList[i].cablewaTransPointVoList.length > 0) { + for (let j = 0; j < highwayList[i].cablewaTransPointVoList.length - 1; j++) { + const startPoint = highwayList[i].cablewaTransPointVoList[j] + const endPoint = highwayList[i].cablewaTransPointVoList[j + 1] + + // 创建线段点数组 + const positions = [ + [startPoint.lng, startPoint.lat], + [endPoint.lng, endPoint.lat], + ] + + // const positions2 = positions.map((item) => { + // return mars3d.PointTrans.bd2wgs(item); + // }); + + const polyline = new mars3d.graphic.PolylineEntity({ + positions: positions, + // eventParent: true, + style: { + width: 2, // 线宽(像素) + color: '#FFFF00', // 线颜色 + clampToGround: true, // 是否贴地(山区建议设为true) + }, + }) + + // 添加点击事件 + polyline.on(mars3d.EventType.click, function (event) { + // console.log("点击了标点", event.graphic.attr); + const graphic = event.graphic + let infoContent = ` +
+

公路所在杆塔:${highwayList[i].towerName}

+
+ 宽度 + ${highwayList[i].cablewayWidth || '/'} +
+
+ 长度 + ${highwayList[i].cablewayLength || '/'} +
+
` + // 创建自定义信息窗体 + // graphicLayer.bindPopup(infoContent, { + // position: graphic.position, + // }); + + graphic.bindPopup(infoContent) + graphic.openPopup() + }) + graphicLayer.addGraphic(polyline) + graphicLayerList.push(polyline) + } + } + } + } + + // 将所有线段添加到地图 + segments.forEach((segment) => map.addOverlay(segment)) +} + +// 绘制牵张场地区域图 +async function addMapAThousandFields(graphicLayer, mars3d, Cesium) { + if (aThousandFieldsList.length > 0) { + aThousandFieldsList.forEach((item) => { + if (item.cablewaTransPointVoList && item.cablewaTransPointVoList.length > 0) { + let points = [] + // 根据sort字段排序 防止点位顺序不一致 + item.cablewaTransPointVoList.forEach((j) => { + points.push([j.lng, j.lat]) + }) + + // const positions2 = points.map((item) => { + // return mars3d.PointTrans.bd2wgs(item); + // }); + + if (points.length > 0) { + const graphic = new mars3d.graphic.PolygonEntity({ + positions: points, + // eventParent: false, + style: { + color: '#00FFFF', // 区域填充颜色 + opacity: 0.5, // 透明度(0-1) + outline: true, // 是否显示边框 + outlineWidth: 2, // 边框宽度(像素) + outlineColor: '#00FFFF', // 边框颜色 + clampToGround: true, + }, + attr: { remark: '示例区域' }, + }) + + // 添加点击事件 + graphic.on(mars3d.EventType.click, function (event) { + // console.log("点击了标点", event.graphic.attr); + const graphic = event.graphic + let infoContent = ` +
+

名称:${item.name}

+
+ 宽度 + ${item.cablewayWidth || '/'} +
+
+ 长度 + ${item.cablewayLength || '/'} +
+
` + // 创建自定义信息窗体 + // graphicLayer.bindPopup(infoContent, { + // position: graphic.position, + // }); + + graphic.bindPopup(infoContent) + graphic.openPopup() + }) + graphicLayer.addGraphic(graphic) + graphicLayerList.push(graphic) + } + } + }) + } +} + +function showData(arrdata, graphicLayer) { + const polylinesTB = [] // 图标显示的点 + + // 预处理坐标及角度 + for (let i = 0, len = arrdata.length; i < len; i++) { + const item = arrdata[i] + const position = Cesium.Cartesian3.fromDegrees(item.lon, item.lat, item.alt) + item.position = position + item.index = i + 1 + + // 模型比例,根据塔高换算 + item.scale = item.height / (item.type === '1' ? 69 : 80.5) + + // 测试塔顶高度与实际高度是否一致 + // const positionTop = mars3d.PointUtil.addPositionsHeight(position, item.height) // 顶部点 + // const graphic2 = new mars3d.graphic.PointPrimitive({ + // position: positionTop, + // style: { + // color: "#ff0000", + // pixelSize: 8, + // outlineColor: "#ffffff", + // outlineWidth: 2 + // } + // }) + // graphicLayer.addGraphic(graphic2) + + // 计算电线塔转角角度 + if (i !== 0) { + const priorPt = arrdata[i - 1].position + item.lineHeading = mars3d.MeasureUtil.getAngle(priorPt, position) // 线的角度 + } + } + + // 计算各坐标及路线坐标,并渲染矢量对象 + for (let i = 0, len = arrdata.length; i < len; i++) { + const item = arrdata[i] + const position = item.position + + // 计算电线塔转角角度 + let degree = -2.2333 + // if (degree) { + // item.degree = item.lineHeading - item.heading + // } else { + if (i === 0) { + degree = arrdata[i + 1].lineHeading + } else if (i === len - 1) { + degree = arrdata[i].lineHeading + } else { + const nextTower = arrdata[i + 1] + let stepAngle = (nextTower.lineHeading - item.lineHeading) / 2 + if (stepAngle > 90) { + stepAngle = 180 - stepAngle + } else if (stepAngle < -90) { + stepAngle = stepAngle + 180 + } + degree = item.lineHeading + stepAngle + } + item.degree = degree + // } + + const hpr = new Cesium.HeadingPitchRoll(Cesium.Math.toRadians(degree), 0, 0) + + // 3个悬垂串的位置 + const offsetLineZ = item.height - 3.9 + let newPoint1 = mars3d.PointUtil.getPositionByHprAndOffset( + position, + new Cesium.Cartesian3(0, 10.6, offsetLineZ), + hpr, + ) // 左边挂线 + let newPoint2 = mars3d.PointUtil.getPositionByHprAndOffset( + position, + new Cesium.Cartesian3(0, 0, offsetLineZ), + hpr, + ) // 中间线 + let newPoint3 = mars3d.PointUtil.getPositionByHprAndOffset( + position, + new Cesium.Cartesian3(0, -10.6, offsetLineZ), + hpr, + ) // 右边挂线 + + // polylinesTB.push(newPoint2); // 图标显示的点 + + drawWireTowerModel(graphicLayer, position, degree, item.scale, item) + drawWireTowerJYZModel(newPoint1, degree, graphicLayer) // 3个悬垂串模型 + // drawWireTowerJYZModel(newPoint2, degree, graphicLayer); + drawWireTowerJYZModel(newPoint3, degree, graphicLayer) + + // 计算路线点 + const jyzHeight = -5 + newPoint1 = mars3d.PointUtil.addPositionsHeight(newPoint1, jyzHeight) + // newPoint2 = mars3d.PointUtil.addPositionsHeight(newPoint2, jyzHeight); + newPoint3 = mars3d.PointUtil.addPositionsHeight(newPoint3, jyzHeight) + + if (i === 0) { + polylines1.push(newPoint1) + polylines2.push(newPoint2) + polylines3.push(newPoint3) + } else { + const angularityFactor = -5000 + const num = 50 + let positions = mars3d.PolyUtil.getLinkedPointList( + polylines1[polylines1.length - 1], + newPoint1, + angularityFactor, + num, + ) // 计算曲线点 + polylines1 = polylines1.concat(positions) + + positions = mars3d.PolyUtil.getLinkedPointList( + polylines2[polylines2.length - 1], + newPoint2, + angularityFactor, + num, + ) // 计算曲线点 + polylines2 = polylines2.concat(positions) + + positions = mars3d.PolyUtil.getLinkedPointList( + polylines3[polylines3.length - 1], + newPoint3, + angularityFactor, + num, + ) // 计算曲线点 + polylines3 = polylines3.concat(positions) + } + } + + // 绘制路线 + drawGuideLine(polylines1, '#0000ff', graphicLayer) + // drawGuideLine(polylines2, "#cccccc", graphicLayer); + drawGuideLine(polylines3, '#ff0000', graphicLayer) + + polylines1 = mars3d.LngLatArray.toArray(polylines1) + // polylines2 = mars3d.LngLatArray.toArray(polylines2); + polylines3 = mars3d.LngLatArray.toArray(polylines3) +} + +// 绘制电线塔模型 +function drawWireTowerModel(graphicLayer, position, degree, scale, item) { + const item1 = { + alt: 488.28, + heading: -2.2333, + headingStr: '-2°14′', + height: 52, + lat: item.baiduLat, + lon: item.baiduLon, + } + + const graphic = new mars3d.graphic.ModelPrimitive({ + position, + style: { + url: + item.type === '1' + ? '../../img/3d-model/tower_1.glb' + : '../../img/3d-model/tower_2.glb', + heading: degree, + scale: scale, + distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0, 4000.0), + }, + // popup: html, + }) + + // 添加点击事件 + graphic.on(mars3d.EventType.click, function (event) { + // console.log("点击了标点", event.graphic.attr); + const graphic = event.graphic + let infoContent = ` +
+

${item.towerName}

+
+ 协调完成 + ${item.time1 || '/'} +
+
+ 基础开挖 + ${item.time2 || '/'} +
+
+ 基础开挖完成 + ${item.time3 || '/'} +
+
+ 基础浇筑 + ${item.time4 || '/'} +
+
+ 基础浇筑完成 + ${item.time5 || '/'} +
+
+ 铁塔组立 + ${item.time6 || '/'} +
+
+ 铁塔组立完成 + ${item.time7 || '/'} +
+
+ 架线施工 + ${item.time8 || '/'} +
+
+ 架线施工完成 + ${item.time9 || '/'} +
+
+ 附件安装完成 + ${item.time10 || '/'} +
+
` + // 创建自定义信息窗体 + graphicLayer.bindPopup(infoContent, { + position: graphic.position, + }) + }) + graphicLayer.addGraphic(graphic) + graphicLayerList.push(graphic) +} + +function drawWireTowerJYZModel(position, degree, graphicLayer) { + const graphic2 = new mars3d.graphic.ModelPrimitive({ + position, + style: { + url: 'https://data.mars3d.cn/gltf/mars/tower/tower-jyz.glb', + heading: degree, + pitch: 90, // 模型本身不是竖直,需要加pitch纠正 + scale: 1, + distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0, 4000.0), + }, + }) + graphicLayer.addGraphic(graphic2) + graphicLayerList.push(graphic2) +} + +function drawGuideLine(positions, color, graphicLayer) { + const graphic = new mars3d.graphic.PolylinePrimitive({ + positions, + style: { + width: 4, + color, + }, + }) + graphicLayer.addGraphic(graphic) + graphicLayerList.push(graphic) +} diff --git a/src/views/showComponents/showMap/index.vue b/src/views/showComponents/showMap/index.vue new file mode 100644 index 0000000..b364322 --- /dev/null +++ b/src/views/showComponents/showMap/index.vue @@ -0,0 +1,1078 @@ + + + + + diff --git a/src/views/showComponents/showTable/config.js b/src/views/showComponents/showTable/config.js new file mode 100644 index 0000000..1807bcb --- /dev/null +++ b/src/views/showComponents/showTable/config.js @@ -0,0 +1,183 @@ +// 表单配置 +export const formColumns = [ + { + type: 'input', + prop: 'queryTableName', + label: '', // 表格名称 + placeholder: '请输入表格名称', + defaultValue: '', // 默认值 + isShowLabel: false, + }, + { + type: 'select', + prop: 'queryStatus', + label: '', // 状态 + placeholder: '请选择状态', + options: [ + { label: '启用', value: '1' }, + { label: '禁用', value: '0' }, + ], + }, + { + type: 'cascader', + prop: 'queryClass', + label: '', // 班级 + placeholder: '请选择班级', + options: [ + { + label: '班级1', + value: '1', + children: [ + { label: '班级1-1', value: '1-1' }, + { label: '班级1-2', value: '1-2' }, + { label: '班级1-3', value: '1-3' }, + ], + }, + { + label: '班级2', + value: '2', + children: [ + { label: '班级2-1', value: '2-1' }, + { label: '班级2-2', value: '2-2' }, + { label: '班级2-3', value: '2-3' }, + ], + }, + { + label: '班级3', + value: '3', + children: [ + { label: '班级3-1', value: '3-1' }, + { label: '班级3-2', value: '3-2' }, + { label: '班级3-3', value: '3-3' }, + ], + }, + ], + }, + { + type: 'date', + prop: 'queryDateRange', + label: '', // 日期区间 + dateType: 'daterange', // 日期区间 + paramsList: ['queryStartDate', 'queryEndDate'], + valueFormat: 'YYYY-MM-DD', + startPlaceholder: '开始日期', + endPlaceholder: '结束日期', + }, + // 月份区间筛选(Element Plus 支持 monthrange) + { + type: 'date', + prop: 'queryMonthRange', + label: '', // 月份区间 + dateType: 'monthrange', // 月份区间 + paramsList: ['queryStartMonth', 'queryEndMonth'], + valueFormat: 'YYYY-MM', + startPlaceholder: '开始月份', + endPlaceholder: '结束月份', + }, + { + type: 'date', + prop: 'queryYear', + label: '', // 年份 + dateType: 'year', // 单选年份 + valueFormat: 'YYYY', + placeholder: '请选择年份', + }, + { + type: 'date', + prop: 'queryMonth', + label: '', // 月份 + dateType: 'month', // 单选月份 + valueFormat: 'YYYY-MM', + placeholder: '请选择月份', + }, + { + type: 'date', + prop: 'queryDate', + label: '', // 日期 + dateType: 'date', // 单选日期 + valueFormat: 'YYYY-MM-DD', + placeholder: '请选择日期', + }, +] + +// 表格列配置 +export const tableColumns = [ + { + prop: 'tableName', // 字段名 + label: '表格名称', // 标签 + width: 180, // 列宽 + minWidth: 120, // 最小列宽 + align: 'left', // 对齐方式 + showOverflowTooltip: true, // 超出显示提示 + id: 'tableName', + }, + { + prop: 'status', + label: '状态', + width: 100, + // 自定义渲染(使用插槽) + slot: 'status', + id: 'status', + // 或者使用格式化函数 + // formatter: (row, column, cellValue) => { + // return cellValue === '1' ? '启用' : '禁用' + // } + }, + { + prop: 'createTime', + label: '创建时间', + width: 180, + id: 'createTime', + }, + { + prop: 'remark', + label: '备注', + minWidth: 200, + showOverflowTooltip: true, + id: 'remark', + }, +] + +// 操作列配置(可选) +export const actionColumns = [ + { + label: '编辑', + type: 'primary', + link: true, + handler: (row) => { + console.log('编辑', row) + }, + }, + { + label: '删除', + type: 'danger', + link: true, + handler: (row) => { + console.log('删除', row) + }, + }, + { + label: '详情', + type: 'danger', + link: true, + handler: (row) => { + console.log('删除', row) + }, + }, + { + label: '执行', + type: 'danger', + link: true, + handler: (row) => { + console.log('删除', row) + }, + }, + { + label: '测试', + type: 'warning', + link: true, + handler: (row) => { + console.log('删除', row) + }, + }, +] diff --git a/src/views/showComponents/showTable/index.vue b/src/views/showComponents/showTable/index.vue new file mode 100644 index 0000000..60b4de1 --- /dev/null +++ b/src/views/showComponents/showTable/index.vue @@ -0,0 +1,444 @@ + + + + + diff --git a/src/views/showComponents/showText/index.vue b/src/views/showComponents/showText/index.vue index a589018..eba156d 100644 --- a/src/views/showComponents/showText/index.vue +++ b/src/views/showComponents/showText/index.vue @@ -26,9 +26,9 @@ v-for="item in group.texts" :key="item.label" class="text-item"> - {{ - item.content - }} + + {{ item.content }} + {{ item.note }} diff --git a/vite.config.js b/vite.config.js index 35c3f1b..3e38eaf 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,44 +1,47 @@ -import { defineConfig, loadEnv } from "vite"; -import path from "path"; -import createVitePlugins from "./vite/plugins"; +import { defineConfig, loadEnv } from 'vite' +import path from 'path' +import createVitePlugins from './vite/plugins' +import { mars3dPlugin } from 'vite-plugin-mars3d' -const baseUrl = "http://localhost:8080"; // 后端接口 +const baseUrl = 'http://localhost:8080' // 后端接口 // https://vitejs.dev/config/ export default defineConfig(({ mode, command }) => { - const env = loadEnv(mode, process.cwd()); - env.VITE_APP_BASE_API = env.VITE_APP_BASE_API || "/dev-api"; - env.VITE_APP_TITLE = env.VITE_APP_TITLE || "博诺思管理系统"; - const { VITE_APP_ENV } = env; + const env = loadEnv(mode, process.cwd()) + env.VITE_APP_BASE_API = env.VITE_APP_BASE_API || '/dev-api' + env.VITE_APP_TITLE = env.VITE_APP_TITLE || '博诺思管理系统' + const { VITE_APP_ENV } = env return { // 部署生产环境和开发环境下的URL。 // 默认情况下,vite 会假设你的应用是被部署在一个域名的根路径上 // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。 - base: VITE_APP_ENV === "production" ? "/" : "/", - plugins: createVitePlugins(env, command === "build"), + base: VITE_APP_ENV === 'production' ? '/' : '/', + plugins: [...createVitePlugins(env, command === 'build'), mars3dPlugin()], resolve: { // https://cn.vitejs.dev/config/#resolve-alias alias: { // 设置路径 - "~": path.resolve(__dirname, "./"), + '~': path.resolve(__dirname, './'), // 设置别名 - "@": path.resolve(__dirname, "./src"), + '@': path.resolve(__dirname, './src'), }, // https://cn.vitejs.dev/config/#resolve-extensions - extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".vue"], + extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'], }, + // 让 Vite 将 .glb 视为静态资源,直接复制到产物中 + assetsInclude: ['**/*.glb'], // 打包配置 build: { // https://vite.dev/config/build-options.html - sourcemap: command === "build" ? false : "inline", - outDir: "dist", - assetsDir: "assets", + sourcemap: command === 'build' ? false : 'inline', + outDir: 'dist', + assetsDir: 'assets', chunkSizeWarningLimit: 2000, rollupOptions: { output: { - chunkFileNames: "static/js/[name]-[hash].js", - entryFileNames: "static/js/[name]-[hash].js", - assetFileNames: "static/[ext]/[name]-[hash].[ext]", + chunkFileNames: 'static/js/[name]-[hash].js', + entryFileNames: 'static/js/[name]-[hash].js', + assetFileNames: 'static/[ext]/[name]-[hash].[ext]', }, }, }, @@ -49,13 +52,13 @@ export default defineConfig(({ mode, command }) => { open: true, proxy: { // https://cn.vitejs.dev/config/#server-proxy - "/dev-api": { + '/dev-api': { target: baseUrl, changeOrigin: true, - rewrite: (p) => p.replace(/^\/dev-api/, ""), + rewrite: (p) => p.replace(/^\/dev-api/, ''), }, // springdoc proxy - "^/v3/api-docs/(.*)": { + '^/v3/api-docs/(.*)': { target: baseUrl, changeOrigin: true, }, @@ -65,11 +68,11 @@ export default defineConfig(({ mode, command }) => { postcss: { plugins: [ { - postcssPlugin: "internal:charset-removal", + postcssPlugin: 'internal:charset-removal', AtRule: { charset: (atRule) => { - if (atRule.name === "charset") { - atRule.remove(); + if (atRule.name === 'charset') { + atRule.remove() } }, }, @@ -77,5 +80,5 @@ export default defineConfig(({ mode, command }) => { ], }, }, - }; -}); + } +})