import * as mars3d from "mars3d" export let map // mars3d.Map三维地图对象 // 需要覆盖config.json中地图属性参数(当前示例框架中自动处理合并) export const mapOptions = { scene: { center: { lat: 20.126986, lng: 115.78076, alt: 4758203, heading: 351, pitch: -77 } } } /** * 初始化地图业务,生命周期钩子函数(必须) * 框架在地图初始化完成后自动调用该函数 * @param {mars3d.Map} mapInstance 地图对象 * @returns {void} 无 */ export function onMounted(mapInstance) { map = mapInstance // 记录map // 创建矢量数据图层 const graphicLayer = new mars3d.layer.GraphicLayer() map.addLayer(graphicLayer) // 访问后端接口,取数据 mars3d.Util.fetchJson({ url: "//data.mars3d.cn/file/apidemo/mudi-all.json" }) .then(function (res) { createGraphics(graphicLayer, res.data) }) .catch(function (error) { console.log("加载JSON出错", error) }) } /** * 释放当前地图业务的生命周期函数 * @returns {void} 无 */ export function onUnmounted() { map = null } function createGraphics(graphicLayer, arr) { graphicLayer.bindPopup(function (event) { const item = event.graphic.attr if (!item) { return false } const inthtml = `
${item.text}
省: ${item.province}
市: ${item.city}
县/区: ${item.district}
地址: ${item.address}
视频:
` return inthtml }) // 单击事件 graphicLayer.on(mars3d.EventType.click, function (event) { console.log("你单击了", event) if (map.camera.positionCartographic.height > 90000) { const graphic = event.graphic const position = graphic.position map.flyToPoint(position, { radius: 5000, // 距离目标点的距离 duration: 4, complete: function (e) { // 飞行完成回调方法 } }) } }) for (let i = 0, len = arr.length; i < len; i++) { const item = arr[i] const position = Cesium.Cartesian3.fromDegrees(+item.lng, +item.lat, item.z || 0) const primitive = new mars3d.graphic.BillboardPrimitive({ position: position, style: { image: "img/marker/mark3.png", scale: 0.6, horizontalOrigin: Cesium.HorizontalOrigin.CENTER, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, scaleByDistance: new Cesium.NearFarScalar(1.5e2, 1.0, 8.0e6, 0.2), label: { text: item.text, font_size: 17, color: Cesium.Color.AZURE, outline: true, outlineColor: Cesium.Color.BLACK, outlineWidth: 2, horizontalOrigin: Cesium.HorizontalOrigin.LEFT, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, pixelOffset: new Cesium.Cartesian2(15, 0), // 偏移量 distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0.0, 90000) } }, attr: item }) graphicLayer.addGraphic(primitive) } }