import * as mars3d from "mars3d"
|
|
export let map // mars3d.Map三维地图对象
|
export let graphicLayer // 矢量图层对象
|
|
// 需要覆盖config.json中地图属性参数(当前示例框架中自动处理合并)
|
export const mapOptions = {
|
scene: {
|
center: { lat: 31.623244, lng: 123.508771, alt: 345435, heading: 0, pitch: -48 }
|
// cameraController: {
|
// maximumZoomDistance: 500000000,
|
// },
|
},
|
control: {
|
clockAnimate: true, // 时钟动画控制(左下角)
|
timeline: true,
|
compass: { top: "10px", left: "5px" }
|
}
|
}
|
|
export const eventTarget = new mars3d.BaseClass()
|
|
/**
|
* 初始化地图业务,生命周期钩子函数(必须)
|
* 框架在地图初始化完成后自动调用该函数
|
* @param {mars3d.Map} mapInstance 地图对象
|
* @returns {void} 无
|
*/
|
export function onMounted(mapInstance) {
|
map = mapInstance // 记录首次创建的map
|
map.toolbar.style.bottom = "55px" // 修改toolbar控件的样式
|
|
// url传入模型地址
|
const type = mars3d.Util.getRequestByName("data")
|
switch (type) {
|
case "feiji":
|
showAircraft()
|
break
|
case "chuanbo":
|
showShip()
|
break
|
case "huojian":
|
showRocket()
|
break
|
default:
|
showAircraft()
|
break
|
}
|
}
|
|
/**
|
* 释放当前地图业务的生命周期函数
|
* @returns {void} 无
|
*/
|
export function onUnmounted() {
|
map = null
|
}
|
|
function removeLayer() {
|
map.trackedEntity = null
|
if (graphicLayer) {
|
map.removeLayer(graphicLayer, true)
|
graphicLayer = null
|
}
|
}
|
|
// 示例:
|
export function showAircraft() {
|
removeLayer()
|
|
graphicLayer = new mars3d.layer.CzmlLayer({
|
name: "飞行编队",
|
url: "//data.mars3d.cn/file/czml/flight.czml",
|
popup: "all",
|
flyTo: true
|
})
|
map.addLayer(graphicLayer)
|
|
// 绑定事件
|
graphicLayer.on(mars3d.EventType.load, function (data) {
|
console.log("数据加载完成", data)
|
eventTarget.fire("loadGraphicLayer", { data })
|
})
|
graphicLayer.on(mars3d.EventType.click, function (event) {
|
console.log("单击了图层", event)
|
})
|
}
|
|
// 示例:
|
export function showCar() {
|
removeLayer()
|
|
map.setCameraView({ lat: 40.893923, lng: 121.917192, alt: 691, heading: 64, pitch: -46 })
|
|
graphicLayer = new mars3d.layer.CzmlLayer({
|
name: "汽车",
|
url: "//data.mars3d.cn/file/czml/car.czml"
|
// flyTo: true,
|
})
|
map.addLayer(graphicLayer)
|
|
// 绑定事件
|
graphicLayer.on(mars3d.EventType.load, function (data) {
|
console.log("数据加载完成", data)
|
eventTarget.fire("loadGraphicLayer", { data })
|
})
|
graphicLayer.on(mars3d.EventType.click, function (event) {
|
console.log("单击了图层", event)
|
})
|
}
|
|
// 示例:
|
export function showShip() {
|
removeLayer()
|
|
graphicLayer = new mars3d.layer.CzmlLayer({
|
name: "船舶编队",
|
url: "//data.mars3d.cn/file/czml/ship.czml",
|
popup: "all",
|
flyTo: true
|
})
|
map.addLayer(graphicLayer)
|
|
// 绑定事件
|
graphicLayer.on(mars3d.EventType.load, function (data) {
|
console.log("数据加载完成", data)
|
eventTarget.fire("loadGraphicLayer", { data })
|
})
|
graphicLayer.on(mars3d.EventType.click, function (event) {
|
console.log("单击了图层", event)
|
})
|
}
|
|
// 示例:
|
export function showBDSatellite() {
|
removeLayer()
|
|
// 更新地球参数
|
map.setSceneOptions({
|
cameraController: {
|
maximumZoomDistance: 500000000
|
}
|
})
|
|
graphicLayer = new mars3d.layer.CzmlLayer({
|
name: "北斗卫星",
|
url: "//data.mars3d.cn/file/czml/satellite.czml",
|
center: { lng: 10, lat: 111.833884, z: 150000000, heading: 0, pitch: -90, roll: 0 },
|
flyTo: true
|
})
|
map.addLayer(graphicLayer)
|
|
// 绑定事件
|
graphicLayer.on(mars3d.EventType.load, function (data) {
|
console.log("数据加载完成", data)
|
|
eventTarget.fire("loadGraphicLayer", { data })
|
})
|
graphicLayer.on(mars3d.EventType.click, function (event) {
|
console.log("单击了图层", event)
|
})
|
}
|
|
export function showSatellite() {
|
removeLayer()
|
|
// 更新地球参数
|
map.setSceneOptions({
|
cameraController: {
|
maximumZoomDistance: 500000000
|
}
|
})
|
|
graphicLayer = new mars3d.layer.CzmlLayer({
|
name: "卫星",
|
url: "//data.mars3d.cn/file/czml/satellite-simple.czml",
|
center: { lat: -20.236138, lng: -144.262661, alt: 41875827, heading: 339, pitch: -90 },
|
flyTo: true
|
})
|
map.addLayer(graphicLayer)
|
|
// 绑定事件
|
graphicLayer.on(mars3d.EventType.load, function (data) {
|
console.log("数据加载完成", data)
|
|
eventTarget.fire("loadGraphicLayer", { data })
|
})
|
graphicLayer.on(mars3d.EventType.click, function (event) {
|
console.log("单击了图层", event)
|
})
|
}
|
|
// 示例:
|
export function showRocket() {
|
removeLayer()
|
|
map.basemap = "ArcGIS影像"
|
map.setCameraView({ lat: 28.561843, lng: -80.577575, alt: 630, heading: 359, pitch: -85 })
|
|
graphicLayer = new mars3d.layer.CzmlLayer({
|
name: "火箭发射",
|
url: "//data.mars3d.cn/file/czml/space.czml",
|
flyTo: true
|
})
|
map.addLayer(graphicLayer)
|
|
// 绑定事件
|
graphicLayer.on(mars3d.EventType.load, function (data) {
|
console.log("数据加载完成", data)
|
// 火星发射时,锁定火箭模型对象
|
map.trackedEntity = data.dataSource.entities.getById("Vulcan")
|
|
eventTarget.fire("loadGraphicLayer", { data })
|
})
|
graphicLayer.on(mars3d.EventType.click, function (event) {
|
console.log("单击了图层", event)
|
})
|
}
|
|
// 示例:
|
export function showFireDrill() {
|
removeLayer()
|
|
map.setCameraView({ lat: 32.891559, lng: 117.360875, alt: 378, heading: 18, pitch: -62 })
|
|
graphicLayer = new mars3d.layer.CzmlLayer({
|
name: "消防演练",
|
url: "//data.mars3d.cn/file/czml/firedrill.czml"
|
// flyTo: true
|
})
|
map.addLayer(graphicLayer)
|
|
// 绑定事件
|
graphicLayer.on(mars3d.EventType.load, function (data) {
|
console.log("数据加载完成", data)
|
eventTarget.fire("loadGraphicLayer", { data })
|
})
|
graphicLayer.on(mars3d.EventType.click, function (event) {
|
console.log("单击了图层", event)
|
})
|
}
|