import configValue from "../config/config.js"; import { getProductValue } from "@/api/lang/pendingOrder"; class otgCesiumUtils { //初始化地图 static initCesium(divMapId) { let Cesium = window.Cesium; this.Cesium = Cesium; let options = { selectionIndicator: false, homeButton: false, //主页按钮,默认true // scene3DOnly: true, // 每个几何实例仅以3D渲染以节省GPU内存 animation: false, //动画控制,默认true baseLayerPicker: false, //是否显示图层选择控件 geocoder: false, //地名查找,默认true timeline: false, //时间线,默认true navigationHelpButton: false, //导航帮助说明,默认true sceneModePicker: false, //是否显示投影方式控件 infoBox: false, //点击要素之后显示的信息,默认true fullscreenButton: false, //全屏按钮,默认显示true navigationInstructionsInitiallyVisible: false, mapMode2D: Cesium.MapMode2D.INFINITE_SCROLL, imageryProvider: new Cesium.WebMapTileServiceImageryProvider({ url: "https://{s}.tianditu.gov.cn/img_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=6985de6622c7e2f3289da48e5a69021e", layer: "tdtBasicLayer", style: "default", maximumLevel: 18, format: "image/jpeg", tileMatrixSetID: "GoogleMapsCompatible", show: true, subdomains: ["t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"] }), // html2canvas截图场景黑屏解决 contextOptions: { webgl: { alpha: true, depth: true, stencil: true, antialias: true, premultipliedAlpha: true, //通过canvas.toDataURL()实现截图需要将该项设置为true preserveDrawingBuffer: true, failIfMajorPerformanceCaveat: true } } }; let farViewer = new Cesium.Viewer(divMapId[0], options); let nearViewer = new Cesium.Viewer(divMapId[1], options); window.selfDefine.farViewer = farViewer; window.selfDefine.nearViewer = nearViewer; this.farViewer = farViewer; this.nearViewer = nearViewer; farViewer.scene.globe.depthTestAgainstTerrain = false; nearViewer.scene.globe.depthTestAgainstTerrain = false; } //添加wms static addlayer(geoWorkspace, layerName) { // let privide2 = new Cesium.WebMapServiceImageryProvider({ // url: "http://127.0.0.1:8087/geoserver/microwave/wms", //服务地址 // layers: geoWorkspace+':'+layerName, //服务图层,需要修改成你自己发布的名称 // parameters: { // service: "WMS", // format: "image/png", // transparent: true // } // }); // let layer2= new this.Cesium.ImageryLayer(privide2) // this.privide2=layer2 let privide1 = this.creatTwoViewerLayer(geoWorkspace, layerName); let layer1 = new Cesium.ImageryLayer(privide1); let privide2 = this.creatTwoViewerLayer(geoWorkspace, layerName); let layer2 = new Cesium.ImageryLayer(privide2); this.nearViewer.imageryLayers.add(layer1); this.farViewer.imageryLayers.add(layer2); } //切换添加产品展示图层 static addFarlayer(geoWorkspace, layerName) { let privide2 = this.creatTwoViewerLayer(geoWorkspace, layerName); let layer2 = new Cesium.ImageryLayer(privide2); this.farViewer.imageryLayers.add(layer2); } //切换添加局部放大图图层 static addNearlayer(geoWorkspace, layerName) { let privide1 = this.creatTwoViewerLayer(geoWorkspace, layerName); let layer1 = new Cesium.ImageryLayer(privide1); this.nearViewer.imageryLayers.add(layer1); } static creatTwoViewerLayer(geoWorkspace, layerName) { let matrixIds = [ "EPSG:4326:0", "EPSG:4326:1", "EPSG:4326:2", "EPSG:4326:3", "EPSG:4326:4", "EPSG:4326:5", "EPSG:4326:6", "EPSG:4326:7", "EPSG:4326:8", "EPSG:4326:9", "EPSG:4326:10", "EPSG:4326:11", "EPSG:4326:12", "EPSG:4326:13", "EPSG:4326:14", "EPSG:4326:15", "EPSG:4326:16", "EPSG:4326:17", "EPSG:4326:18", "EPSG:4326:19", "EPSG:4326:20", "EPSG:4326:21" ]; return new Cesium.WebMapTileServiceImageryProvider({ url: configValue.urlprefix.otgGeoServerUrl, // url: 'http://39.105.100.186:8087/geoserver/gwc/service/wmts', layer: geoWorkspace + ":" + layerName, style: "", format: "image/png", tileMatrixSetID: "EPSG:4326", tileMatrixLabels: matrixIds, tilingScheme: new Cesium.GeographicTilingScheme({ numberOfLevelZeroTilesX: 2, numberOfLevelZeroTilesY: 1 }) }); } // 定位到tif影像处 static flyToLayer(cLon, cLat) { this.farViewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(cLon, cLat, 50000.0) }); this.nearViewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(cLon, cLat, 30000.0) }); } //删除wms static closelayer() { //wms服务 this.farViewer.imageryLayers.remove(this.privide); this.nearViewer.imageryLayers.remove(this.privide); } static clearFarLayers() { for (var i = this.farViewer.imageryLayers.length - 1; i >= 0; --i) { if (!this.farViewer.imageryLayers.get(i).isBaseLayer()) { this.farViewer.imageryLayers.remove(this.farViewer.imageryLayers.get(i)); } } } static clearNearLayers() { for (var i = this.nearViewer.imageryLayers.length - 1; i >= 0; --i) { if (!this.nearViewer.imageryLayers.get(i).isBaseLayer()) { this.nearViewer.imageryLayers.remove(this.nearViewer.imageryLayers.get(i)); } } } static addPointToViewer(pLon, pLat, pAlt) { this.farViewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(pLon, pLat, pAlt), point: { pixelSize: 10, color: Cesium.Color.YELLOW } }); } static addPointToFarViewer(pLon, pLat, pAlt) { var peOfFarViewer = this.farViewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(pLon, pLat, pAlt), point: { pixelSize: 10, color: Cesium.Color.YELLOW } }); this.farViewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(pLon, pLat, 5000) }); } static addPointToNearViewer(pLon, pLat, pAlt) { var peOfNearViewer = this.nearViewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(pLon, pLat, pAlt), point: { pixelSize: 10, color: Cesium.Color.YELLOW } }); this.nearViewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(pLon, pLat, 1000) }); } static removePoint() { this.farViewer.entities.removeAll(); this.nearViewer.entities.removeAll(); } static drawPoint(callback) { let self = this; //坐标存储 // let positions,newPoi; this.handler = new Cesium.ScreenSpaceEventHandler(self.nearViewer.scene.canvas); let ellipsoid = self.nearViewer.scene.globe.ellipsoid; //单击鼠标左键画点 this.handler.setInputAction(function (movement) { let cartesian = self.nearViewer.scene.camera.pickEllipsoid( movement.position, self.nearViewer.scene.globe.ellipsoid ); let c = ellipsoid.cartesianToCartographic(cartesian); let spLon = Cesium.Math.toDegrees(c.longitude).toFixed(8); let spLat = Cesium.Math.toDegrees(c.latitude).toFixed(8); let spAlt = c.height.toFixed(2); const positions = [spLon, spLat, spAlt]; self.nearViewer.entities.removeById("theSamePoint"); const newPoi = self.nearViewer.entities.add({ id: "theSamePoint", position: cartesian, point: { color: Cesium.Color.RED, pixelSize: 10 // heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); callback(positions); }, Cesium.ScreenSpaceEventType.LEFT_CLICK); } static stopDrowPoi() { this.handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); } //Far viewer 鼠标点击 static handleClickFar() { var scene = this.farViewer.scene; var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas); const that = this; handler.setInputAction(function onLeftClick(movement) { //清除历史单击点 handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); var cartesian = that.farViewer.camera.pickEllipsoid( movement.position, scene.globe.ellipsoid ); if (cartesian) { var cartographic = Cesium.Cartographic.fromCartesian(cartesian); var longitudeString = Cesium.Math.toDegrees(cartographic.longitude).toFixed(6); var latitudeString = Cesium.Math.toDegrees(cartographic.latitude).toFixed(6); } //取回像元值 let pValue = 0; that.farViewer.dataSources.removeAll(); const dataSource = new Cesium.CustomDataSource("textPoint"); // const of = new FormData(); // of.append("dataPath", sessionStorage.getItem("tifPath")); // of.append("lon", longitudeString); // of.append("lat", latitudeString); const of = { angleDataIds: [], geoX: longitudeString, geoY: latitudeString, metaDataId: sessionStorage.getItem('metaDataId'), referImageIds: [] } getProductValue(of).then(res => { if (res.code == 200) pValue = res.data.imagePixel; dataSource.entities.add({ position: new Cesium.Cartesian3.fromDegrees( Number(longitudeString), Number(latitudeString), 50 ), label: { text: "像素值:" + pValue, font: "20px sans-serif", showBackground: true, eyeOffset: new Cesium.Cartesian3(0, 3.5, 0), fillColor: Cesium.Color.BLACK, //字体颜色 backgroundColor: Cesium.Color.WHITE, //背景颜色 style: Cesium.LabelStyle.FILL, //label样式 outlineWidth: 2, verticalOrigin: Cesium.VerticalOrigin.CENTER, //垂直位置 horizontalOrigin: Cesium.HorizontalOrigin.CENTER, //水平位置 pixelOffset: new Cesium.Cartesian2(0, -20) //偏移 } }); that.farViewer.dataSources.add(dataSource); }); }, Cesium.ScreenSpaceEventType.LEFT_CLICK); } //Near viewer 鼠标点击 static handleClickNear() { var scene = this.nearViewer.scene; var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas); const that = this; handler.setInputAction(function onLeftClick(movement) { //清除历史单击点 handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); var cartesian = that.nearViewer.camera.pickEllipsoid( movement.position, scene.globe.ellipsoid ); if (cartesian) { var cartographic = Cesium.Cartographic.fromCartesian(cartesian); var longitudeString = Cesium.Math.toDegrees(cartographic.longitude).toFixed(6); var latitudeString = Cesium.Math.toDegrees(cartographic.latitude).toFixed(6); } //取回像元值 let pValue = 0; that.nearViewer.dataSources.removeAll(); const dataSource = new Cesium.CustomDataSource("textPoint"); // const of = new FormData(); // of.append("dataPath", sessionStorage.getItem("tifPath")); // of.append("lon", longitudeString); // of.append("lat", latitudeString); const of = { angleDataIds: [], geoX: longitudeString, geoY: latitudeString, metaDataId: sessionStorage.getItem('metaDataId'), referImageIds: [] } getProductValue(of).then(res => { if (res.code == 200) pValue = res.data.imagePixel; dataSource.entities.add({ position: new Cesium.Cartesian3.fromDegrees( Number(longitudeString), Number(latitudeString), 50 ), label: { text: "像素值:" + pValue, font: "20px sans-serif", showBackground: true, eyeOffset: new Cesium.Cartesian3(0, 3.5, 0), fillColor: Cesium.Color.BLACK, //字体颜色 backgroundColor: Cesium.Color.WHITE, //背景颜色 style: Cesium.LabelStyle.FILL, //label样式 outlineWidth: 2, verticalOrigin: Cesium.VerticalOrigin.CENTER, //垂直位置 horizontalOrigin: Cesium.HorizontalOrigin.CENTER, //水平位置 pixelOffset: new Cesium.Cartesian2(0, -20) //偏移 } }); that.nearViewer.dataSources.add(dataSource); }); }, Cesium.ScreenSpaceEventType.LEFT_CLICK); } } export default otgCesiumUtils;