import * as mars3d from "mars3d"
|
|
export let map // mars3d.Map三维地图对象
|
export let graphicLayer
|
|
// 需要覆盖config.json中地图属性参数(当前示例框架中自动处理合并)
|
export const mapOptions = {
|
scene: {
|
center: { lat: 30.791477, lng: 116.348231, alt: 6351, heading: 10, pitch: -36 }
|
}
|
}
|
|
export const eventTarget = new mars3d.BaseClass() // 事件对象,用于抛出事件到面板中
|
|
/**
|
* 初始化地图业务,生命周期钩子函数(必须)
|
* 框架在地图初始化完成后自动调用该函数
|
* @param {mars3d.Map} mapInstance 地图对象
|
* @returns {void} 无
|
*/
|
export function onMounted(mapInstance) {
|
map = mapInstance // 记录map
|
|
// 创建Graphic图层
|
graphicLayer = new mars3d.layer.GraphicLayer()
|
map.addLayer(graphicLayer)
|
|
// 加一些演示数据
|
addDemoGraphic1(graphicLayer)
|
addDemoGraphic2(graphicLayer)
|
addDemoGraphic3(graphicLayer)
|
addDemoGraphic4(graphicLayer)
|
}
|
|
/**
|
* 释放当前地图业务的生命周期函数
|
* @returns {void} 无
|
*/
|
export function onUnmounted() {
|
map = null
|
}
|
|
function addDemoGraphic1(graphicLayer) {
|
const primitive = new mars3d.graphic.CloudPrimitive({
|
position: [116.353072, 30.859836, 2000],
|
style: {
|
scale: new Cesium.Cartesian2(5500, 1000),
|
maximumSize: new Cesium.Cartesian3(50, 15, 13),
|
slice: 0.3,
|
label: {
|
text: "我是一团来自火星的云",
|
font_size: 18,
|
color: "#ffffff",
|
pixelOffsetY: -10,
|
distanceDisplayCondition: true,
|
distanceDisplayCondition_far: 90000,
|
distanceDisplayCondition_near: 0
|
}
|
},
|
attr: { remark: "示例1" }
|
})
|
graphicLayer.addGraphic(primitive)
|
}
|
|
function addDemoGraphic2(graphicLayer) {
|
const primitive = new mars3d.graphic.CloudPrimitive({
|
position: [116.332891, 30.856537, 1500],
|
style: {
|
scale: new Cesium.Cartesian2(3500, 800),
|
maximumSize: new Cesium.Cartesian3(50, 12, 15),
|
slice: 0.36
|
},
|
attr: { remark: "示例2" }
|
})
|
graphicLayer.addGraphic(primitive)
|
}
|
|
function addDemoGraphic3(graphicLayer) {
|
const primitive = new mars3d.graphic.CloudPrimitive({
|
position: [116.371649, 30.851072, 1389],
|
style: {
|
scale: new Cesium.Cartesian2(5000, 1000),
|
maximumSize: new Cesium.Cartesian3(50, 12, 15),
|
slice: 0.49
|
},
|
attr: { remark: "示例3" }
|
})
|
graphicLayer.addGraphic(primitive)
|
}
|
|
function addDemoGraphic4(graphicLayer) {
|
const primitive = new mars3d.graphic.CloudPrimitive({
|
position: new mars3d.LngLatPoint(116.350075, 30.848636, 1500),
|
style: {
|
scale: new Cesium.Cartesian2(2300, 900),
|
maximumSize: new Cesium.Cartesian3(13, 13, 13),
|
slice: 0.2
|
},
|
attr: { remark: "示例4" }
|
})
|
graphicLayer.addGraphic(primitive)
|
}
|
|
// 批量生成测试数据
|
export function addDemoGraphic(num) {
|
graphicLayer.clear()
|
|
showLoading()
|
const startTime = new Date().getTime()
|
|
let scaleX, scaleY, aspectRatio, cloudHeight, depth
|
|
for (let j = 0; j < num; ++j) {
|
const position = randomPoint()
|
|
scaleX = getRandomNumberInRange(500, 2000)
|
scaleY = scaleX / 2.0 - getRandomNumberInRange(0, scaleX / 4.0)
|
|
depth = getRandomNumberInRange(30, 50)
|
aspectRatio = getRandomNumberInRange(1.5, 2.1)
|
cloudHeight = getRandomNumberInRange(5, 20)
|
|
const primitive = new mars3d.graphic.CloudPrimitive({
|
position: position,
|
style: {
|
scale: new Cesium.Cartesian2(scaleX, scaleY),
|
maximumSize: new Cesium.Cartesian3(aspectRatio * cloudHeight, cloudHeight, depth),
|
slice: getRandomNumberInRange(0.2, 0.6)
|
}
|
})
|
graphicLayer.addGraphic(primitive)
|
}
|
|
hideLoading()
|
const endTime = new Date().getTime()
|
// 两个时间戳相差的毫秒数
|
const usedTime = (endTime - startTime) / 1000
|
// console.log(usedTime);
|
|
globalMsg("共耗时" + usedTime.toFixed(2) + "秒")
|
}
|
|
// 取区域内的随机点
|
function randomPoint() {
|
const jd = getRandomNumberInRange(116.29 * 1000, 116.39 * 1000) / 1000
|
const wd = getRandomNumberInRange(30.8 * 1000, 30.88 * 1000) / 1000
|
const height = getRandomNumberInRange(2000, 4000)
|
return new mars3d.LngLatPoint(jd, wd, height)
|
}
|
|
function getRandomNumberInRange(minValue, maxValue) {
|
return minValue + Cesium.Math.nextRandomNumber() * (maxValue - minValue)
|
}
|