DESKTOP-CRQ4N2U\jintian 1 سال پیش
والد
کامیت
6f4f5bde48

+ 44 - 35
src/components/CrMap.vue

@@ -2351,8 +2351,11 @@
 									time: 360,
 									role: 2,
 									label: {
-										text: "aaaa",
-										pixelOffset: -10
+										text: "aaaa备注,不传不显示",
+										pixelOffset: {
+											x: -10,
+											y: 0
+										}
 									}
 
 								});
@@ -2379,9 +2382,13 @@
 						Roaming.initRole(1);
 						break;
 					case "2":
+						Roaming.followedX = -100;
+						Roaming.followedZ = 50;
 						Roaming.initRole(2);
 						break;
 					case "3":
+						Roaming.followedX = -50;
+						Roaming.followedZ = 250;
 						Roaming.initRole(3);
 						break;
 				}
@@ -3342,7 +3349,7 @@
 					case "DEM": //地形服务(DEM)
 						if (selNode.checked) {
 							crMap.layer.addTerrain({
-								url: "http://202.102.167.52:16381/crdata/dem",
+								url: "https://www.supermapol.com/realspace/services/3D-stk_terrain/rest/realspace/datas/info/data/path",
 								terrainExaggeration: 10
 							});
 						} else {
@@ -4314,14 +4321,16 @@
 
 			//加载dem地形
 			crMap.layer.addTerrain({
-				url: "http://202.102.167.52:16381/crdata/dem", //山东
-				// url: "https://www.supermapol.com/realspace/services/3D-stk_terrain/rest/realspace/datas/info/data/path" //全球
+				// url: "http://202.102.167.52:16381/crdata/dem", //山东
+				// url: "https://www.supermapol.com/realspace/services/3D-stk_terrain/rest/realspace/datas/info/data/path" //全球,路径漫游报错
 				// url: "http://218.59.194.82:13480/ocean_data/demtiles/" //海洋
+				url: "http://218.59.194.82:13480/jinan_nanshan/demtiles/"
 			});
 
 			//加载影像图
 			crMap.layer.addUrlTemplateImagery({
-				url: "http://202.102.167.52:16282/geoserver/gwc/service/tms/1.0.0/ytmp%3Atdt@EPSG%3A900913@png/{z}/{x}/{reverseY}.png", //服务地址
+				// url: "http://202.102.167.52:16282/geoserver/gwc/service/tms/1.0.0/ytmp%3Atdt@EPSG%3A900913@png/{z}/{x}/{reverseY}.png", //服务地址
+				url: 'https://server.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/%7Bz%7D/%7By%7D/%7Bx%7D',
 				minimumLevel: 0, //最小层级
 				maximumLevel: 18, //最大层级
 			}, function(serviceId) {
@@ -4334,35 +4343,35 @@
 			});
 
 			//加载实景
-			crMap.layer.addCesium3DTileset({
-				id: "a1",
-				url: "http://202.102.167.52:16381/crdata/mpzxc/mpzxc/1/tileset.json", //牟平
-				// url: "http://218.59.194.82:13480/jiang_atushi/jt3tiles/cheng1/tileset.json", //新疆
-				maximumScreenSpaceError: 16,
-				offseth: 100,
-			}, function(serviceId) {
-				//设置实景高度
-				crMap.layer.set3DTilePosition({
-					serviceId: serviceId,
-					height: 10
-				});
-
-				//设置实景样式透明度
-				crMap.layer.set3DTileBMStyle({
-					serviceId: serviceId,
-					// color: [245, 82, 0, 0.8]
-					color: [255, 255, 255, 1],
-				});
-
-				_self.serviceIds.Cesium3DTileset_id = serviceId;
-
-				window['实景'] = serviceId
-
-				// crMap.layer.setLayersStyle({
-				// 	serviceId: serviceId,
-				// 	alpha: 0.1,
-				// })
-			});
+			// crMap.layer.addCesium3DTileset({
+			// 	id: "a1",
+			// 	url: "http://202.102.167.52:16381/crdata/mpzxc/mpzxc/1/tileset.json", //牟平
+			// 	// url: "http://218.59.194.82:13480/jiang_atushi/jt3tiles/cheng1/tileset.json", //新疆
+			// 	maximumScreenSpaceError: 16,
+			// 	offseth: 100,
+			// }, function(serviceId) {
+			// 	//设置实景高度
+			// 	crMap.layer.set3DTilePosition({
+			// 		serviceId: serviceId,
+			// 		height: 10
+			// 	});
+
+			// 	//设置实景样式透明度
+			// 	crMap.layer.set3DTileBMStyle({
+			// 		serviceId: serviceId,
+			// 		// color: [245, 82, 0, 0.8]
+			// 		color: [255, 255, 255, 1],
+			// 	});
+
+			// 	_self.serviceIds.Cesium3DTileset_id = serviceId;
+
+			// 	window['实景'] = serviceId
+
+			// 	// crMap.layer.setLayersStyle({
+			// 	// 	serviceId: serviceId,
+			// 	// 	alpha: 0.1,
+			// 	// })
+			// });
 
 
 			//2、初始化中国区域范围视角

+ 23 - 21
src/jtMap3d/Widgets/DrawTools/DrawPoint.js

@@ -181,22 +181,24 @@ class DrawPoint {
 		var ray = this._viewer.scene.camera.getPickRay(screenPoint);
 		/* 找到射线与渲染的地球表面之间的交点 */
 		var position = this._viewer.scene.globe.pick(ray, this._viewer.scene);
-		/* 获取地理位置的制图表达 */
-		var cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position);
-
-		/* 查询屏幕位置的要素 */
-		var feature = this._viewer.scene.pick(screenPoint);
-		if (feature == undefined) {
-			lng = this._arcToDegree(cartographic.longitude);
-			lat = this._arcToDegree(cartographic.latitude);
-			height = cartographic.height;
-		} else {
-			var cartesian = this._viewer.scene.pickPosition(screenPoint);
-			if (Cesium.defined(cartesian)) {
-				var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
+		if (position) {
+			/* 获取地理位置的制图表达 */
+			var cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position);
+
+			/* 查询屏幕位置的要素 */
+			var feature = this._viewer.scene.pick(screenPoint);
+			if (feature == undefined && Cesium.defined(cartographic)) {
 				lng = this._arcToDegree(cartographic.longitude);
 				lat = this._arcToDegree(cartographic.latitude);
 				height = cartographic.height;
+			} else {
+				var cartesian = this._viewer.scene.pickPosition(screenPoint);
+				if (Cesium.defined(cartesian)) {
+					var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
+					lng = this._arcToDegree(cartographic.longitude);
+					lat = this._arcToDegree(cartographic.latitude);
+					height = cartographic.height;
+				}
 			}
 		}
 		/* 返回结果 */
@@ -695,8 +697,8 @@ Object.assign(DrawPoint.prototype, /** @lends DrawPoint.prototype */ {
 	_updateLabelProperty(params) {
 
 		let label = params.label;
-		
-		this._editEntity.label.text=label.text;
+
+		this._editEntity.label.text = label.text;
 
 		//组合字体
 		// /*font:font-style font-weight font-size/line-height font-family;*/
@@ -749,8 +751,8 @@ Object.assign(DrawPoint.prototype, /** @lends DrawPoint.prototype */ {
 	_updatePoint2LabelProperty(params) {
 
 		let label = params.label;
-		
-		this._editEntity.label.text=label.text;
+
+		this._editEntity.label.text = label.text;
 
 		let font = "";
 		if (label.italic) {
@@ -805,9 +807,9 @@ Object.assign(DrawPoint.prototype, /** @lends DrawPoint.prototype */ {
 	_updateBillboard2LabelProperty(params) {
 
 		let label = params.label;
-		
-		this._editEntity.label.text=label.text;
-		
+
+		this._editEntity.label.text = label.text;
+
 		let font = "";
 		if (label.italic) {
 			font += 'italic '
@@ -873,7 +875,7 @@ Object.assign(DrawPoint.prototype, {
 					editEntityType === DrawPoint.DrawType.Billboard ||
 					editEntityType === DrawPoint.DrawType.Billboard2Label ||
 					editEntityType === DrawPoint.DrawType.Model) {
-						
+
 					feature.id.setIsEdit(true);
 					_self._sendShowPropertyDialog(feature.id);
 				}

+ 20 - 18
src/jtMap3d/Widgets/DrawTools/DrawTools.js

@@ -403,23 +403,25 @@ class DrawTools {
 		var ray = this._viewer.scene.camera.getPickRay(screenPoint);
 		/* 找到射线与渲染的地球表面之间的交点 */
 		var position = this._viewer.scene.globe.pick(ray, this._viewer.scene);
-		/* 获取地理位置的制图表达 */
-		var cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position);
-		cartographic = Cesium.Cartographic.fromCartesian(position);
-		/* 查询屏幕位置的要素 */
-		var feature = this._viewer.scene.pick(screenPoint);
-		if (feature === undefined && Cesium.defined(cartographic)) {
-			lng = this._arcToDegree(cartographic.longitude);
-			lat = this._arcToDegree(cartographic.latitude);
-			height = cartographic.height;
-		} else {
-			var cartesian = this._viewer.scene.pickPosition(screenPoint);
-			if (Cesium.defined(cartesian)) {
-				var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
-				if (Cesium.defined(cartographic)) {
-					lng = this._arcToDegree(cartographic.longitude);
-					lat = this._arcToDegree(cartographic.latitude);
-					height = cartographic.height;
+		if (position) {
+			/* 获取地理位置的制图表达 */
+			var cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position);
+			cartographic = Cesium.Cartographic.fromCartesian(position);
+			/* 查询屏幕位置的要素 */
+			var feature = this._viewer.scene.pick(screenPoint);
+			if (feature === undefined && Cesium.defined(cartographic)) {
+				lng = this._arcToDegree(cartographic.longitude);
+				lat = this._arcToDegree(cartographic.latitude);
+				height = cartographic.height;
+			} else {
+				var cartesian = this._viewer.scene.pickPosition(screenPoint);
+				if (Cesium.defined(cartesian)) {
+					var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
+					if (Cesium.defined(cartographic)) {
+						lng = this._arcToDegree(cartographic.longitude);
+						lat = this._arcToDegree(cartographic.latitude);
+						height = cartographic.height;
+					}
 				}
 			}
 		}
@@ -3401,7 +3403,7 @@ Object.assign(DrawTools.prototype, {
 			_self._unActivateEdit();
 			let feature = _self._viewer.scene.pick(event.position);
 			if (feature !== undefined && feature.id instanceof Cesium.Entity) {
-				
+
 				let featureType = feature.id.getEditType();
 				let entityType = feature.id.getEntityType();
 

+ 18 - 16
src/jtMap3d/Widgets/DrawTools/SketchViewModel.js

@@ -292,21 +292,23 @@ class SketchViewModel {
 		var ray = this._viewer.scene.camera.getPickRay(screenPoint);
 		/* 找到射线与渲染的地球表面之间的交点 */
 		var position = this._viewer.scene.globe.pick(ray, this._viewer.scene);
-		/* 获取地理位置的制图表达 */
-		var cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position);
-		/* 查询屏幕位置的要素 */
-		var feature = this._viewer.scene.pick(screenPoint);
-		if (feature == undefined) {
-			lng = this._arcToDegree(cartographic.longitude);
-			lat = this._arcToDegree(cartographic.latitude);
-			height = cartographic.height;
-		} else {
-			var cartesian = this._viewer.scene.pickPosition(screenPoint);
-			if (Cesium.defined(cartesian)) {
-				var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
+		if (position) {
+			/* 获取地理位置的制图表达 */
+			var cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position);
+			/* 查询屏幕位置的要素 */
+			var feature = this._viewer.scene.pick(screenPoint);
+			if (feature == undefined && Cesium.defined(cartographic)) {
 				lng = this._arcToDegree(cartographic.longitude);
 				lat = this._arcToDegree(cartographic.latitude);
 				height = cartographic.height;
+			} else {
+				var cartesian = this._viewer.scene.pickPosition(screenPoint);
+				if (Cesium.defined(cartesian)) {
+					var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
+					lng = this._arcToDegree(cartographic.longitude);
+					lat = this._arcToDegree(cartographic.latitude);
+					height = cartographic.height;
+				}
 			}
 		}
 		/* 返回结果 */
@@ -2011,7 +2013,7 @@ Object.assign(SketchViewModel.prototype, /** @lends SketchViewModel.prototype */
 		this._registerLeftDoubleClickEvent(handler, function(event) {
 			/* 如果运行环境是App 则禁止使用双击结束事件 */
 			if (_self._isRuntimeApp()) return;
-			
+
 			if (_self._sketchPoints.length < 2) {
 				if (options.onError) options.onError('点数少于两个,禁止结束绘制!');
 				return;
@@ -2083,7 +2085,7 @@ Object.assign(SketchViewModel.prototype, /** @lends SketchViewModel.prototype */
 		this._registerLeftDoubleClickEvent(handler, function(event) {
 			/* 如果运行环境是App 则禁止使用双击结束事件 */
 			if (_self._isRuntimeApp()) return;
-			
+
 			if (_self._sketchPoints.length < 2) {
 				if (options.onError) options.onError('绘制点少于2个,禁止结束绘制!');
 				return;
@@ -2184,7 +2186,7 @@ Object.assign(SketchViewModel.prototype, /** @lends SketchViewModel.prototype */
 		this._registerLeftDoubleClickEvent(handler, function(event) {
 			/* 如果运行环境是App 则禁止使用双击结束事件 */
 			if (_self._isRuntimeApp()) return;
-			
+
 			if (_self._sketchPoints.length < 3) {
 				if (options.onError) options.onError('点数少于3个,禁止结束绘制!');
 				return;
@@ -2625,7 +2627,7 @@ Object.assign(SketchViewModel.prototype, /** @lends SketchViewModel.prototype */
 		this._registerLeftDoubleClickEvent(handler, function(event) {
 			/* 如果运行环境是App 则禁止使用双击结束事件 */
 			if (_self._isRuntimeApp()) return;
-			
+
 			if (_self._sketchPoints.length < 3) {
 				if (options.onError) options.onError('点数少于3个,禁止结束绘制!');
 				return;

+ 52 - 57
src/jtMap3d/Widgets/Roaming/Roaming.js

@@ -47,12 +47,15 @@ export default class Roaming {
 	 * @param {Number} [options.label.outlineWidth=1] 边框宽度	
 	 * @param {Number} [options.label.showBackground=false] 是否显示背景颜色	
 	 * @param {Number} [options.label.backgroundColor=[255,255,255,0]] 背景颜色		
-	 * @param {Number} [options.label.pixelOffset=0] 偏移量
+	 * @param {Number} [options.label.pixelOffset] 偏移像素
+	 * @param {Number} [options.label.pixelOffset.x=0] 横向偏移像素
+	 * @param {Number} [options.label.pixelOffset.y=0] 纵向偏移像素
 	 * @param {Number} [options.label.scale=1] 尺寸
-	 * @param {Number} [options.label.near=1.5e2] 相机范围的下界。
-	 * @param {String} [options.label.nearValue=1] 相机范围下界的值。
-	 * @param {String} [options.label.far=2400] 相机范围的上限。
-	 * @param {Number} [options.label.farValue=0] 该值位于摄像机范围的上界。
+	 * @param {Number} [options.label.scaleByDistance] 相机范围
+	 * @param {Number} [options.label.scaleByDistance.near=1.5e2] 相机范围的下界。
+	 * @param {String} [options.label.scaleByDistance.nearValue=1] 相机范围下界的值。
+	 * @param {String} [options.label.scaleByDistance.far=2400] 相机范围的上限。
+	 * @param {Number} [options.label.scaleByDistance.farValue=0] 该值位于摄像机范围的上界。
 	 * @memberof Roaming
 	 */
 	constructor(viewer, positions, options) {
@@ -268,7 +271,7 @@ export default class Roaming {
 					point.color = new Cesium.Color.fromCssColorString("#FFFF00");
 				}
 			}
-			
+
 			//点位轮廓颜色
 			if (point.outlineColor) {
 				if (point.outlineColor instanceof Array) {
@@ -279,7 +282,7 @@ export default class Roaming {
 					point.outlineColor = new Cesium.Color.fromCssColorString("#FFFF00");
 				}
 			}
-			
+
 			//点位轮廓宽度
 			point.outlineWidth = Cesium.defaultValue(point.outlineWidth, 2);
 
@@ -304,7 +307,7 @@ export default class Roaming {
 					label.fillColor = new Cesium.Color.fromCssColorString("#FFFF00");
 				}
 			}
-			
+
 			//字体边框颜色
 			if (label.outlineColor) {
 				if (label.outlineColor instanceof Array) {
@@ -315,7 +318,7 @@ export default class Roaming {
 					label.outlineColor = new Cesium.Color.fromCssColorString("#FFFF00");
 				}
 			}
-			
+
 			//字体边框宽度
 			label.outlineWidth = Cesium.defaultValue(label.outlineWidth, 1);
 
@@ -335,10 +338,6 @@ export default class Roaming {
 			label.pixelOffset = Cesium.defaultValue(label.pixelOffset, 0);
 			label.scale = Cesium.defaultValue(label.scale, 1);
 
-			label.near = Cesium.defaultValue(label.near, 1.5e2);
-			label.nearValue = Cesium.defaultValue(label.nearValue, 1);
-			label.far = Cesium.defaultValue(label.far, 2400);
-			label.farValue = Cesium.defaultValue(label.farValue, 0);
 
 			this.entity.label = {
 				text: label.text,
@@ -354,11 +353,25 @@ export default class Roaming {
 				backgroundPadding: new Cesium.Cartesian2(6, 6), //指定以像素为单位的水平和垂直背景填充padding
 				disableDepthTestDistance: Number.POSITIVE_INFINITY,
 
-				pixelOffset: new Cesium.Cartesian2(0, label.pixelOffset), //偏移量
 				scale: label.scale, //尺寸
-				// scaleByDistance: new Cesium.NearFarScalar(label.near, label.nearValue, label.far, label.farValue) //按距离缩放,即距离大于180米时,图标不显示  Cesium.NearFarScalar(near, nearValue, far, farValue)相机范围的下界。相机范围下界的值。相机范围的上限。该值位于摄像机范围的上界。
 
 			}
+
+			//偏移量
+			if (label.pixelOffset) {
+				label.pixelOffset.x = Cesium.defaultValue(label.pixelOffset.x, 0);
+				label.pixelOffset.y = Cesium.defaultValue(label.pixelOffset.y, 0);
+				this.entity.label.pixelOffset = new Cesium.Cartesian2(label.pixelOffset.x, label.pixelOffset.y);
+			}
+
+			if (label.scaleByDistance) {
+				label.scaleByDistance.near = Cesium.defaultValue(label.scaleByDistance.near, 0);
+				label.scaleByDistance.nearValue = Cesium.defaultValue(label.scaleByDistance.nearValue, 0);
+				label.scaleByDistance.far = Cesium.defaultValue(label.scaleByDistance.far, 1);
+				label.scaleByDistance.farValue = Cesium.defaultValue(label.scaleByDistance.farValue, 0);
+
+				this.entity.label.scaleByDistance = new Cesium.NearFarScalar(label.scaleByDistance.near, label.scaleByDistance.nearValue, label.scaleByDistance.far, label.scaleByDistance.farValue) //按距离缩放,即距离大于180米时,图标不显示  Cesium.NearFarScalar(near, nearValue, far, farValue)相机范围的下界。相机范围下界的值。相机范围的上限。该值位于摄像机范围的上界。
+			}
 		}
 
 
@@ -376,7 +389,8 @@ export default class Roaming {
 	initRole(role) {
 		let _self = this;
 
-		if (role == 0) {
+		if (role == 0) { //自由模式
+		
 			this.viewer.trackedEntity = undefined;
 
 			//获取被clock监听的全部事件数量
@@ -385,7 +399,7 @@ export default class Roaming {
 				//将被监听的方法移除来停止方法
 				_self.viewer.clock.onTick.removeEventListener(_self.viewer.clock.onTick._listeners[i]);
 			}
-		} else if (role == 1) {
+		} else if (role == 1) { //跟随模式
 
 			this.viewer.trackedEntity = this.entity;
 
@@ -396,7 +410,7 @@ export default class Roaming {
 				_self.viewer.clock.onTick.removeEventListener(_self.viewer.clock.onTick._listeners[i]);
 			}
 
-		} else if (role == 2) {
+		} else if (role == 2) { //第一视角
 
 			this.viewer.trackedEntity = this.entity;
 
@@ -413,8 +427,8 @@ export default class Roaming {
 					let transform = Cesium.Transforms.eastNorthUpToFixedFrame(center);
 					transform = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromQuaternion(orientation), center);
 
-					var transformX = _self.followedX || 50; //距离运动点的距离(后方) 
-					var transformZ = _self.followedZ || 10; //距离运动点的高度(上方)
+					var transformX = _self.followedX || -100; //距离运动点的距离(后方) 
+					var transformZ = _self.followedZ || 50; //距离运动点的高度(上方)
 
 					_self.viewer.camera.lookAtTransform(transform, new Cesium.Cartesian3(transformX, 0, transformZ))
 				}
@@ -422,37 +436,7 @@ export default class Roaming {
 			//监听时间变化 让cesium的时钟方法来监听该方法
 			this.viewer.clock.onTick.addEventListener(exection);
 
-			// //视角变换
-			// var matrix3Scratch = new Cesium.Matrix3();
-
-			// function getModelMatrix(entity, time, result) {
-			// 	var position = Cesium.Property.getValueOrUndefined(entity.position, time, new Cesium.Cartesian3());
-			// 	if (!Cesium.defined(position)) {
-			// 		return undefined;
-			// 	}
-			// 	var orientation = Cesium.Property.getValueOrUndefined(entity.orientation, time, new Cesium.Quaternion());
-			// 	if (!Cesium.defined(orientation)) {
-			// 		result = Cesium.Transforms.eastNorthUpToFixedFrame(position, undefined, result);
-			// 	} else {
-			// 		result = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromQuaternion(orientation, matrix3Scratch),
-			// 			position, result);
-			// 	}
-			// 	return result;
-			// }
-
-			// var scratch = new Cesium.Matrix4();
-			// let renderListener = function(e) {
-			// 	var time = _self.viewer.clock.currentTime.secondsOfDay - _self.viewer.clock.startTime.secondsOfDay;
-
-			// 	getModelMatrix(_self.entity, _self.viewer.clock.currentTime, scratch);
-
-			// 	var transformX = _self.followedX || 50; //距离运动点的距离(后方) 
-			// 	var transformZ = _self.followedZ || 10; //距离运动点的高度(上方)
-			// 	_self.viewer.scene.camera.lookAtTransform(scratch, new Cesium.Cartesian3(-transformX, 0, transformZ));
-			// }
-			// this.viewer.scene.preRender.addEventListener(renderListener);
-
-		} else if (role == 3) {
+		} else if (role == 3) { //第三视角  上帝视角
 
 			this.viewer.trackedEntity = this.entity;
 
@@ -462,8 +446,19 @@ export default class Roaming {
 					let center = _self.entity.position.getValue(
 						_self.viewer.clock.currentTime
 					);
-					// 更新相机位置(上帝视角)
-					_self.viewer.camera.lookAt(center, new Cesium.Cartesian3(0, 0, 1000))
+					let orientation = _self.entity.orientation.getValue(
+						_self.viewer.clock.currentTime
+					)
+					let transform = Cesium.Transforms.eastNorthUpToFixedFrame(center);
+					transform = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromQuaternion(orientation), center);
+
+					// var transformX = -50; //距离运动点的距离(后方)
+					// var transformZ = 250; //距离运动点的高度(上方)
+					
+					var transformX = _self.followedX || -50; //距离运动点的距离(后方)
+					var transformZ = _self.followedZ || 250; //距离运动点的高度(上方)
+
+					_self.viewer.camera.lookAtTransform(transform, new Cesium.Cartesian3(transformX, 0, transformZ))
 				}
 			};
 			//监听时间变化 让cesium的时钟方法来监听该方法
@@ -490,8 +485,8 @@ export default class Roaming {
 		// 	clockViewModel.multiplier = -multiplier;
 		// }
 		// clockViewModel.shouldAnimate = true;
-		
-		var multiplier=this.viewer.clock.multiplier;
+
+		var multiplier = this.viewer.clock.multiplier;
 		if (multiplier < 0) {
 			this.viewer.clock.multiplier = -multiplier;
 		}
@@ -508,8 +503,8 @@ export default class Roaming {
 		// 	clockViewModel.multiplier = -multiplier;
 		// }
 		// clockViewModel.shouldAnimate = true;
-		
-		var multiplier=this.viewer.clock.multiplier;
+
+		var multiplier = this.viewer.clock.multiplier;
 		if (multiplier > 0) {
 			this.viewer.clock.multiplier = -multiplier;
 		}

+ 19 - 17
src/jtMap3d/Widgets/StatusBar.js

@@ -258,23 +258,25 @@ class StatusBar {
 		var ray = this._viewer.scene.camera.getPickRay(screenPoint);
 		/* 找到射线与渲染的地球表面之间的交点 */
 		var position = this._viewer.scene.globe.pick(ray, this._viewer.scene);
-		/* 获取地理位置的制图表达 */
-		var cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position);
-		cartographic = Cesium.Cartographic.fromCartesian(position);
-		/* 查询屏幕位置的要素 */
-		var feature = this._viewer.scene.pick(screenPoint);
-		if (feature === undefined && Cesium.defined(cartographic)) {
-			lng = this._arcToDegree(cartographic.longitude);
-			lat = this._arcToDegree(cartographic.latitude);
-			height = cartographic.height;
-		} else {
-			var cartesian = this._viewer.scene.pickPosition(screenPoint);
-			if (Cesium.defined(cartesian)) {
-				var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
-				if (Cesium.defined(cartographic)) {
-					lng = this._arcToDegree(cartographic.longitude);
-					lat = this._arcToDegree(cartographic.latitude);
-					height = cartographic.height;
+		if (position) {
+			/* 获取地理位置的制图表达 */
+			var cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position);
+			cartographic = Cesium.Cartographic.fromCartesian(position);
+			/* 查询屏幕位置的要素 */
+			var feature = this._viewer.scene.pick(screenPoint);
+			if (feature === undefined && Cesium.defined(cartographic)) {
+				lng = this._arcToDegree(cartographic.longitude);
+				lat = this._arcToDegree(cartographic.latitude);
+				height = cartographic.height;
+			} else {
+				var cartesian = this._viewer.scene.pickPosition(screenPoint);
+				if (Cesium.defined(cartesian)) {
+					var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
+					if (Cesium.defined(cartographic)) {
+						lng = this._arcToDegree(cartographic.longitude);
+						lat = this._arcToDegree(cartographic.latitude);
+						height = cartographic.height;
+					}
 				}
 			}
 		}

+ 25 - 23
src/jtMap3d/Widgets/common/CoordTransform.js

@@ -328,7 +328,7 @@ class CoordTransform {
 		let _double = parseFloat(DMS.degrees) + parseFloat(DMS.minutes) / 60 + parseFloat(DMS.seconds) / 3600;
 		return parseFloat(_double).toFixed(6);
 	}
-	
+
 	/**
 	 * 世界坐标转换为经纬度坐标
 	 * @ignore 生成方法时不对外公开
@@ -342,7 +342,7 @@ class CoordTransform {
 			height: g.height,
 		}
 	}
-	
+
 	/**
 	 * 弧度转度
 	 * @ignore
@@ -352,7 +352,7 @@ class CoordTransform {
 	static _arcToDegree(arc) {
 		return arc / Math.PI * 180;
 	}
-	
+
 	/**
 	 * 根据地形或实景或模型检测当前屏幕位置的经纬度及高度
 	 * @ignore
@@ -361,33 +361,35 @@ class CoordTransform {
 	 * @param {Number} screenPoint.y 屏幕坐标y
 	 * @return {JSON} 位置信息{lng,lat,height}
 	 */
-	static _getScreenClickPositionAndHeight(viewer,screenPoint) {
-		this._viewer=viewer;
-		
+	static _getScreenClickPositionAndHeight(viewer, screenPoint) {
+		this._viewer = viewer;
+
 		var lng = undefined,
 			lat = undefined,
 			height = undefined;
-	
+
 		/* 从相机位置到 windowPosition 处的像素创建射线在世界坐标系中 */
 		var ray = this._viewer.scene.camera.getPickRay(screenPoint);
 		/* 找到射线与渲染的地球表面之间的交点 */
 		var position = this._viewer.scene.globe.pick(ray, this._viewer.scene);
-		/* 获取地理位置的制图表达 */
-		var cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position);
-	
-		/* 查询屏幕位置的要素 */
-		var feature = this._viewer.scene.pick(screenPoint);
-		if (feature == undefined) {
-			lng = this._arcToDegree(cartographic.longitude);
-			lat = this._arcToDegree(cartographic.latitude);
-			height = cartographic.height;
-		} else {
-			var cartesian = this._viewer.scene.pickPosition(screenPoint);
-			if (Cesium.defined(cartesian)) {
-				var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
+		if (position) {
+			/* 获取地理位置的制图表达 */
+			var cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position);
+
+			/* 查询屏幕位置的要素 */
+			var feature = this._viewer.scene.pick(screenPoint);
+			if (feature == undefined && Cesium.defined(cartographic)) {
 				lng = this._arcToDegree(cartographic.longitude);
 				lat = this._arcToDegree(cartographic.latitude);
 				height = cartographic.height;
+			} else {
+				var cartesian = this._viewer.scene.pickPosition(screenPoint);
+				if (Cesium.defined(cartesian)) {
+					var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
+					lng = this._arcToDegree(cartographic.longitude);
+					lat = this._arcToDegree(cartographic.latitude);
+					height = cartographic.height;
+				}
 			}
 		}
 		/* 返回结果 */
@@ -397,7 +399,7 @@ class CoordTransform {
 			height: height,
 		}
 	}
-	
+
 	/**
 	 * 屏幕位置转换为经纬度位置及空间位置
 	 * @ignore
@@ -405,9 +407,9 @@ class CoordTransform {
 	 * @param {Cesium.Cartesian2} screenPosition 屏幕位置
 	 * @return {JSON} 经纬度位置及空间位置
 	 */
-	static _transfromFromScreenPoint(viewer,screenPosition) {
+	static _transfromFromScreenPoint(viewer, screenPosition) {
 		/* 根据屏幕位置获取经度、纬度和高度信息 */
-		let location = this._getScreenClickPositionAndHeight(viewer,screenPosition);
+		let location = this._getScreenClickPositionAndHeight(viewer, screenPosition);
 		/* 经纬度位置转换为三维坐标 */
 		var cartesian = Cesium.Cartesian3.fromDegrees(location.lng, location.lat, location.height);
 		/* 返回 */