cesium 地下物体显隐

9 篇文章 0 订阅

1.先上效果

2.上代码引入bucket.css  下载地址https://download.csdn.net/download/qq_34200979/14920919

<!DOCTYPE html>
<html lang="en">
	<head>
		<!-- Use correct character set. -->
		<meta charset="utf-8">
		<!-- Tell IE to use the latest, best version. -->
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<!-- Make the application on mobile take up the full browser screen and disable user scaling. -->
		<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
		<title>Hello World!</title>
		<script src="../Build/CesiumUnminified/Cesium.js"></script>
		<link href="../Build/Cesium/Widgets/widgets.css" rel="stylesheet" />
		<style>
			@import url(bucket.css);
		      #toolbar {
		        background: rgba(42, 42, 42, 0.8);
		        padding: 4px;
		        border-radius: 4px;
		      }
		      #toolbar input {
		        vertical-align: middle;
		        padding-top: 2px;
		        padding-bottom: 2px;
		      }
		      #toolbar .header {
		        font-weight: bold;
		      }
		    </style>
		<div id="cesiumContainer" class="fullSize"></div>
		<div id="loadingOverlay">
			<h1>Loading...</h1>
		</div>
		<div id="toolbar">
			<table>
				<tbody>
					<tr>
						<td>Translucency enabled</td>
						<td>
							<input type="checkbox" data-bind="checked: translucencyEnabled">
						</td>
					</tr>
					<tr>
						<td>Fade by distance</td>
						<td>
							<input type="checkbox" data-bind="checked: fadeByDistance">
						</td>
					</tr>
					<tr>
						<td>Show vector data</td>
						<td>
							<input type="checkbox" data-bind="checked: showVectorData">
						</td>
					</tr>
					<tr>
						<td>Alpha</td>
						<td>
							<input type="range" min="0.0" max="1.0" step="0.1" data-bind="value: alpha, valueUpdate: 'input'">
							<input type="text" size="5" data-bind="value: alpha">
						</td>
					</tr>
				</tbody>
			</table>
		</div>


		<script>
			var viewer = new Cesium.Viewer("cesiumContainer", {
				terrainProvider: Cesium.createWorldTerrain(),
			});

			//获取场景
			var scene = viewer.scene;


			//获取或设置深度测试椭球体。
			var globe = scene.globe;

			//screenSpaceCameraController获取用于摄像机输入处理的控制器 
			//enableCollisionDetectio启用或禁用摄影机与地形的碰撞检测,为true不会进入地下
			scene.screenSpaceCameraController.enableCollisionDetection = false;
			//translucency 控制全局半透明性的属性。frontFaceAlphaByDistance表示标量值在视角空间中的近距离和远距离处的下限和上限。
			globe.translucency.frontFaceAlphaByDistance = new Cesium.NearFarScalar(
				400.0, //摄像机范围的下限。
				0.0, //摄像机范围下限的值。
				800.0, //摄像机范围的上限。
				1.0 //摄像机范围上限的值。
			);

			var longitude = -3.82518;
			var latitude = 53.11728;
			var height = 72.8;
			var position = Cesium.Cartesian3.fromDegrees(
				longitude,
				latitude,
				height
			);
			var url = "ParcLeadMine.glb";

			var entity = viewer.entities.add({
				name: url,
				position: position,
				model: {
					uri: url,
				},
			});


			//斑点图
			var polygon = viewer.entities.add({
				polygon: {
					//PolygonHierarchy定义多边形及其线性环的层次结构。本身也可以具有嵌套内部多边形。
					hierarchy: new Cesium.PolygonHierarchy(
						//fromDegreesArrayHeights经度,纬度和高度值的列表。值交替显示[经度,纬度,高度,经度,纬度,高度...]。
						Cesium.Cartesian3.fromDegreesArrayHeights([
							-3.8152789692233817,
							53.124521420389996,
							200.20779492422255,
							-3.8165955002619016,
							53.12555934545405,
							205.85834336951655,
							-3.8201599842222054,
							53.12388420656903,
							230.82362697069453,
							-3.8198667503545027,
							53.123748567587455,
							225.53297006293968,
							-3.8190548496317476,
							53.1240486000822,
							221.82677773619432,
							-3.817536387097508,
							53.122763476393764,
							209.94136782255705,
							-3.8169125359199336,
							53.12285547981627,
							210.96626238861327,
							-3.8166873871853073,
							53.12299403424474,
							211.02223937734595,
							-3.8163695374580873,
							53.12300505277307,
							211.25942926271824,
							-3.8162743040622313,
							53.12281471203994,
							212.35109129094147,
							-3.8159746138174193,
							53.12280996651767,
							214.87977416348798,
							-3.815429896849304,
							53.1236135347983,
							209.72496223706005,
						])
					),
					material: Cesium.Color.LIME.withAlpha(0.5),
					classificationType: Cesium.ClassificationType.TERRAIN,
				},
			});
			//线
			var polyline = viewer.entities.add({
				polyline: {
					positions: Cesium.Cartesian3.fromDegreesArrayHeights([
						-3.8098444201746373,
						53.1190304262546,
						286.1875170545701,
						-3.8099801237370663,
						53.119539531697576,
						288.7733884242394,
						-3.810165716635671,
						53.11979180761567,
						290.9294630315179,
						-3.8104840812145357,
						53.12007534956926,
						292.6392327626228,
						-3.8105689502073554,
						53.120259094792196,
						292.222036965774,
						-3.811027311824268,
						53.120409248874196,
						289.61356291617307,
						-3.811530473295422,
						53.12063281057782,
						284.01098712543586,
						-3.8120545342562693,
						53.120742539082435,
						280.118191867836,
						-3.812444493044727,
						53.120813289759326,
						276.0400221387852,
						-3.812779626711285,
						53.12094275348024,
						271.1187399484896,
						-3.8133560322579494,
						53.12104757866638,
						263.3495497598578,
						-3.8137266493960085,
						53.12120789867194,
						257.73878624321316,
						-3.8142552291751133,
						53.121321248522904,
						251.87265828778177,
						-3.814322603988525,
						53.12174170121103,
						238.7082749547689,
						-3.8143764268391314,
						53.1219492923309,
						235.0371831845662,
						-3.8148156514145786,
						53.12210819668669,
						230.2458816627467,
						-3.8155394721966163,
						53.1222990144029,
						221.33319292262706,
						-3.8159828072920927,
						53.12203093429715,
						223.66664756982703,
						-3.816678108944717,
						53.12183939425214,
						223.8787312412801,
						-3.817466081093726,
						53.121751900508535,
						224.52293229989735,
						-3.8183082996527955,
						53.12173266141031,
						223.3672181535749,
					]),
					width: 8,
					material: new Cesium.PolylineOutlineMaterialProperty({
						color: Cesium.Color.YELLOW,
						outlineWidth: 2,
						outlineColor: Cesium.Color.BLACK,
					}),
					clampToGround: true,
				},
			});

			var viewModel = {
				translucencyEnabled: true,
				fadeByDistance: true,
				showVectorData: false,
				alpha: 0.5,
			};

			Cesium.knockout.track(viewModel);
			var toolbar = document.getElementById("toolbar");
			Cesium.knockout.applyBindings(viewModel, toolbar);
			for (var name in viewModel) {
				if (viewModel.hasOwnProperty(name)) {
					Cesium.knockout.getObservable(viewModel, name).subscribe(update);
				}
			}

			function update() {
				globe.translucency.enabled = viewModel.translucencyEnabled;

				var alpha = Number(viewModel.alpha);
				alpha = !isNaN(alpha) ? alpha : 1.0;
				alpha = Cesium.Math.clamp(alpha, 0.0, 1.0);

				globe.translucency.frontFaceAlphaByDistance.nearValue = alpha;
				globe.translucency.frontFaceAlphaByDistance.farValue = viewModel.fadeByDistance ?
					1.0 :
					alpha;

				polygon.show = viewModel.showVectorData;
				polyline.show = viewModel.showVectorData;
			}
			update();
			//设置相机的位置,方向和变换。
			viewer.scene.camera.setView({
				//目的地
				destination: new Cesium.Cartesian3(
					3826465.9884728403,
					-254831.02751468265,
					5081387.671561018
				),
				//方向
				orientation: new Cesium.HeadingPitchRoll(
					3.3889450556243754,
					-0.5276382514771969,
					6.282272566663295
				),
				//表示飞行完成后摄像机将位于的参考帧的变换矩阵。
				//endTransform: Cesium.Matrix4.IDENTITY,
			});
			//将相机从当前位置移动到新位置
			viewer.scene.camera.flyTo({
				//目的地
				destination: new Cesium.Cartesian3(
					3827270.552916987,
					-255123.18143177085,
					5079147.091351856
				),
				//方向
				orientation: new Cesium.HeadingPitchRoll(
					3.2624281242239963,
					-0.22213535190506972,
					6.282786783842843
				),
				//飞行持续时间
				duration: 5.0,
			});
		</script>
		</body>

</html>

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值