import * as mars3d from "mars3d" export let map // mars3d.Map三维地图对象 let graphicLayer // 矢量图层对象 let polygonsLayer export const mapOptions = { scene: { center: { lat: 31.771917, lng: 117.373238, alt: 34263, heading: 336, pitch: -69 }, fxaa: true } } /** * 初始化地图业务,生命周期钩子函数(必须) * 框架在地图初始化完成后自动调用该函数 * @param {mars3d.Map} mapInstance 地图对象 * @returns {void} 无 */ export function onMounted(mapInstance) { map = mapInstance // 记录map // 创建矢量数据图层 graphicLayer = new mars3d.layer.GraphicLayer() map.addLayer(graphicLayer) polygonsLayer = new mars3d.layer.GraphicLayer() map.addLayer(polygonsLayer) const graphic = new mars3d.graphic.PolygonEntity({ positions: [ [117.271662, 31.870639, 21.49], [117.290605, 31.871517, 19.47], [117.302056, 31.858145, 16.27], [117.299439, 31.847545, 14.77], [117.267705, 31.8491, 22.11] ], style: { color: "#3388ff", opacity: 0.5, outline: true, outlineWidth: 2, outlineColor: "#ffffff" } }) graphicLayer.addGraphic(graphic) } /** * 释放当前地图业务的生命周期函数 * @returns {void} 无 */ export function onUnmounted() { map = null } // 绘制面 export function drawPolygon() { // 开始绘制 graphicLayer.startDraw({ type: "polygon", style: { color: getColor(), opacity: 0.5, outline: true, outlineWidth: 2, outlineColor: "#ffffff" }, success: (graphic) => { graphicLayer.clear() polygonsLayer.clear() graphicLayer.addGraphic(graphic) } }) } // 旋转面 export function spinPolygons(angle) { clearGraphic() const graphic = graphicLayer.getGraphics()[0] const poly = graphic.toGeoJSON({ closure: true }) const centerPoint = mars3d.LngLatPoint.fromCartesian(graphic.center).toArray() // 围绕执行旋转的点 // truf旋转操作 const rotatedPoly = turf.transformRotate(poly, angle, { pivot: centerPoint }) const spinGraphic = mars3d.Util.geoJsonToGraphics(rotatedPoly, { style: { color: "#ff0000", opacity: 0.5, outline: true, outlineWidth: 2, outlineColor: "#ffffff" } }) polygonsLayer.addGraphic(spinGraphic) } // 平移面 export function translationPolygons(offset) { clearGraphic() const graphic = graphicLayer.getGraphics()[0] const poly = graphic.toGeoJSON({ closure: true }) // truf平移操作 const rotatedPoly = turf.transformTranslate(poly, offset, 10) const spinGraphic = mars3d.Util.geoJsonToGraphics(rotatedPoly, { style: { color: "#ff0000", opacity: 0.5, outline: true, outlineWidth: 2, outlineColor: "#ffffff" } }) polygonsLayer.addGraphic(spinGraphic) } // 缩放面 export function zoomPolygons(scale) { clearGraphic() if (scale === 0) { return } const graphic = graphicLayer.getGraphics()[0] const poly = graphic.toGeoJSON({ closure: true }) // truf缩放操作 const rotatedPoly = turf.transformScale(poly, scale) const spinGraphic = mars3d.Util.geoJsonToGraphics(rotatedPoly, { style: { color: "#ff0000", opacity: 0.5, outline: true, outlineWidth: 2, outlineColor: "#ffffff" } }) polygonsLayer.addGraphic(spinGraphic) } function clearGraphic() { polygonsLayer.clear() graphicLayer.endDraw() } // 颜色 let index = 0 const colors = ["#99CCCC", "#66FF66", "#FF6666", "#00CCFF", "#00FF33", "#CC0000", "#CC00CC", "#CCFF00", "#0000FF"] function getColor() { const i = index++ % colors.length return colors[i] }