Cesium之【三角】量测

27 篇文章 16 订阅
25 篇文章 2 订阅
//****************************三角测量 ************************************************//
var measureTriangle = function (viewer, handler){	
	handler_g = handler = new Cesium.ScreenSpaceEventHandler(viewer.scene._imageryLayerCollection);
	var positionsTriangle = [];
	var tempPoints ;//保存直角点
	var poly = null;
	var tooltip = document.getElementById("toolTip");
	var cartesian = null;
	var floatingPoint;//浮动点
	tooltip.style.display = "block";
	
	handler.setInputAction(function(movement){
		tooltip.style.left = movement.endPosition.x + 3 + "px";
		tooltip.style.top = movement.endPosition.y - 25 + "px";
        tooltip.innerHTML ='<p>单击开始,双击结束</p>';
		cartesian = viewer.scene.pickPosition(movement.endPosition); 
		//cartesian = viewer.scene.camera.pickEllipsoid(movement.endPosition, viewer.scene.globe.ellipsoid);
		if(positionsTriangle.length >= 2){
			if (!Cesium.defined(poly)) {				
				poly = new PolylinePrimitive(positionsTriangle);
			}else{
				positionsTriangle.pop();				
										
				positionsTriangle.push(cartesian.clone());
				
				tempPoints= point_conf(positionsTriangle);	
				
			}
			// tooltip.innerHTML='<p>'+distance+'米</p>';
		}
	},Cesium.ScreenSpaceEventType.MOUSE_MOVE);
	
	handler.setInputAction(function(movement){
		tooltip.style.display = "none";
		
		// cartesian = viewer.scene.camera.pickEllipsoid(movement.position, viewer.scene.globe.ellipsoid);
		if(positionsTriangle.length == 0) {
			
			cartesian = viewer.scene.pickPosition(movement.position); 
			
			positionsTriangle.push(cartesian.clone());
			
			positionsTriangle.push(cartesian.clone());
			
			
			// tempPoints= point_conf(positionsTriangle);	

			floatingPoint_g = floatingPoint = viewer.entities.add({
				parent:measure_entities,
				name : '多边形面积',
				position : positionsTriangle[0],			
				point : {
					pixelSize : 5,
					color : Cesium.Color.RED,
					outlineColor : Cesium.Color.WHITE,
					outlineWidth : 2,
					heightReference:Cesium.HeightReference.none 
				}
			});	
		}		
	},Cesium.ScreenSpaceEventType.LEFT_CLICK);
	 
	handler.setInputAction(function(movement){
		handler.destroy();	
		// handler_g.destroy();//关闭事件句柄		
		tooltip.style.display = "none";
		
		// tempPoints =point_conf(positionsTriangle);
		//在三维场景中添加线
		var tempPositions1 =[];
		var tempPositions2 =[];
		tempPositions1.push(positionsTriangle[0].clone());
		tempPositions1.push(tempPoints.clone());
		var textDistance = getHeight(tempPositions1) + "米";
		
		viewer.entities.add({
			parent:measure_entities,
			name : '等经纬度',
			position : tempPositions1[0].clone(),
			polyline : {					
				show : true,
				positions : tempPositions1,
				material :  new Cesium.PolylineDashMaterialProperty({
						color: Cesium.Color.RED
					}),
				width : 2						
			},
			label : {
				text : textDistance,
				font : '18px sans-serif',
				fillColor : Cesium.Color.GOLD,
				style: Cesium.LabelStyle.FILL_AND_OUTLINE,
				outlineWidth : 2,
				verticalOrigin : Cesium.VerticalOrigin.BOTTOM,
				pixelOffset : new Cesium.Cartesian2(20, -20)
			}
		});		
		
		tempPositions2.push(tempPoints.clone());
		tempPositions2.push(positionsTriangle[1].clone());
		textDistance = getDistance(tempPositions2) + "公里";
		
		viewer.entities.add({
			parent:measure_entities,
			name : '等高度直线',
			position : tempPositions2[0].clone(),
			polyline : {					
				show : true,
				positions : tempPositions2,
				material :  new Cesium.PolylineDashMaterialProperty({
						color: Cesium.Color.RED
					}),
				width : 2						
			},
			label : {
				text : textDistance,
				font : '18px sans-serif',
				fillColor : Cesium.Color.GOLD,
				style: Cesium.LabelStyle.FILL_AND_OUTLINE,
				outlineWidth : 2,
				verticalOrigin : Cesium.VerticalOrigin.BOTTOM,
				pixelOffset : new Cesium.Cartesian2(60, -20)
			}
		});		

    }, Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK );	

	
	var PolylinePrimitive = (function(){
		function _(positions){
			this.options = {
				parent:measure_entities,
				name:'直线',
				polyline : {					
					show : true,
					positions : [],
					material : Cesium.Color.GOLD ,
					width : 2						
				},
				label : {					
					font : '18px sans-serif',
					fillColor : Cesium.Color.GOLD,
					style: Cesium.LabelStyle.FILL_AND_OUTLINE,
					outlineWidth : 2,
					verticalOrigin : Cesium.VerticalOrigin.BOTTOM,
					pixelOffset : new Cesium.Cartesian2(20, -40)
				}
			};
			
			this.positions = positions;
			this._init();
		}
	
		_.prototype._init = function(){
			var _self = this;
			var _update = function(){				
				return _self.positions;
			};
			var _update_label = function(){
				return _self.positions[1].clone();
			};
			var _text = function(){
				var text_temp = getSpaceDistance(_self.positions);
				text_temp = text_temp +"公里";
				return text_temp;
			};
			//实时更新polygon.hierarchy
			this.options.polyline.positions = new Cesium.CallbackProperty(_update,false);
			this.options.position = new Cesium.CallbackProperty(_update_label,false);
			this.options.label.text =new Cesium.CallbackProperty(_text,false);
			viewer.entities.add(this.options);
		};	
		return _;
	})();
	
};

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值