import * as mars3d from "mars3d" export let map // mars3d.Map三维地图对象 let graphicLayer // 矢量图层对象 let pointsLayer export const mapOptions = { scene: { center: { lat: 31.255881, lng: 117.271026, alt: 60133, heading: 0, pitch: -46 } } } /** * 初始化地图业务,生命周期钩子函数(必须) * 框架在地图初始化完成后自动调用该函数 * @param {mars3d.Map} mapInstance 地图对象 * @returns {void} 无 */ export function onMounted(mapInstance) { map = mapInstance // 记录map // 创建矢量数据图层 graphicLayer = new mars3d.layer.GraphicLayer() map.addLayer(graphicLayer) // 点矢量数据图层 pointsLayer = new mars3d.layer.GraphicLayer() map.addLayer(pointsLayer) } /** * 释放当前地图业务的生命周期函数 * @returns {void} 无 */ export function onUnmounted() { map = null } const bbox = [116.984788, 31.625909, 117.484068, 32.021504] // 生成50个随机点 export function randomPoints() { clearlayer() const points = turf.randomPoint(50, { bbox: bbox }) // 50个随机点 points.features.forEach((e, index) => { const position = e.geometry.coordinates const primitive = new mars3d.graphic.BillboardPrimitive({ position: position, style: { image: "img/marker/mark3.png", scale: 1, horizontalOrigin: Cesium.HorizontalOrigin.CENTER, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, scaleByDistance: new Cesium.NearFarScalar(10000, 1.0, 500000, 0.1), clampToGround: false }, popup: "第" + index + "个" }) pointsLayer.addGraphic(primitive) }) } // 计算包围面 export function convexPolygon() { graphicLayer.clear() const points = pointsLayer.toGeoJSON() if (points.features.length === 0) { globalMsg("请先创建原始数据") return } const hull = turf.convex(points) const convexPoints = hull.geometry.coordinates // 外包围面; const polygonGraphic = new mars3d.graphic.PolygonEntity({ positions: convexPoints, style: { color: "#00ffff", opacity: 0.2, clampToGround: false } }) graphicLayer.addGraphic(polygonGraphic) } // 泰森多边形 export function voronoiPolygon() { graphicLayer.clear() const points = pointsLayer.toGeoJSON() if (points.features.length === 0) { globalMsg("请先创建原始数据") return } const options = { bbox: bbox } const voronoiPolygons = turf.voronoi(points, options) voronoiPolygons.features.forEach((e, index) => { const position = e.geometry.coordinates const voronoiPolygon = new mars3d.graphic.PolygonEntity({ positions: position, style: { randomColor: true, // 随机色 opacity: 0.5, clampToGround: false }, popup: "第" + index + "个" }) graphicLayer.addGraphic(voronoiPolygon) }) } // 计算TIN多边形 export function tinPolygon() { graphicLayer.clear() const points = pointsLayer.toGeoJSON() if (points.features.length === 0) { globalMsg("请先创建原始数据") return } for (let i = 0; i < points.features.length; i++) { points.features[i].properties.z = ~~(Math.random() * 9) } const tin = turf.tin(points, "z") tin.features.forEach((e, index) => { const position = e.geometry.coordinates // TIN多边形 const tinPolygon = new mars3d.graphic.PolygonEntity({ positions: position, style: { randomColor: true, // 随机色 opacity: 0.5, outline: true, outlineColor: "rgb(3, 4, 5,0.2)", outlineWidth: 2, clampToGround: false }, popup: "第" + index + "个" }) graphicLayer.addGraphic(tinPolygon) }) } // 清除所有矢量图层 export function clearlayer() { graphicLayer.clear() pointsLayer.clear() }