import * as mars3d from "mars3d"
|
|
export let map // mars3d.Map三维地图对象
|
let graphicLayer
|
let selectedView
|
|
// 事件对象,用于抛出事件给面板
|
export const eventTarget = new mars3d.BaseClass()
|
|
export const mapOptions = {
|
scene: {
|
center: { lat: 28.440007, lng: 119.48322, alt: 424, heading: 282, pitch: -56 },
|
fxaa: true, // 不开启抗锯齿,可视域会闪烁
|
globe: {
|
depthTestAgainstTerrain: true // 不加无法投射到地形上
|
}
|
}
|
}
|
|
/**
|
* 初始化地图业务,生命周期钩子函数(必须)
|
* 框架在地图初始化完成后自动调用该函数
|
* @param {mars3d.Map} mapInstance 地图对象
|
* @returns {void} 无
|
*/
|
export function onMounted(mapInstance) {
|
map = mapInstance // 记录map
|
|
globalNotify("已知问题提示", `(1) 平面上视域内可能存在锯齿。(2) 视角变化时可能有锯齿抖动。`)
|
|
// 添加参考三维模型
|
const tiles3dLayer = new mars3d.layer.TilesetLayer({
|
url: "//data.mars3d.cn/3dtiles/qx-shequ/tileset.json",
|
position: { alt: 11.5 },
|
maximumScreenSpaceError: 1,
|
maximumMemoryUsage: 1024,
|
dynamicScreenSpaceError: true,
|
cullWithChildrenBounds: false,
|
luminanceAtZenith: 0.6
|
})
|
map.addLayer(tiles3dLayer)
|
|
// 创建Graphic图层
|
graphicLayer = new mars3d.layer.GraphicLayer()
|
map.addLayer(graphicLayer)
|
|
// 加一些演示数据
|
addDemoGraphic1()
|
}
|
|
/**
|
* 释放当前地图业务的生命周期函数
|
* @returns {void} 无
|
*/
|
export function onUnmounted() {
|
map = null
|
}
|
|
function addDemoGraphic1() {
|
const viewShed = new mars3d.graphic.ViewShed({
|
position: [119.480878, 28.440286, 149],
|
style: {
|
angle: 60,
|
angle2: 45,
|
distance: 80,
|
heading: 44,
|
pitch: -12,
|
addHeight: 0.5
|
}
|
})
|
graphicLayer.addGraphic(viewShed)
|
|
selectedView = viewShed // 记录下
|
|
eventTarget.fire("addViewShedValue", {
|
value: {
|
cameraAngle: selectedView.angle,
|
cameraAngle2: selectedView.angle2,
|
heading: selectedView.heading,
|
pitchValue: selectedView.pitch,
|
distanceValue: selectedView.distance,
|
opcity: selectedView.opacity,
|
showFrustum: selectedView.showFrustum
|
}
|
})
|
}
|
|
// 添加可视域
|
export function addViewShed(data) {
|
// 开始绘制
|
graphicLayer.startDraw({
|
type: "viewShed",
|
style: {
|
angle: data.cameraAngle,
|
angle2: data.cameraAngle2,
|
showFrustum: data.showFrustum,
|
addHeight: 0.5 // 在坐标点增加的高度值,规避遮挡,效果更友好
|
},
|
success: function (graphic) {
|
console.log("绘制完成", graphic)
|
|
selectedView = graphic // 记录下
|
|
eventTarget.fire("addViewShedValue", {
|
value: {
|
cameraAngle: selectedView.angle,
|
cameraAngle2: selectedView.angle2,
|
heading: selectedView.heading,
|
pitchValue: selectedView.pitch,
|
distanceValue: selectedView.distance,
|
opcity: selectedView.opacity,
|
showFrustum: selectedView.showFrustum
|
}
|
})
|
}
|
})
|
}
|
|
export function clear() {
|
graphicLayer.clear()
|
selectedView = null
|
}
|
|
export function selCamera() {
|
if (!selectedView) {
|
return
|
}
|
|
map.graphicLayer.startDraw({
|
type: "point",
|
success: (graphic) => {
|
const point = graphic.point
|
graphic.remove() // 删除绘制的点
|
|
selectedView.position = point
|
}
|
})
|
}
|
|
// 修改水平角度
|
export function onChangeAngle(value) {
|
if (selectedView) {
|
selectedView.angle = value
|
}
|
}
|
|
// 修改垂直角度
|
export function onChangeAngle2(value) {
|
if (selectedView) {
|
selectedView.angle2 = value
|
}
|
}
|
|
// 修改投射距离
|
export function onChangeDistance(value) {
|
if (selectedView) {
|
selectedView.distance = value
|
}
|
}
|
|
// 修改四周距离 value 修改后的数值
|
export function onChangeHeading(value) {
|
if (selectedView) {
|
selectedView.heading = value
|
}
|
}
|
|
// 修改俯仰角数值 value 修改后的数值
|
export function onChangePitch(value) {
|
if (selectedView) {
|
selectedView.pitch = value
|
}
|
}
|
|
// 线框是否显示 isCheckde 修改后的数值
|
export function showFrustum(isCheckde) {
|
if (selectedView) {
|
selectedView.showFrustum = isCheckde
|
}
|
}
|
|
// 修改视频的透明度 opacity 透明度数值
|
export function onChangeOpacity(opacity) {
|
if (selectedView) {
|
selectedView.opacity = opacity
|
}
|
}
|
|
// 四周视角选点
|
export function onClickSelView() {
|
if (!selectedView) {
|
return
|
}
|
|
map.graphicLayer.startDraw({
|
type: "point",
|
success: (graphic) => {
|
const point = graphic.point
|
graphic.remove() // 删除绘制的点
|
|
selectedView.targetPosition = point
|
}
|
})
|
}
|