<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <script src="http://bigemap.com/offline_data/newjunbiao/vue.js"></script> <link href="http://ua.bigemap.com:30081/bmsdk/bigemap-gl.js/v1.1.0/Widgets/widgets.css" rel="stylesheet" /> <script src="http://ua.bigemap.com:30081/bmsdk/bigemap-gl.js/v1.1.0/bigemap-gl.js"></script> <!-- elementui --> <script src="http://bigemap.com/offline_data/newjunbiao/elementui.js"></script> <link rel="stylesheet" href="http://bigemap.com/offline_data/newjunbiao/elementui.css" /> <title>白膜選中高亮</title> <style> * { margin: 0; padding: 0; } html, body { width: 100%; height: 100%; } #app { width: 100%; height: 100%; } #baseMap { width: 100%; height: 100%; } .tools { position: absolute; z-index: 9; top: 40px; right: 60px; width: 200px; height: 40px; display: flex; align-items: center; } </style> </head> <body> <div id="app"> <div id="baseMap"></div> </div> <script> let viewer = null; // 設置高亮元素 let hightLighted = { feautre: undefined, originalColor: new bmgl.Color(), }; window.onload = () => { new Vue({ el: "#app", data() { return {}; }, mounted() { this.initMap(); }, methods: { //初始化地圖 initMap() { bmgl.Config.HTTP_URL = "http://ua.bigemap.com:30081/bmsdk/"; viewer = new bmgl.Viewer("baseMap", { mapId: "bigemap.dc-satellite", infoBox: false, selectionIndicator: false, requestRenderMode: false, }); // 是否支持圖像渲染像素化處理 if ( bmgl.FeatureDetection.supportsImageRenderingPixelated() ) { viewer.resolutionScale = window.devicePixelRatio; } //開啟抗鋸齒,讓圖像更加順滑 viewer.scene.postProcessStages.fxaa.enabled = true; let handler = new bmgl.ScreenSpaceEventHandler( viewer.scene.canvas ); //設置點擊事件 handler.setInputAction(function (e) { // console.log(`eeee`, e); // 清除之前的高亮元素 if (bmgl.defined(hightLighted.feature)) { hightLighted.feature.color = hightLighted.originalColor; hightLighted.feature = undefined; } // 選擇新要素 const pickedFeature = viewer.scene.pick( e.position ); if (!bmgl.defined(pickedFeature)) { return; } // 存儲選中要素的信息 hightLighted.feature = pickedFeature; console.log(`picked`, pickedFeature); bmgl.Color.clone( pickedFeature.color, hightLighted.originalColor ); // 高亮選中元素 pickedFeature.color = bmgl.Color.RED; }, bmgl.ScreenSpaceEventType.LEFT_CLICK); this.init3dTiles(); }, async init3dTiles() { viewer.scene.globe.depthTestAgainstTerrain = false; window.tilesets = await new bmgl.BM3DTileset({ url: "/offline_data/demoData/tileset.json", }); tilesets.readyPromise .then(function (tileset) { viewer.scene.primitives.add(tileset); let default_HeadingPitchRange = new bmgl.HeadingPitchRange( 0.0, -0.5, tileset.boundingSphere.radius * 2.0 ); viewer.zoomTo( tileset, default_HeadingPitchRange ); let cartographic = bmgl.Cartographic.fromCartesian( tileset.boundingSphere.center ); let delta_lng = 0, delta_lat = 0; let surface = bmgl.Cartesian3.fromRadians( cartographic.longitude + delta_lng, cartographic.latitude + delta_lat, 0.0 ); let offset = bmgl.Cartesian3.fromRadians( cartographic.longitude + delta_lng, cartographic.latitude + delta_lat, 0.0 ); let translation = bmgl.Cartesian3.subtract( offset, surface, new bmgl.Cartesian3() ); tileset.modelMatrix = bmgl.Matrix4.fromTranslation( translation ); }) .otherwise(function (error) { console.log(error); }); }, }, beforeDestroy() { viewer.destroy(); viewer = null; }, }); }; </script> </body> </html>