import * as mars3d from "mars3d" export let map // mars3d.Map三维地图对象 let geoJsonLayer export const mapOptions = { scene: { center: { lat: 31.722018, lng: 117.251926, alt: 8378, heading: 0, pitch: -33 } } } export const eventTarget = new mars3d.BaseClass() // 事件对象,用于抛出事件到面板中 /** * 初始化地图业务,生命周期钩子函数(必须) * 框架在地图初始化完成后自动调用该函数 * @param {mars3d.Map} mapInstance 地图对象 * @returns {void} 无 */ export function onMounted(mapInstance) { map = mapInstance // 记录map map.basemap = 2017 // 切换到蓝色底图 addLayer() } /** * 释放当前地图业务的生命周期函数 * @returns {void} 无 */ export function onUnmounted() { map = null } /** * 添加合肥市建筑物和体育设施点 * @returns {void} * */ function addLayer() { const tiles3dLayer = new mars3d.layer.TilesetLayer({ name: "合肥市建筑物", url: "//data.mars3d.cn/3dtiles/jzw-hefei/tileset.json", maximumScreenSpaceError: 1, maximumMemoryUsage: 1024, marsJzwStyle: true, // 打开建筑物特效(内置Shader代码) popup: [ { field: "objectid", name: "编号" }, { field: "name", name: "名称" }, { field: "height", name: "楼高", unit: "米" } ], center: { lat: 31.841018, lng: 117.252932, alt: 1346, heading: 38, pitch: -26 }, flyTo: true }) map.addLayer(tiles3dLayer) geoJsonLayer = new mars3d.layer.GeoJsonLayer({ name: "体育设施点", url: "//data.mars3d.cn/file/geojson/hfty-point.json", symbol: { type: "billboard", styleOptions: { image: "img/marker/mark1.png", scale: 0.7, verticalOrigin: Cesium.VerticalOrigin.BOTTOM } }, popup: "all", flyTo: true }) map.addLayer(geoJsonLayer) // 绑定事件 geoJsonLayer.on(mars3d.EventType.load, function (event) { const geojsonLength = geoJsonLayer.length eventTarget.fire("geoJsonLayerLoad", { geojsonLength }) console.log("数据加载完成", event) }) } // 保存为Geojson文件 export function toGeojson() { const geojson = geoJsonLayer.toGeoJSON() mars3d.Util.downloadFile("hfty-point-含高度值.json", JSON.stringify(geojson)) } // 计算贴地高度示例代码,可以将获取到的高度更新到数据库内,后续不用重复计算。 export function getDataSurfaceHeight() { if (geoJsonLayer.length === 0) { globalMsg("数据尚未加载成功!") return } showLoading() // 对图层内的数据做贴地运算,自动得到贴地高度 geoJsonLayer.autoSurfaceHeight({ endItem: function (index, len) { const resultData = { percent: index + 1, percentAll: len } eventTarget.fire("computedResult", { resultData }) }, callback: function () { hideLoading() } }) }