Cesium学习(四):运动中的实体对象

匿名 (未验证) 提交于 2019-12-02 23:38:02
// 运动中的实体对象初始化方法 	function initRunEntity(){ 		// 车辆默认不运行 		viewer.clock.shouldAnimate = false; 		 		// 创建czml文件;得到czml数据源 		var czml = getCzmlDataSource(); 		 		// 动态添加点到czml的路径中 		// addPointForCzml(czml); 		 		// 加载提供的URL或CZML对象,替换任何现有数据。 		var dataSourcePromise = Cesium.CzmlDataSource.load(czml); 		viewer.dataSources.add(dataSourcePromise); 		// 3、添加czml到三维球上 		viewer.zoomTo(dataSourcePromise); 		 		// 位置属性 		var positionProperty; 		// 实体对象 		var vehicleEntity; 		viewer.dataSources.add(dataSourcePromise).then(function(dataSource) { 		    vehicleEntity = dataSource.entities.getById('Vehicle'); 		    positionProperty = vehicleEntity.position; 			// 带着相机跟踪车辆。 			if (!viewer.trackedEntity && viewer.clock.shouldAnimate) { 			   // viewer.trackedEntity = vehicleEntity; 			} 		}); 		 		// 渲染监听 		viewer.scene.postRender.addEventListener(function() { 			// 带着相机跟踪车辆。 			if (!viewer.trackedEntity && viewer.clock.shouldAnimate) { 			    // viewer.trackedEntity = vehicleEntity; 			} 			 			// 得到实体对象的地理坐标位置 			var position = positionProperty.getValue(viewer.clock.currentTime); 			// 判断车辆是否在运行中(需要引入turf.min.js) 			if(viewer.clock.shouldAnimate){ 				var cartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(position); 				// console.log(cartographic); 				// console.log(position); 				// 根据地理坐标得到经纬度 				var cartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(position); 				var longitude = Cesium.Math.toDegrees(cartographic.longitude); 				var latitude = Cesium.Math.toDegrees(cartographic.latitude).toFixed(3); 				 				// 判断矩形区域是否存在 				if(polyArray.length > 0){ 					// 判断点是否在区域内部 					for(i = 0; i < polyArray.length; i++){ 						var pt = turf.point([longitude, latitude]); 						var poly = turf.polygon([polyArray[i]]); 						var includeFlag = turf.booleanPointInPolygon(pt, poly); 						if(includeFlag){ 							break; 						} 					} 					// 汽车行驶到某一区域内标识 					if(includeFlag){ 						// 模型颜色 						vehicleEntity.model.color = Cesium.Color.fromAlpha(Cesium.Color.RED); 					}else{ 						// 模型颜色 						vehicleEntity.model.color = Cesium.Color.fromAlpha(Cesium.Color.ALICEBLUE); 					} 				} 			} 		}); 	} 	 	// 动态添加点到czml的路径中 	function addPointForCzml(czml){ 		var i = 30.95759870500004; 		var a = 60; 		// 延迟加载每隔10秒钟添加一个点 		setInterval(function() { 		    i += 0.0001; 		    a += 10; 			// 路径最后添加节点 		    czml[1].position.cartographicDegrees.push(a, 118.87841653400005, i, 0); 			 			// 处理添加了点之后,界面上并没有体现出来的问题 			// 修改当前时间 		    czml[0].clock.currentTime = viewer.clock.currentTime.toString(); 			// 清空之前数据,否则数据越来越多 		    viewer.entities.removeAll(); 			// 重新添加修改后的数据 		    viewer.dataSources.add(Cesium.CzmlDataSource.load(czml)); 		}, 1000); 	} 	 	// 封装czml数据源 	function getCzmlDataSource(){ 		var czml = [{ 		    "id": "document", 		    "name": "polygon", 		    "version": "1.0", 		    "clock": { 		        "interval": "2012-08-04T16:00:00Z/2012-08-04T16:02:00Z", 		        "currentTime": "2012-08-04T16:00:00Z", 		        "multiplier": 10 		    } 		}, { 		    "id": "Vehicle", 		    "name": "Red box with black outline", 		    "availability": "2012-08-04T16:00:00Z/2012-08-04T16:02:00Z", 		    "path": { 		        "material": { 		            "solidColor": { 		                "color": { 		                    "interval": "2012-08-04T16:00:00Z/2012-08-04T18:00:00Z", 		                    "rgba": [255,255,0,255] 		                } 		            } 		        }, 		        "width": [{ 		            "interval": "2012-08-04T16:00:00Z/2012-08-04T18:00:00Z", 		            "number": 3.0 		        }], 		        "show": [{ 		            "interval": "2012-08-04T16:00:00Z/2012-08-04T18:00:00Z", 		            "boolean": true 		        }] 		    }, 		    "position": { 		        "interpolationAlgorithm": "LAGRANGE", 		        "interpolationDegree": 1, 		        "epoch": "2012-08-04T16:00:00Z", 		        "cartographicDegrees": [ 					0.0, 109.740, 19.997, 0.0, 					10.0, 109.750, 19.997, 0.0, 					20.0, 109.760, 19.997, 0.0, 					30.0, 109.770, 19.997, 0.0, 					40.0, 109.780, 19.997, 0.0, 					50.0, 109.790, 19.997, 0.0, 		            60.0, 109.800, 19.997, 0.0, 					70.0, 109.810, 19.997, 0.0, 					80.0, 109.820, 19.997, 0.0, 					90.0, 109.830, 19.997, 0.0, 					100.0, 109.840, 19.997, 0.0, 					110.0, 109.850, 19.997, 0.0, 					120.0, 109.860, 19.997, 0.0 		        ] 		    }, 			"model": { 				"gltf" : "./models/CesiumMilkTruck/CesiumMilkTruck.glb", 				"minimumPixelSize":100, 				"maximumScale":50 			}, 			"orientation" : { 				"velocityReference": "#position" 			}, 		}]; 		return czml; 	} 
文章来源: https://blog.csdn.net/zy123698745/article/details/91046581
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!