3DTiles动态单体化
动态创建3DTiles单体化区域的外包盒模型,实现外包围盒中3Dtiles单体化效果。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>3DTiles动态单体化</title>
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no"/>
<style>
body {
margin: 0;
padding: 0;
}
#map {
position: absolute;
top: 0;
bottom: 0;
width: 100%;
}
#btn-group {
position: absolute;
top: 20px;
left: 20px;
}
</style>
<script src="https://delivery.mapmost.com/cdn/sdk/lite/v1.0.0/mapmost-lite-min.js"></script>
</head>
<body>
<div id="map"></div>
<div id="btn-group">
<button class="but" onclick="creatModel()">构建模型</button>
<button class="but" onclick="select3Dtiles()">单体化</button>
</div>
<script>
var map = new mapmost.Map({
container: 'map',
style: "<your style url>",
center: [120.74449559193792, 31.30775326748954],
zoom: 16,
pitch: 60,
userId: '***', // 授权码,此参数务必添加
});
let THREE = mapmost.THREE;
let Layer;
map.on('load', function () {
map.add3dTilesLayer({
id: 'tile-3d-layer',
data: "<your 3dtiles url>"
})
let options = {
id: 'model_id',
type: 'model',
exposure: 1.7,
center: [120.74603465203592, 31.30605899929158, 10],
callback: function (group, layer) {
Layer = layer;
}
};
map.addLayer(options);
})
function creatModel() {
let coordinate = [[120.7440396705365, 31.30775759163872], [120.74733413440896, 31.308306621332633], [120.74646526481644, 31.305344916185064], [120.74501714882791, 31.305043327408995], [120.743795300964, 31.306288341506914]]
let option = {
coordinate: coordinate,
color: '#55ff80',
baseHeight: 25,
stretchHeight: 35
}
mesh = Layer.creatClassificationBox(option);
mesh.traverse(child => {
if (child instanceof THREE.Mesh) {
child.material.transparent = true;//材质允许透明
child.material.opacity = 0.5;//材质默认透明度
}
})
}
function select3Dtiles() {
let opt = {
mesh: mesh,
color: "#ff0000",
opacity: 0.3,
}
let groups = Layer.classify3DTiles(opt);
Layer.removeModel(mesh)
}
</script>
</body>
</html>