<!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-tian-w-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>