Cesium天际线分析

	var obj = {
			id: "Skyline",
			name: 'czm_skylinetemp',
			//fragmentShader 细绳   uniform着色器对象  
			fragmentShader: 'uniform sampler2D colorTexture;' +
				'uniform sampler2D depthTexture;' +
				'varying vec2 v_textureCoordinates;' +
				'void main(void)' +
				'{' +
				'float depth = czm_readDepth(depthTexture, v_textureCoordinates);' +
				'vec4 color = texture2D(colorTexture, v_textureCoordinates);' +
				'if(depth<1.0 - 0.000001){' +
				'gl_FragColor = color;' +
				'}' +
				'else{' +
				'gl_FragColor = vec4(1.0,0.0,0.0,1.0);' +
				'}' +
				'}',
			url: "http://earthsdk.com/v/last/Apps/assets/dayanta/tileset.json", //加载大雁塔倾斜模型数据
			position: [114.0595, 22.539, 10], 
			heading: 0, // 方位角(heading)
			pitch: 0, // 俯仰角(pitch) 旋转角度
			roll: 360, // 滚动角(roll)
			destination:[114.0595, 22.539, 50],//相机视角
			orientation: {   
				heading : 0.0, 
				pitch : 0.0, 
				roll : 0.0                           
			}
		}
var tjx_model;
function addSkyline (paramObj) {
		var viewer = this.viewer
		var position = Cesium.Cartesian3.fromDegrees(paramObj.position[0], paramObj.position[1], paramObj.position[2]);
		var heading = Cesium.Math.toRadians(paramObj.heading);
		var pitch = Cesium.Math.toRadians(paramObj.pitch);
		var roll = Cesium.Math.toRadians(paramObj.roll);
		var hpRoll = new Cesium.HeadingPitchRoll(heading, pitch, roll);
		var converter = Cesium.Transforms.eastNorthUpToFixedFrame;
		var modelMatrix = Cesium.Transforms.headingPitchRollToFixedFrame(position, hpRoll, Cesium.Ellipsoid.WGS84, converter);
		//添加三维模型
		tjx_model = viewer.scene.primitives.add(
			new Cesium.Cesium3DTileset({
				url: paramObj.url, //模型数据url
			})
		);
		tjx_model.readyPromise.then(function () {
			//请求模型后执行
			tjx_model._root.transform = modelMatrix; //模型位置
		})

		//设置相机视角  上下调整
		viewer.camera.setView({
			destination: Cesium.Cartesian3.fromDegrees(paramObj.destination[0], paramObj.destination[1], paramObj.destination[2]),
			orientation: {       //设置视角
				heading: Cesium.Math.toRadians(paramObj.orientation.heading), // east, default value is 0.0 (north)左右摆头
				pitch: Cesium.Math.toRadians(paramObj.orientation.pitch),    // default value (looking down)上下抬头 -90俯视 0平视 90仰视(默认俯视)
				roll: paramObj.orientation.roll                          // default value
			}
		});

		//加载天际线
		var collection = viewer.scene.postProcessStages;
		var edgeDetection = Cesium.PostProcessStageLibrary.createEdgeDetectionStage();

		var postProccessStage = new Cesium.PostProcessStage({
			//此后处理阶段的唯一名称,供组合中的其他阶段参考。如果未提供名称,将生成 GUID。
			name: paramObj.name,
			//fragmentShader 细绳 uniform着色器对象  textureScale
			fragmentShader: paramObj.fragmentShader,
		});

		//PostProcessStage:要使用的片段着色器。默认sampler2D制服是colorTexture和depthTexture。
		var postProccessStage1 = new Cesium.PostProcessStage({
			//name:此后处理阶段的唯一名称,供组合中的其他阶段参考。如果未提供名称,将生成 GUID。
			name: 'czm_skylinetemp1',
			//fragmentShader 细绳 uniform着色器对象  textureScale
			fragmentShader: 'uniform sampler2D colorTexture;' +
				'uniform sampler2D redTexture;' +
				'uniform sampler2D silhouetteTexture;' +
				'varying vec2 v_textureCoordinates;' +
				'void main(void)' +
				'{' +
				'vec4 redcolor=texture2D(redTexture, v_textureCoordinates);' +
				'vec4 silhouetteColor = texture2D(silhouetteTexture, v_textureCoordinates);' +
				'vec4 color = texture2D(colorTexture, v_textureCoordinates);' +
				'if(redcolor.r == 1.0){' +
				'gl_FragColor = mix(color, vec4(5.0,0.0,0.0,1.0), silhouetteColor.a);' +
				'}' +
				'else{' +
				'gl_FragColor = color;' +
				'}' +
				'}',
			//uniform着色器对象
			uniforms: {
				redTexture: postProccessStage.name,
				silhouetteTexture: edgeDetection.name
			}
		});
		// 如果inputPreviousStageTexture是true,则每个阶段的输入是场景渲染到的输出纹理或之前执行的阶段的输出纹理。
		// 如果inputPreviousStageTexture是false,则合成中每个阶段的输入纹理都是相同的。
		var postProccessStage = new Cesium.PostProcessStageComposite({
			//PostProcessStage要按顺序执行 的 s 或组合的数组。
			stages: [edgeDetection, postProccessStage, postProccessStage1],
			//是否执行每个后处理阶段,其中一个阶段的输入是前一个阶段的输出。
			//否则,每个包含阶段的输入是在组合之前执行的阶段的输出。
			inputPreviousStageTexture: false,
			//后处理阶段制服的别名。
			uniforms: edgeDetection.uniforms
		});
		collection.add(postProccessStage);
}

一顿操作之后,最终得到下面的结果
在这里插入图片描述

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
Cesium等高线分析是一种地球科学中常用的空间数据分析方法,主要用于研究地表高程变化。它通过建立坐标系和测量高程数据来描绘地表的形态特征,并通过绘制等高线图展示高程的分布情况。 Cesium等高线分析的核心是通过测量不同位置的高程数据,以划分等高面来呈现地表高程的变化。首先,需要通过各种地面测量技术收集到不同位置的高程数据。这些数据可以使用全球定位系统(GPS)、激光雷达、航空摄影测量等方法获取。 然后,将收集到的高程数据制作成数字地形模型(DTM),并将其导入Cesium等高线分析软件中。利用该软件的工具,可以根据高程数据的分布情况绘制等高线图。等高线图中的等高线代表了地表上具有相同高程数值的点,通过绘制这些等高线,可以清晰地展示地表的高程分布情况,从而帮助我们更好地理解和分析地形。 Cesium等高线分析在地质勘探、土地资源规划、城市规划等领域有着广泛的应用。例如,在地质勘探中,等高线分析可以帮助确定地下矿产资源分布的变化趋势;在土地资源规划中,可以利用等高线图来评估土壤的适宜性,选择合适的农作物种植区域;在城市规划中,可以利用等高线图来分析城市地势,从而规划道路和建筑物的布局。 总的来说,Cesium等高线分析是一种重要的空间数据分析方法,它通过绘制等高线图来展示地表高程的分布情况,为地球科学研究和相关领域的决策提供了有力的支持。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值