| | |
| | | import * as Cesium from 'cesium' |
| | | import { MapTooltip } from './MapTooltip' |
| | | import { DrawPolygon } from './DrawPolygon' |
| | | /** |
| | | * 飞到中心点并且所有点在可视范围 |
| | | * @param positionsData 二维数组,每项为 [lon, lat] 或 三维数组 [lon, lat, height] |
| | |
| | | }) |
| | | } |
| | | |
| | | export { MapTooltip, flyVisual } |
| | | // 批量获取点数组经纬度对应高度信息 |
| | | const getPointPositionsHeight = (data, viewer, droneHeight = null) => { |
| | | return new Promise((resolve, reject) => { |
| | | if (!data || !data.length) { |
| | | resolve([]) |
| | | return |
| | | } |
| | | // 假设 viewer 已经初始化并且 terrainProvider 是有效的 |
| | | const terrainProvider = viewer?.terrainProvider |
| | | // 创建 Cartographic 对象 |
| | | const cartographics = data.map(item => { |
| | | const { lng, lat } = item |
| | | return Cesium.Cartographic.fromDegrees(Number(lng), Number(lat)) |
| | | }) |
| | | // 获取地形数据的Promise |
| | | const promise = Cesium.sampleTerrainMostDetailed(terrainProvider, cartographics) |
| | | // 使用 Cesium.when 处理 Promise |
| | | promise |
| | | .then(function (updatedPositions) { |
| | | // 是一个数组,包含更新后的 Cartographic 对象 |
| | | const newPosition = updatedPositions.map((item, index) => { |
| | | const longitude = Cesium.Math.toDegrees(item.longitude) |
| | | const latitude = Cesium.Math.toDegrees(item.latitude) |
| | | let pointData = { |
| | | ...data[index], |
| | | longitude, |
| | | latitude, |
| | | ASL: Number(item.height), |
| | | customHeight: Number(item.height), |
| | | } |
| | | if (droneHeight) pointData.TH = Number(item.height) + Number(droneHeight) |
| | | return pointData |
| | | }) |
| | | resolve(newPosition) |
| | | }) |
| | | .catch(function (error) { |
| | | console.log('获取高程时发生错误:', error) |
| | | resolve(data.map(item => ({ ...item, ASL: 0, customHeight: 0, longitude: item.lng, latitude: item.lat }))) |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | export { MapTooltip, flyVisual, getPointPositionsHeight, DrawPolygon } |