(二)关于cesium地图的使用:常见功能实现及API使用

1、接(一)的flyTo方法实现,coord:经纬度,height:相机高度,time:动画事件,单位秒

flyTo(coord = [116.405285, 40.123456], height = 450000,time = 0) {
	window.viewer.camera.flyTo({
		destination: Cesium.Cartesian3.fromDegrees(
			coord[0],
			coord[1],
			height
		),
		orientation: {
			heading: Cesium.Math.toRadians(0.0),
			roll: 0.0,
		},
		duration: time,
	});
},        

2、cesium上图和下图

// 地图上点
setResourceToMap(resourceList){
	if (!window.dataSourceForCluster) {
		//定义聚合类
		window.dataSourceForCluster = new Cesium.CustomDataSource(
			"clusterSurrounding"
		);  
	}
	// marker点的聚合效果实现
	this.getDataSource();
	// 把数据上点
	let data = resourceList;
	console.log(data)
	if (data && data.list && data.list.length > 0){
		data.list.forEach((item, i) =>{
			// 创建上点对象
			let billboard = {};
			billboard = {
				position: Cesium.Cartesian3.fromDegrees(
					Number(item.longitude),
					Number(item.latitude)
				),
				ids: item.id,
				database: item,
				billboard:{
					image: xxx,// 上图的icon图片
					show: true,
					pixelOffset: Cesium.Cartesian2.ZERO,
					eyeOffset: Cesium.Cartesian3.ZERO,
					heightReference: Cesium.HeightReference.NONE,
					horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
					verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
					disableDepthTestDistance: Number.POSITIVE_INFINITY,
				},
			};
			//资源上点
			let a = window.dataSourceForCluster.entities.add(billboard);
			this.entityMarkerList.push(a);// entityMarkerList存储上图的实体对象,下图用window.viewer.entities.remove(entity实体对象)
		});
	}
},

3、聚合效果实现,需要监听地图高度变化,从而动态改变聚合效果。聚合效果如下显示。

// 点位聚合方法
getDataSource(){
	let options = {
		camera: window.viewer.scene.camera,
		canvas: window.viewer.scene.canvas,
	};
	let dataSourcePromise = window.viewer.dataSources.add(
		window.dataSourceForCluster
	);
	// 聚合类dataSourceCollection
	if (!this.dataSourceCollection) {
		this.dataSourceCollection = new Cesium.DataSourceCollection(
			"dataSourceCollection"
		);
	}
	this.dataSourceCollection.add(dataSourcePromise);
	dataSourcePromise.then(function (dataSource) {
		var pixelRange = 50;
		var minimumClusterSize = 2;
		var enabled = false;

		dataSource.clustering.enabled = enabled;
		dataSource.clustering.pixelRange = pixelRange;
		dataSource.clustering.minimumClusterSize = minimumClusterSize;

		var removeListener;

		function customStyle() {
			if (Cesium.defined(removeListener)) {
				removeListener();
				removeListener = undefined;
			} else {
				removeListener = dataSource.clustering.clusterEvent.addEventListener(
					function (clusteredEntities, cluster) {
						let len = clusteredEntities.length;

						cluster.billboard.show = true;
						cluster.billboard.id = cluster.label.ids;

						// cluster.billboard.disableDepthTestDistance = Number.POSITIVE_INFINITY;
						cluster.billboard.image = require("../assets/image/numberbg.png");// 聚合效果的背景
						cluster.billboard.width = 90;
						cluster.billboard.height = 90;

						cluster.label.show = true;
						cluster.label.text = len + "";
						cluster.label.style = Cesium.LabelStyle.FILL;
						cluster.label.fillColor = Cesium.Color.WHITE;
						cluster.label.outlineWidth = 4;
						cluster.label.horizontalOrigin =
							Cesium.HorizontalOrigin.CENTER;
						cluster.label.verticalOrigin =
							Cesium.VerticalOrigin.CENTER;
						cluster.label.disableDepthTestDistance =
							Number.POSITIVE_INFINITY;

						cluster.label.pixelOffset = new Cesium.Cartesian2(0,3);
						cluster.label.eyeOffset = new Cesium.Cartesian3(0,0,-10);

						if (len < 10) {
							cluster.label.font =
								"normal 32px MicroSoft YaHei";
						} else if (len < 100) {
							cluster.label.font =
								"normal 28px MicroSoft YaHei";
						} else if (len < 1000) {
							cluster.label.font =
								"normal 24px MicroSoft YaHei";
						} else if (len < 10000) {
							cluster.label.font =
								"normal 20px MicroSoft YaHei";
						} else {
							cluster.label.font =
								"normal 16px MicroSoft YaHei";
						}
					}
				);
			}
			// force a re-cluster with the new styling
			// var pixelRange = dataSource.clustering.pixelRange;
			// dataSource.clustering.pixelRange = 0;
			// dataSource.clustering.pixelRange = pixelRange;
		}

		// start with custom style
		customStyle();
	});
},

4、监听地图高度变化(地图事件一般定义在地图初始化中)

// 监听地图相机高度-达到相对小的高度聚合打开
addCarmeraListener(){
	let that = this;
	window.viewer.scene.camera.moveEnd.addEventListener(function () {
		if (
			that.dataSourceCollection &&
			that.dataSourceCollection.length > 0
		) {
			var currentMagnitude = window.viewer.camera.getMagnitude();
			// 6373248.307914881
			// 6373578.596961181
			let length = that.dataSourceCollection.length;
			if (currentMagnitude < 6373578.596961181) {
				for (let i = 0; i < length; i++) {
					that.dataSourceCollection.get(
						i
					).clustering.enabled = false;
				}
			} else {
				for (let i = 0; i < length; i++) {
					that.dataSourceCollection.get(
						i
					).clustering.enabled = true;
				}
			}
		}
	});
},

5、画点、线、面具体参考官方案例即可。如果区域需要立体效果可采用走廊实现(后面说)

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 雷达测控是一种常见的遥感技术,通过使用雷达设备来获取目标物体的位置信息,进而实现目标物体跟踪和测控的功能。three.js是一个强大的JavaScript库,用于在网页上创建和渲染3D图形,而Cesium是一个开源的地理信息系统库,用于创建地球表面的3D可视化。 结合three.js和Cesium,我们可以实现雷达测控的可视化效果。首先,我们需要使用Cesium创建一个地球表面的3D场景,将目标物体的位置数据与地球模型关联起来。Cesium提供了许多API实现地图的交互和展示功能,我们可以使用这些API来控制地球的旋转、缩放等操作,以及在地球表面上添加其他的标记和图层。 通过three.js的框架,我们可以创建3D模型来代表目标物体。我们可以使用three.js提供的几何体和材质来创建一个雷达设备的模型,并将其放置在Cesium创建的场景中的目标物体的位置上。这样,雷达设备的模型就能够随着地球的旋转和缩放而移动和调整位置。 除了将雷达设备的模型放置在地球表面上,我们还可以通过three.js的灯光和阴影效果,使整个场景更加逼真。我们可以通过调整灯光的位置和强度,使雷达设备的模型有更真实的光照效果,并通过阴影效果来增加场景的深度和立体感。 总之,通过结合three.js和Cesium,我们可以实现雷达测控的可视化效果,提供一个交互性强、真实感强的系统。用户可以通过控制操作来旋转、放大、缩小地球模型,并观察目标物体在地球表面的位置和状态。这样的系统可以为雷达测控提供更直观、更方便的展示和分析平台。 ### 回答2: three.js是一个用于创建和渲染3D图形的JavaScript库,而Cesium是一个用于创建和渲染地理信息的JavaScript库。结合使用这两个库可以实现雷达测控系统。 雷达测控系统中,雷达用于侦测目标物体的位置和运动状态,而测控系统则负责接收雷达的数据,并对目标进行跟踪和分析。在结合three.js和cesium之前,通常需要使用其他的工具或方法将雷达数据进行处理和可视化。但借助three.js和cesium,我们可以更加方便地实现整个雷达测控系统的可视化。 首先,我们可以使用three.js创建雷达的几何模型和纹理材质,以展示雷达设备的外观和形态。可以通过three.js的相机、光照和渲染器等功能,将雷达设备渲染成逼真的3D模型,并将其放置在场景中。 接着,我们可以使用cesium的地理坐标系功能,将雷达设备的位置精确地在地球表面上定位。通过cesium的地球模型,我们可以实现对雷达设备的地理信息的可视化显示,包括地形、地图等。可以将地球模型和雷达设备模型进行融合,形成一个整体的测控系统模型。 此外,我们可以通过three.js和cesium提供的API,将雷达数据以点云或网格的形式进行可视化。可以根据雷达测量到的目标物体的距离、速度等信息,将其以点云或网格的形式展示在场景中,并通过三维空间的位置、颜色等属性,对目标物体进行可视化分析和跟踪。 最后,借助three.js和cesium的交互功能,我们可以实现对雷达测控系统的交互操作,例如缩放、旋转、选择目标等。通过用户的交互操作,可以对目标物体进行测控系统的控制和调整,进一步提高雷达测控系统的可视化效果和用户体验。 综上所述,借助three.js和cesium,我们可以更加方便地实现雷达测控系统的可视化,包括雷达设备、地球表面的地理信息以及目标物体的可视化分析和跟踪。这种结合使用能够提高雷达测控系统的效率和准确性,同时也提升了用户对系统的理解和操作能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山为樽水为沼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值