Browse Source

图层控制完善

DESKTOP-CRQ4N2U\jintian 1 year ago
parent
commit
5d85197aac
1 changed files with 130 additions and 136 deletions
  1. 130 136
      src/views/Map3d/components/layer.vue

+ 130 - 136
src/views/Map3d/components/layer.vue

@@ -136,7 +136,7 @@
 			 * @param {Object} data 传递给 data 属性的数组中该节点所对应的对象
 			 * @param {Object} checked 节点本身是否被选中
 			 */
-			setLayersControl(jt3d, data, checked) {
+			async setLayersControl(jt3d, data, checked) {
 				console.log('操作', '图层控制')
 
 				let _self = this;
@@ -181,7 +181,7 @@
 					}
 				}
 
-				return new Promise((resolve, reject) => {
+				await new Promise((resolve, reject) => {
 					switch (data.loadtype) {
 						case "GeoJsonPoint": //GeoJsonPoint
 							if (checked) {
@@ -207,7 +207,7 @@
 
 
 								jt3d.layer.addBillboardByGeoJson(_options, function(serviceId) {
-									resolve(true);
+
 								});
 
 							} else {
@@ -215,7 +215,6 @@
 									serviceId: _serviceId,
 								}).then(res => {
 									data.isinit = '0';
-									resolve(true);
 								});
 							}
 							break;
@@ -234,7 +233,7 @@
 									if (parameterset.clampToGround) { //是否贴地
 										_options.clampToGround = parameterset.clampToGround;
 									}
-									if (!parameterset.isImageAlpha) { //是否采用图片颜色
+									if (parameterset.isImageAlpha) { //是否采用图片颜色
 										_options.isImageAlpha = parameterset.isImageAlpha;
 									}
 									if (parameterset.imgUrl) { //精灵线图片
@@ -263,14 +262,13 @@
 								}
 
 								jt3d.layer.addPolylineByGeoJson(_options, function(serviceId) {
-									resolve(true);
+
 								});
 							} else {
 								jt3d.layer.removeDataSources({
 									serviceId: _serviceId,
 								}).then(res => {
 									data.isinit = '0';
-									resolve(true);
 								});
 							}
 							break;
@@ -315,7 +313,6 @@
 											// let flyToEntity = jt3d.LocateUtil.flyToEntityByPoints([
 											// 	parameterset.points,
 											// ], 'point');
-											resolve(true);
 										});
 
 									} else {
@@ -329,7 +326,6 @@
 									serviceId: _serviceId,
 								}).then(res => {
 									data.isinit = '0';
-									resolve(true);
 								});
 							}
 							break;
@@ -339,14 +335,17 @@
 
 								if (parameterset) {
 									if (parameterset.points) {
-										jt3d.layer.addPolygonImageMaterial({
-											id: _serviceId,
-											points: parameterset.points,
-											url: data.datasource,
-											alpha: _opacity
-										}, function(serviceId) {
-											resolve(true);
-										});
+
+										if (!window[_serviceId]) {
+											jt3d.layer.addPolygonImageMaterial({
+												id: _serviceId,
+												points: parameterset.points,
+												url: data.datasource,
+												alpha: _opacity
+											}, function(serviceId) {
+
+											});
+										}
 									} else {
 										ElMessage("请检测图层表parameterset字段是否设置points");
 									}
@@ -358,7 +357,6 @@
 									serviceId: _serviceId,
 								}).then(res => {
 									data.isinit = '0';
-									resolve(true);
 								});
 							}
 							break;
@@ -367,20 +365,20 @@
 							if (checked) {
 								data.isinit = '1';
 
-								let floatLayer = new this.jt3dSDK.CrImageServerLayer({
-									viewer: jt3d._viewer,
-									url: data.datasource,
-									opacity: _opacity,
-									show: true
-								});
-								window[_serviceId] = floatLayer;
-								//添加网格地图
-								// window[_serviceId].show();
-								resolve(true);
+								if (!window[_serviceId]) {
+									let floatLayer = new this.jt3dSDK.CrImageServerLayer({
+										viewer: jt3d._viewer,
+										url: data.datasource,
+										opacity: _opacity,
+										show: true
+									});
+									window[_serviceId] = floatLayer;
+									//添加网格地图
+									// window[_serviceId].show();
+								}
 							} else {
 								window[_serviceId].hide();
 								data.isinit = '0';
-								resolve(true);
 							}
 							break;
 						case "DEM": //地形服务(DEM)
@@ -397,11 +395,9 @@
 									}
 								}
 								jt3d.layer.addTerrain(_options);
-								resolve(true);
 							} else {
 								jt3d.layer.removeTerrain().then(res => {
 									data.isinit = '0';
-									resolve(true);
 								});
 							}
 							break;
@@ -427,29 +423,28 @@
 									}
 								}
 
-								//加载服务
-								jt3d.layer.addUrlTemplateImagery(_options, function(serviceId) {
+								if (!window[_serviceId]) {
+									//加载服务
+									jt3d.layer.addUrlTemplateImagery(_options, function(serviceId) {
 
-									//重置图层顺序
-									_self.setLayerNumber(jt3d, serviceId)
-									if (atlastype === "底图") {
-										var imageryLayers = jt3d._viewer.imageryLayers;
-										imageryLayers.lowerToBottom(window[serviceId]);
-										imageryLayers.raise(window[serviceId]);
-										if (layertype === '标注') {
+										//重置图层顺序
+										_self.setLayerNumber(jt3d, serviceId)
+										if (atlastype === "底图") {
 											var imageryLayers = jt3d._viewer.imageryLayers;
-											imageryLayers.raiseToTop(window[serviceId]);
+											imageryLayers.lowerToBottom(window[serviceId]);
+											imageryLayers.raise(window[serviceId]);
+											if (layertype === '标注') {
+												var imageryLayers = jt3d._viewer.imageryLayers;
+												imageryLayers.raiseToTop(window[serviceId]);
+											}
 										}
-									}
-
-									resolve(true);
-								});
+									});
+								}
 							} else {
 								jt3d.layer.removeImageryProvider({
 									serviceId: _serviceId
 								}).then(res => {
 									data.isinit = '0';
-									resolve(true);
 								});
 							}
 
@@ -484,21 +479,22 @@
 													_options.maximumLevel = parameterset.maximumLevel;
 												}
 
-												jt3d.layer.addWebMapTileService(_options, function(serviceId) {
+												if (!window[_serviceId]) {
+													jt3d.layer.addWebMapTileService(_options, function(serviceId) {
 
-													//重置图层顺序
-													_self.setLayerNumber(jt3d, serviceId)
-													if (atlastype === "底图") {
-														var imageryLayers = jt3d._viewer.imageryLayers;
-														imageryLayers.lowerToBottom(window[serviceId]);
-														imageryLayers.raise(window[serviceId]);
-														if (layertype === '标注') {
+														//重置图层顺序
+														_self.setLayerNumber(jt3d, serviceId)
+														if (atlastype === "底图") {
 															var imageryLayers = jt3d._viewer.imageryLayers;
-															imageryLayers.raiseToTop(window[serviceId]);
+															imageryLayers.lowerToBottom(window[serviceId]);
+															imageryLayers.raise(window[serviceId]);
+															if (layertype === '标注') {
+																var imageryLayers = jt3d._viewer.imageryLayers;
+																imageryLayers.raiseToTop(window[serviceId]);
+															}
 														}
-													}
-													resolve(true);
-												});
+													});
+												}
 
 											} else {
 												ElMessage("请检测图层表parameterset字段是否设置tileMatrixSetID");
@@ -520,7 +516,6 @@
 									serviceId: _serviceId
 								}).then(res => {
 									data.isinit = '0';
-									resolve(true);
 								});
 							}
 							break;
@@ -534,10 +529,11 @@
 									url: data.datasource,
 									alpha: _opacity
 								}
+
 								if (parameterset) {
 									if (parameterset.layers) { //WMTS请求的层名
 										_options.layers = parameterset.layers;
-
+										_options.parameters = parameterset.parameters
 										if (parameterset.minimumLevel) { //最小层级
 											_options.minimumLevel = parameterset.minimumLevel;
 										}
@@ -545,21 +541,22 @@
 											_options.maximumLevel = parameterset.maximumLevel;
 										}
 
-										jt3d.layer.addWebMapService(_options, function(serviceId) {
+										if (!window[_serviceId]) {
+											jt3d.layer.addWebMapService(_options, function(serviceId) {
 
-											//重置图层顺序
-											_self.setLayerNumber(jt3d, serviceId)
-											if (atlastype === "底图") {
-												var imageryLayers = jt3d._viewer.imageryLayers;
-												imageryLayers.lowerToBottom(window[serviceId]);
-												imageryLayers.raise(window[serviceId]);
-												if (layertype === '标注') {
+												//重置图层顺序
+												_self.setLayerNumber(jt3d, serviceId)
+												if (atlastype === "底图") {
 													var imageryLayers = jt3d._viewer.imageryLayers;
-													imageryLayers.raiseToTop(window[serviceId]);
+													imageryLayers.lowerToBottom(window[serviceId]);
+													imageryLayers.raise(window[serviceId]);
+													if (layertype === '标注') {
+														var imageryLayers = jt3d._viewer.imageryLayers;
+														imageryLayers.raiseToTop(window[serviceId]);
+													}
 												}
-											}
-											resolve(true);
-										});
+											});
+										}
 									} else {
 										ElMessage("请检测图层表parameterset字段是否设置layers");
 									}
@@ -571,7 +568,6 @@
 									serviceId: _serviceId
 								}).then(res => {
 									data.isinit = '0';
-									resolve(true);
 								});
 							}
 							break;
@@ -591,28 +587,29 @@
 									}
 								}
 
-								//加载服务
-								jt3d.layer.addArcGisMapServer(_options, function(serviceId) {
+								if (!window[_serviceId]) {
 
-									//重置图层顺序
-									_self.setLayerNumber(jt3d, serviceId)
-									if (atlastype === "底图") {
-										var imageryLayers = jt3d._viewer.imageryLayers;
-										imageryLayers.lowerToBottom(window[serviceId]);
-										imageryLayers.raise(window[serviceId]);
-										if (layertype === '标注') {
+									//加载服务
+									jt3d.layer.addArcGisMapServer(_options, function(serviceId) {
+
+										//重置图层顺序
+										_self.setLayerNumber(jt3d, serviceId)
+										if (atlastype === "底图") {
 											var imageryLayers = jt3d._viewer.imageryLayers;
-											imageryLayers.raiseToTop(window[serviceId]);
+											imageryLayers.lowerToBottom(window[serviceId]);
+											imageryLayers.raise(window[serviceId]);
+											if (layertype === '标注') {
+												var imageryLayers = jt3d._viewer.imageryLayers;
+												imageryLayers.raiseToTop(window[serviceId]);
+											}
 										}
-									}
-									resolve(true);
-								})
+									})
+								}
 							} else {
 								jt3d.layer.removeImageryProvider({
 									serviceId: _serviceId
 								}).then(res => {
 									data.isinit = '0';
-									resolve(true);
 								});
 							}
 							break;
@@ -635,27 +632,27 @@
 									}
 								}
 
-								jt3d.layer.addTileMapServiceImagery(_options, function(serviceId) {
+								if (!window[_serviceId]) {
+									jt3d.layer.addTileMapServiceImagery(_options, function(serviceId) {
 
-									//重置图层顺序
-									_self.setLayerNumber(jt3d, serviceId)
-									if (atlastype === "底图") {
-										var imageryLayers = jt3d._viewer.imageryLayers;
-										imageryLayers.lowerToBottom(window[serviceId]);
-										imageryLayers.raise(window[serviceId]);
-										if (layertype === '标注') {
+										//重置图层顺序
+										_self.setLayerNumber(jt3d, serviceId)
+										if (atlastype === "底图") {
 											var imageryLayers = jt3d._viewer.imageryLayers;
-											imageryLayers.raiseToTop(window[serviceId]);
+											imageryLayers.lowerToBottom(window[serviceId]);
+											imageryLayers.raise(window[serviceId]);
+											if (layertype === '标注') {
+												var imageryLayers = jt3d._viewer.imageryLayers;
+												imageryLayers.raiseToTop(window[serviceId]);
+											}
 										}
-									}
-									resolve(true);
-								});
+									});
+								}
 							} else {
 								jt3d.layer.removeImageryProvider({
 									serviceId: _serviceId
 								}).then(res => {
 									data.isinit = '0';
-									resolve(true);
 								});
 							}
 							break;
@@ -664,9 +661,7 @@
 							if (checked) {
 								data.isinit = '1';
 
-								if (window[_serviceId]) {
-									window[_serviceId].show = true;
-								} else {
+								if (!window[_serviceId]) {
 									//设置参数
 									let _options = {
 										id: _serviceId,
@@ -683,22 +678,20 @@
 									//加载实景
 									jt3d.layer.addCesium3DTileset(_options, function(serviceId) {
 										window[_serviceId].show = true;
-										resolve(true);
 									});
 								}
 							} else {
-								if (window[_serviceId]) {
-									//3DTileset数据量比较大,会报很多cesium错误
-									// jt3d.layer.removeScenePrimitives({
-									// 	serviceId: _serviceId
-									// }).then(res => {
-									// 	data.isinit = '0';
-									// });
-
-									window[_serviceId].show = false;
+								// 3DTileset数据量比较大,会报很多cesium错误
+								jt3d.layer.removeScenePrimitives({
+									serviceId: _serviceId
+								}).then(res => {
 									data.isinit = '0';
-									resolve(true);
-								}
+								});
+
+								// if (window[_serviceId]) {
+								// 	window[_serviceId].show = false;
+								// 	data.isinit = '0';
+								// }
 							}
 
 							break;
@@ -706,9 +699,7 @@
 							if (checked) {
 								data.isinit = '1';
 
-								if (window[_serviceId]) {
-									window[_serviceId].show = true;
-								} else {
+								if (!window[_serviceId]) {
 									//设置参数
 									let _options = {
 										id: _serviceId,
@@ -723,21 +714,19 @@
 									//加载白膜
 									jt3d.layer.addCesium3DTilesetBm(_options, function(serviceId) {
 										window[_serviceId].show = true;
-										resolve(true);
 									});
 								}
 							} else {
-								if (window[_serviceId]) {
-									// jt3d.layer.removeScenePrimitives({
-									// 	serviceId: _serviceId
-									// }).then(res => {
-									// 	data.isinit = '0';
-									// });
-
-									window[_serviceId].show = false;
+								jt3d.layer.removeScenePrimitives({
+									serviceId: _serviceId
+								}).then(res => {
 									data.isinit = '0';
-									resolve(true);
-								}
+								});
+
+								// if (window[_serviceId]) {
+								// 	window[_serviceId].show = false;
+								// 	data.isinit = '0';
+								// }
 							}
 							break;
 						default:
@@ -750,7 +739,7 @@
 			 * 服务定位
 			 * @param {Object} data
 			 */
-			 setLayersLocation(jt3d, data) {
+			async setLayersLocation(jt3d, data) {
 				console.log('操作', '单击定位')
 				let _self = this;
 
@@ -779,7 +768,7 @@
 				}
 
 				if (data.isinit === '1') {
-					return new Promise((resolve, reject) => {
+					await new Promise((resolve, reject) => {
 						switch (data.loadtype) {
 							case "GeoJsonPolyline": //GeoJsonPolyline
 
@@ -795,8 +784,6 @@
 											pitch: -90,
 											range: 8880
 										});
-										
-										resolve(true);
 									} else {
 										ElMessage("请检测图层表parameterset字段是否设置points");
 									}
@@ -808,7 +795,7 @@
 							case "PolygonImageMaterial": //图片材质
 
 								break;
-							case "CrImageServerLayer": //地形服务(DEM)
+							case "CrImageServerLayer": //规划图
 
 								break;
 							case "DEM": //地形服务(DEM)
@@ -852,8 +839,6 @@
 									// jt3d.LocateUtil.flyToTileset(window[_serviceId],options);
 
 									// jt3d.LocateUtil.zoomToTilesets(window[_serviceId], options);
-									
-									resolve(true);
 								}
 								break;
 							case "Cesium3DTileset_BM": //加载3DTileset地图服务--白膜
@@ -910,6 +895,12 @@
 
 				var imageryLayers = jt3d._viewer.imageryLayers;
 
+				// //标注层置顶
+				// if (store.markID) {
+				// 	console.log('标注id', store.markID)
+				// 	imageryLayers.raiseToTop(window[store.markID]);
+				// }
+
 				//设置图层初始顺序
 				imageryLayers.lowerToBottom(window[serviceId]);
 				imageryLayers.raise(window[serviceId]);
@@ -927,6 +918,9 @@
 								imageryLayers.raise(window[serviceId])
 								console.log('aaa', serviceId)
 
+							} else {
+								// imageryLayers.raiseToTop(window[store.markID]);
+								// break;
 							}
 						}
 					}