import * as mars3d from "mars3d"
export let map // mars3d.Map三维地图对象
let drawLayer
let measure
// 需要覆盖config.json中地图属性参数(当前示例框架中自动处理合并)
export const mapOptions = {
control: {
homeButton: true,
sceneModePicker: true,
navigationHelpButton: true,
infoBox: false,
vrButton: true,
fullscreenButton: true,
geocoder: true,
baseLayerPicker: true,
clockAnimate: true, // 时钟动画控制(左下角)
timeline: true, // 是否显示时间线控件
contextmenu: { hasDefault: true }, // 涉及到多语言的模块:右键菜单
compass: { top: "10px", left: "5px" },
distanceLegend: { left: "180px", bottom: "30px" },
locationBar: {
fps: true,
template:
"
lng:{lng}
lat:{lat}
alt:{alt} m
level:{level}
heading:{heading}°
pitch:{pitch}°
cameraHeight:{cameraHeight}m
"
}
},
lang: mars3d.LangType.EN // 使用英文
}
export const eventTarget = new mars3d.BaseClass()
/**
* 初始化地图业务,生命周期钩子函数(必须)
* 框架在地图初始化完成后自动调用该函数
* @param {mars3d.Map} mapInstance 地图对象
* @returns {void} 无
*/
export function onMounted(mapInstance) {
map = mapInstance
map.toolbar.style.bottom = "55px" // 修改toolbar控件的样式
// 涉及到多语言的模块:标绘提示
drawLayer = new mars3d.layer.GraphicLayer({
hasEdit: true,
isAutoEditing: true // 绘制完成后是否自动激活编辑
})
map.addLayer(drawLayer)
drawLayer.bindContextMenu([
{
text: map.getLangText("_删除"),
icon: "fa fa-trash-o",
show: (event) => {
const graphic = event.graphic
if (!graphic || graphic.isDestroy) {
return false
} else {
return true
}
},
callback: function (e) {
const graphic = e.graphic
if (!graphic) {
return
}
const parent = graphic._parent // 右击是编辑点时
drawLayer.removeGraphic(graphic)
if (parent) {
drawLayer.removeGraphic(parent)
}
}
}
])
// 涉及到多语言的模块:图上量算
measure = new mars3d.thing.Measure({
// 可设置文本样式
label: {
color: "#ffffff",
font_family: "楷体",
font_size: 20,
background: false
}
})
map.addThing(measure)
}
/**
* 释放当前地图业务的生命周期函数
* @returns {void} 无
*/
export function onUnmounted() {
map = null
}
export function distance() {
drawLayer.stopDraw()
measure.distance()
}
export function area() {
drawLayer.stopDraw()
measure.area()
}
export function height() {
drawLayer.stopDraw()
measure.heightTriangle()
}
export function coordinate() {
drawLayer.stopDraw()
measure.point()
}
export function angle() {
drawLayer.stopDraw()
measure.angle()
}
/**
*开始标绘
*
* @export startDraw
* @param { string } type 矢量数据类型
* @returns {void} 无
*/
export function startDraw(type) {
measure.stopDraw()
drawLayer.startDraw({
type: type,
style: {
color: "#00ffff",
opacity: 0.6
}
})
}