From 77f9937b32f67f5b7d5476b0a1db19956702c0c8 Mon Sep 17 00:00:00 2001 From: Surpriseplus <845948745@qq.com> Date: 星期二, 10 十月 2023 09:45:34 +0800 Subject: [PATCH] 代码更新 --- src/assets/js/Map/menuTool.js | 297 +++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 267 insertions(+), 30 deletions(-) diff --git a/src/assets/js/Map/menuTool.js b/src/assets/js/Map/menuTool.js index e9617c2..f83b1a7 100644 --- a/src/assets/js/Map/menuTool.js +++ b/src/assets/js/Map/menuTool.js @@ -5,6 +5,7 @@ import CryptoJS from "crypto-js"; // import { Store } from "vuex"; import store from "@/store"; +import temporaryTool from "./temporaryTools"; const menuTool = { toolMenu: null, toolFlag: null, @@ -74,12 +75,15 @@ this.snapshot(); break; case "f2": //鐐规煡璇� + this.setClearLocation('绌洪棿鏌ヨ_鏍囩粯'); this.spatialPointQuery(); break; case "f3": //绾挎煡璇� + this.setClearLocation('绌洪棿鏌ヨ_鏍囩粯'); this.spatialLineQuery(); break; case "f4": //闈㈡煡璇� + this.setClearLocation('绌洪棿鏌ヨ_鏍囩粯'); this.spatialQuery(); break; case "g1": //鍧愭爣瀹氫綅 @@ -104,29 +108,15 @@ if (this.localPoint) { this.setLocalPositionClose(); } - // var position = { - // X: parseFloat(res.lon), - // Y: parseFloat(res.lat), - // Altitude: parseFloat(res.alt), - // }; - // this.localPoint = window.sgworld.Creator.CreateImageLabel( - // position, - // config.StaticFileBaseUrl + "/Workers/image/mark.png", - // {}, - // 0, - // "鏍囩鐐�" - // ); - // var id = this.localPoint.item.id; - // window.sgworld.Navigate.flyToObj(this.localPoint.item); this.localPoint = window.Viewer.entities.add({ name: '鍧愭爣瀹氫綅', - position: Cesium.Cartesian3.fromDegrees(parseFloat(res.lon), parseFloat(res.lat), res.alt == null ? parseFloat(res.alt) : 0), + position: Cesium.Cartesian3.fromDegrees(parseFloat(res.lon), parseFloat(res.lat), res.alt == null ? 0 : parseFloat(res.alt)), billboard: { image: config.StaticFileBaseUrl + '/Workers/image/location.png', // 璁剧疆璐村湴 heightReference: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.4), verticalOrigin: Cesium.VerticalOrigin.BOTTOM, - scale: 1.0, + scale: 0.3, }, }); this.setViewerFlyTo(this.localPoint) @@ -196,17 +186,23 @@ var line_data = this.setCartesianToEightFour(res[i]) std.push([line_data.lng, line_data.lat]) } + sgworld.Creator.SimpleGraphic.clear(); + this.setShowSpatialShp(std, 'polyline') + + var line = turf.lineString(std, { name: "polyline" }) var restVal = turf.buffer(line, this.bufferSize, { units: "meters" }) that.setSpatialQuery(restVal) }); }, + spatialPointQuery() { var that = this; sgworld.Creator.createSimpleGraphic('point', {}, (entity) => { var res = entity.position.getValue(); var val = that.setCartesianToEightFour(res) sgworld.Creator.SimpleGraphic.clear(); + that.setShowSpatialShp(val, 'Point') var options = { steps: 10, units: "meters", @@ -216,6 +212,59 @@ that.setSpatialQuery(circle) }); }, + setShowSpatialShp(res, type) { + var position = []; + + var name = '绌洪棿鏌ヨ_鏍囩粯' + switch (type) { + case 'polyline': + for (var i in res) { + position.push(res[i][0], res[i][1]) + } + window.Viewer.entities.add({ + name: name, + polyline: { + positions: Cesium.Cartesian3.fromDegreesArray(position), + width: 10.0, + material: new Cesium.PolylineOutlineMaterialProperty({ + color: Cesium.Color.GREEN.withAlpha(0.2), + outlineWidth: 1, + outlineColor: Cesium.Color.WHITE, + }), + clampToGround: true, + + }, + }) + break; + case 'Point': + window.Viewer.entities.add({ + name: name, + position: Cesium.Cartesian3.fromDegrees(res.lng, res.lat), + point: { + color: Cesium.Color.GREEN.withAlpha(0.2), + pixelSize: 20, + heightReference: Cesium.HeightReference.CLAMP_TO_GROUND + } + }); + break; + case 'Polygon': + window.Viewer.entities.add({ + name: name, + polygon: { + hierarchy: { positions: Cesium.Cartesian3.fromDegreesArray(res) }, + outline: true, + outlineWidth: 100, + arcType: Cesium.ArcType.RHUMB, + material: Cesium.Color.GREEN.withAlpha(0.2), + outline: true, // height is required for outline to display + outlineColor: Cesium.Color.WHITE, + } + }); + break; + } + + }, + setCartesianToEightFour(res) { var std = {} let ellipsoid = Viewer.scene.globe.ellipsoid @@ -243,6 +292,10 @@ var south = Cesium.Math.toDegrees( entity.rectangle._coordinates.getValue().south ); // 鏍规嵁寮у害鑾峰彇鍒扮含搴� + + var arr = [west, north, east, north, east, south, west, south, west, north]; + this.setShowSpatialShp(arr, 'Polygon') + sgworld.Creator.SimpleGraphic.clear(); var polygon = turf.polygon([ @@ -387,15 +440,9 @@ var south1 = ss[1]; this.exportSquare = ss; var geometry = Cesium.Rectangle.fromDegrees(west1, south1, east1, north1); - - - Viewer.camera.setView({ destination: Cesium.Rectangle.fromDegrees(west, south, east, north), }); - - - setTimeout(() => { window.functionForJs({ type: "exportMap", @@ -405,12 +452,182 @@ }, // 鍒涘缓鍥惧舰 createSimpleGraphic(type, scene) { + var that = this; sgworld.Creator.createSimpleGraphic(type, {}, (entity) => { + if (scene === "square") { this.createRectangle(entity); } + if (!scene) { + temporaryTool.setInsertEntityObj(type, entity) + } }); }, + getEntityAttribute(type, res) { + var obj = {} + store.state.temporaryLayer = null; + if (type == 'point') { + var mataColor = res.point.color._value; + var outlineColor = res.point.outlineColor._value; + + obj = { + id: (new Date()).getTime(), + cnName: res.name, + metaAlpha: mataColor.alpha, + outlineAlpha: outlineColor.alpha, + metaColor: this.colorRgbToHex('rgb(' + (mataColor.red * 255) + ',' + (mataColor.green * 255) + ',' + (mataColor.blue * 255) + ')'), + outlineColor: this.colorRgbToHex('rgb(' + (outlineColor.red * 255) + ',' + (outlineColor.green * 255) + ',' + (outlineColor.blue * 255) + ')'), + pixelSize: res.point.pixelSize._value, + outlineWidth: res.point.outlineWidth._value, + near: res.point._distanceDisplayCondition._value.near, + far: res.point._distanceDisplayCondition._value.far, + geometry: this.setCartesianToEightFour(res.position.getValue()), + type: 'point', + shpType: 'temporaryLayer', + layerType: '鍩烘湰鐐�', + + } + + } else if (type == 'label') { + var mataColor = res.label.fillColor._value; + var outlineColor = res.label.outlineColor._value; + var backColor = res.label.backgroundColor._value; + obj = { + id: (new Date()).getTime(), + cnName: res.name, + text: res.label.text._value, + font: res.label.font._value, + metaAlpha: mataColor.alpha, + outlineAlpha: outlineColor.alpha, + backAlpha: backColor.alpha, + backColor: this.colorRgbToHex('rgb(' + (backColor.red * 255) + ',' + (backColor.green * 255) + ',' + (backColor.blue * 255) + ')'), + metaColor: this.colorRgbToHex('rgb(' + (mataColor.red * 255) + ',' + (mataColor.green * 255) + ',' + (mataColor.blue * 255) + ')'), + outlineColor: this.colorRgbToHex('rgb(' + (outlineColor.red * 255) + ',' + (outlineColor.green * 255) + ',' + (outlineColor.blue * 255) + ')'), + scale: res.label.scale._value, + verticalOrigin: Cesium.VerticalOrigin.CENTER,//鍨傜洿浣嶇疆 + horizontalOrigin: Cesium.HorizontalOrigin.CENTER,//姘村钩浣嶇疆 + outlineWidth: res.label.outlineWidth._value, + showBackground: false, + outline: true, + near: res.label._distanceDisplayCondition._value.near, + far: res.label._distanceDisplayCondition._value.far, + geometry: this.setCartesianToEightFour(res.position.getValue()), + type: 'label', + shpType: 'temporaryLayer', + layerType: '鏂囨湰鐐�', + heightReference: true, + checked: true + } + + } else if (type == 'polygon') { + var mataColor = res.polygon.material.color._value; + var outlineColor = res.polygon.outlineColor._value; + var val = res.polygon.hierarchy.getValue().positions; + var geom = []; + for (var i in val) { + var coord = this.setCartesianToEightFour(val[i]) + geom.push(coord.lng, coord.lat) + } + obj = { + id: (new Date()).getTime(), + cnName: res.name, + metaAlpha: mataColor.alpha, + outlineAlpha: outlineColor.alpha, + metaColor: this.colorRgbToHex('rgb(' + (mataColor.red * 255) + ',' + (mataColor.green * 255) + ',' + (mataColor.blue * 255) + ')'), + outlineColor: this.colorRgbToHex('rgb(' + (outlineColor.red * 255) + ',' + (outlineColor.green * 255) + ',' + (outlineColor.blue * 255) + ')'), + near: res.polygon._distanceDisplayCondition._value.near, + far: res.polygon._distanceDisplayCondition._value.far, + geometry: geom, + type: 'polygon', + shpType: 'temporaryLayer', + layerType: '澶氳竟褰�', + heightReference: true, + checked: true + } + } else if (type == 'polyline') { + + var mataColor = res.polyline.material.color._value; + var outlineColor = res.polyline.material.outlineColor._value; + var val = res.polyline.positions.getValue(); + var geom = []; + for (var i in val) { + var coord = this.setCartesianToEightFour(val[i]) + geom.push([coord.lng, coord.lat]) + } + obj = { + id: (new Date()).getTime(), + cnName: res.name, + metaColor: this.colorRgbToHex('rgb(' + (mataColor.red * 255) + ',' + (mataColor.green * 255) + ',' + (mataColor.blue * 255) + ')'), + outlineColor: this.colorRgbToHex('rgb(' + (outlineColor.red * 255) + ',' + (outlineColor.green * 255) + ',' + (outlineColor.blue * 255) + ')'), + near: res.polyline._distanceDisplayCondition._value.near, + far: res.polyline._distanceDisplayCondition._value.far, + metaAlpha: mataColor.alpha, + outlineAlpha: outlineColor.alpha, + outlineWidth: res.polyline.material.outlineWidth._value, + width: res.polyline.width, + geometry: geom, + type: 'polyline', + shpType: 'temporaryLayer', + layerType: '绾�', + heightReference: true, + checked: true + } + } else if (type === 'rectangle') { + + var mataColor = res.rectangle.material.color._value; + var outlineColor = res.rectangle.outlineColor._value; + var west = Cesium.Math.toDegrees( + res.rectangle._coordinates.getValue().west + ); // 鏍规嵁寮у害鑾峰彇鍒扮粡搴� + var east = Cesium.Math.toDegrees( + res.rectangle._coordinates.getValue().east + ); // 鏍规嵁寮у害鑾峰彇鍒扮含搴� + var north = Cesium.Math.toDegrees( + res.rectangle._coordinates.getValue().north + ); // 鏍规嵁寮у害鑾峰彇鍒扮粡搴� + var south = Cesium.Math.toDegrees( + res.rectangle._coordinates.getValue().south + ); // 鏍规嵁寮у害鑾峰彇鍒扮含搴� + var geom = [west, south, east, north] + obj = { + id: (new Date()).getTime(), + cnName: res.name, + metaColor: this.colorRgbToHex('rgb(' + (mataColor.red * 255) + ',' + (mataColor.green * 255) + ',' + (mataColor.blue * 255) + ')'), + outlineColor: this.colorRgbToHex('rgb(' + (outlineColor.red * 255) + ',' + (outlineColor.green * 255) + ',' + (outlineColor.blue * 255) + ')'), + near: res.rectangle._distanceDisplayCondition._value.near, + far: res.rectangle._distanceDisplayCondition._value.far, + metaAlpha: mataColor.alpha, + outlineAlpha: outlineColor.alpha, + outlineWidth: res.rectangle.outlineWidth._value, + rotation: 0, + geometry: geom, + type: 'rectangle', + shpType: 'temporaryLayer', + layerType: '鐭╁舰', + heightReference: true, + } + } + + store.state.temporaryLayer = obj; + + }, + + colorRgbToHex(str) { + + let reg = /^(rgb|RGB)/; + if (!reg.test(str)) { return; } + var rgb = str.slice(4, str.length - 1).split(",") + // 灏哛GB鑹插彿鎷嗗垎涓虹孩銆佺豢銆佽摑涓変釜閫氶亾鐨勫�� + var r = parseInt(rgb[0]); + var g = parseInt(rgb[1]); + var b = parseInt(rgb[2]); + + + return "#" + ((r << 16) | (g << 8) | b).toString(16).padStart(6, '0'); + + + }, + //鍦ㄧ嚎鍒跺浘 setThematicMap() { earthCtrl.coreMap.scene.mode = SmartEarth.Cesium.SceneMode.SCENE2D; @@ -577,7 +794,6 @@ //绌洪棿鏌ヨ灞炴�у畾浣� spaceLocation(res) { var name = '绌洪棿鏌ヨ'; - this.setClearLocation(name); switch (res.type) { case 'MultiPolygon': @@ -617,12 +833,20 @@ outline: true, outlineWidth: 100, arcType: Cesium.ArcType.RHUMB, - material: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.4), + material: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.5), outline: true, // height is required for outline to display outlineColor: Cesium.Color.DODGERBLUE, } + }); - this.setViewerFlyTo(locationPolygonEntity) + window.Viewer.flyTo(locationPolygonEntity, { + offset: { + heading: Cesium.Math.toRadians(0.0), + pitch: Cesium.Math.toRadians(-90), + range: 0 + } + } + ); }, setLocationPoint(res, name) { const position = window.Viewer.entities.add({ @@ -631,13 +855,19 @@ billboard: { image: config.StaticFileBaseUrl + '/Workers/image/location.png', // 璁剧疆璐村湴 - heightReference: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.4), + heightReference: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.5), verticalOrigin: Cesium.VerticalOrigin.BOTTOM, - scale: 1.0, + scale: 0.3, }, }); - this.setViewerFlyTo(position) + window.Viewer.flyTo(position, { + offset: { + heading: Cesium.Math.toRadians(0.0), + pitch: Cesium.Math.toRadians(-45), + range: 40000 + } + }); }, setViewerFlyTo(entity) { @@ -663,7 +893,7 @@ positions: Cesium.Cartesian3.fromDegreesArray(position), width: 10.0, material: new Cesium.PolylineOutlineMaterialProperty({ - color: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.4), + color: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.5), outlineWidth: 1, outlineColor: Cesium.Color.CORNFLOWERBLUE, }), @@ -671,7 +901,14 @@ }, }) - this.setViewerFlyTo(polyline) + window.Viewer.flyTo(locationPolygonEntity, { + offset: { + heading: Cesium.Math.toRadians(0.0), + pitch: Cesium.Math.toRadians(-90), + range: 0 + } + } + ); } }; -- Gitblit v1.9.3