| | |
| | | <template> |
| | | <div id="mapdiv"></div> |
| | | <div id="mapdiv" class="mapdiv"> |
| | | <div class="bufferBox" v-if="showBufferBoxDialog"> |
| | | <el-card class="box-card"> |
| | | <div slot="header" class="clearfix"> |
| | | <span>缓冲区分析</span> |
| | | <div style="float: right; cursor: pointer"> |
| | | <i class="el-icon-close" @click="closeBufferBox(1)"></i> |
| | | </div> |
| | | </div> |
| | | <div class="box-body"> |
| | | <el-form ref="form" :model="bufFrom" label-width="100px"> |
| | | <el-form-item label="缓冲半径(米):"> |
| | | <el-input v-model="bufFrom.val"></el-input> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button @click="addBuffer(1)" type="info">点</el-button> |
| | | <el-button @click="addBuffer(2)" type="info">线</el-button> |
| | | <el-button @click="addBuffer(3)" type="info">面</el-button> |
| | | <el-button @click="clearBuffer" type="info">清除</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | <div class="coordLocalBox" v-if="showCoordLocalBoxDialog"> |
| | | <el-card class="box-card"> |
| | | <div slot="header" class="clearfix"> |
| | | <span>坐标定位</span> |
| | | <div style="float: right; cursor: pointer"> |
| | | <i class="el-icon-close" @click="closeBufferBox(2)"></i> |
| | | </div> |
| | | </div> |
| | | <div class="box-body"> |
| | | <el-form ref="form" :model="coordFrom" label-width="50px"> |
| | | <el-form-item label="经度:"> |
| | | <el-input v-model="coordFrom.lon"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="纬度:"> |
| | | <el-input v-model="coordFrom.lat"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="高度:"> |
| | | <el-input v-model="coordFrom.height"></el-input> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button @click="setCoordLocal" type="info">定位</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: '', |
| | | data() { |
| | | return {}; |
| | | return { |
| | | buffer: null, |
| | | showBufferBoxDialog: false, |
| | | showCoordLocalBoxDialog: false, |
| | | bufFrom: { |
| | | val: 50, |
| | | }, |
| | | coordFrom: { |
| | | lon: 110, |
| | | lat: 32, |
| | | height: 8000000, |
| | | }, |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.init3DMap(); |
| | | this.$bus.$on('mapChangeBox', (res) => { |
| | | this.showChangeBox(res); |
| | | }); |
| | | }, |
| | | methods: { |
| | | init3DMap() { |
| | | //地图初始化 |
| | | window.sgworld = new SmartEarth.SGWorld('mapdiv', { |
| | | url: '/SmartEarthSDK/Workers/image/earth.jpg', |
| | | licenseServer: 'http://192.168.20.39/LFServer', |
| | | licenseServer: window.sceneConfig.licenseServer, |
| | | }); |
| | | window.Viewer = sgworld._Viewer; |
| | | sgworld.Navigate.Stop(); //取消飞行状态 |
| | | window.Viewer = window.sgworld._Viewer; |
| | | //定位 |
| | | // sgworld.Navigate.jumpTo({ |
| | | // //跳转视角 |
| | | // destination: new Cesium.Cartesian3.fromDegrees(110, 32, 8000000), |
| | | // }); |
| | | sgworld.Navigate.jumpTo({ |
| | | //跳转视角 |
| | | destination: new Cesium.Cartesian3.fromDegrees(110, 32, 8000000), |
| | | destination: { |
| | | x: 311837.3471863137, |
| | | y: 5628280.936629815, |
| | | z: 2992581.921482893, |
| | | }, |
| | | orientation: { |
| | | heading: 2.5028896264234364, |
| | | pitch: -0.2201285642360813, |
| | | roll: 0.0, |
| | | }, |
| | | }); |
| | | Viewer._enableInfoOrSelection = false; |
| | | //显示fps |
| | | sgworld._Viewer.scene.debugShowFramesPerSecond = false; |
| | | //mpt添加 |
| | | Viewer.scene.debugShowFramesPerSecond = false; |
| | | //导航控件 |
| | | window.sgworld.navControl('nav', false); |
| | | //比例尺 |
| | | window.sgworld.navControl('scale', false); |
| | | |
| | | //影像对比设置 |
| | | var base = { |
| | | url: 'https://a.tile.openstreetmap.org/', |
| | | }; |
| | | window.openStreetMap = sgworld.Creator.createImageryProvider( |
| | | 'OpenStreetMap', |
| | | 'OpenStreetMap', |
| | | base, |
| | | '0', |
| | | undefined, |
| | | true, |
| | | '' |
| | | ); |
| | | openStreetMap.item.show = false; |
| | | //mpt加载 |
| | | var option = { |
| | | url: 'http://183.162.245.49:82/SG/Elevation', |
| | | layerName: 'zhufeng.397336.mpt', |
| | | url: window.sceneConfig.mpt.url, |
| | | layerName: window.sceneConfig.mpt.name, |
| | | requestVertexNormals: true, |
| | | }; |
| | | sgworld.Creator.sfsterrainprovider('', option, '', true, ''); |
| | | //导航控件 |
| | | document.getElementById('distanceLegendDiv').style.display = 'none'; |
| | | //比例尺 |
| | | sgworld.navControl('enableCompass', false); |
| | | //sgworld.navControl("enableDistanceLegend", false); |
| | | setTimeout(() => {}, 10000); |
| | | sgworld.Creator.sfsterrainprovider('mpt', option, '', true, ''); |
| | | window.elevationTool = new SmartEarth.ElevationTool(window.sgworld); |
| | | //模型加载 |
| | | }, |
| | | //显示弹窗 |
| | | showChangeBox(res) { |
| | | if (res.name == 'Query') { |
| | | if (res.id == '6') { |
| | | } else if (res.id == '7') { |
| | | } else { |
| | | this.showBufferBoxDialog = true; |
| | | } |
| | | } else if (res.name == 'Coord') { |
| | | if (res.id == '1') { |
| | | this.showCoordLocalBoxDialog = true; |
| | | } |
| | | } |
| | | }, |
| | | closeBufferBox(res) { |
| | | switch (res) { |
| | | case 1: |
| | | this.showBufferBoxDialog = false; |
| | | this.clearBuffer(); |
| | | break; |
| | | case 2: |
| | | this.showCoordLocalBoxDialog = false; |
| | | break; |
| | | } |
| | | }, |
| | | //定位 |
| | | setCoordLocal() { |
| | | var lon = parseFloat(this.coordFrom.lon); |
| | | var lat = parseFloat(this.coordFrom.lat); |
| | | var height = parseFloat(this.coordFrom.height); |
| | | sgworld.Navigate.jumpTo({ |
| | | //跳转视角 |
| | | destination: new Cesium.Cartesian3.fromDegrees(lon, lat, height), |
| | | }); |
| | | }, |
| | | //缓冲区分析 |
| | | clearBuffer() { |
| | | if (this.buffer == null) return; |
| | | this.buffer && this.buffer.clearBuff(); |
| | | this.buffer = null; |
| | | }, |
| | | getBufferTable(type) { |
| | | const points = |
| | | this.buffer.this_buff.buff.polygon.hierarchy.getValue().positions; |
| | | let geometrys = ''; |
| | | let firstPoint; |
| | | let degrees = ''; |
| | | points.forEach((p, i) => { |
| | | degrees = window.sgworld.Core.toDegrees(p); |
| | | geometrys += '[' + degrees.lon + ',' + degrees.lat + '],'; |
| | | i === 0 && (firstPoint = '[' + degrees.lon + ',' + degrees.lat + ']'); |
| | | }); |
| | | geometrys += firstPoint; |
| | | if (geometrys.length != 0) geometrys.trimEnd(','); |
| | | geometrys = '{rings:[[' + geometrys + ']]}'; |
| | | }, |
| | | addBuffer(res) { |
| | | this.clearBuffer(); |
| | | var buffRadius = this.bufFrom.val; |
| | | switch (res) { |
| | | case 1: |
| | | this.buffer = sgworld.Analysis.DrawPointBuffer( |
| | | buffRadius, |
| | | (event) => { |
| | | this.getBufferTable('point'); |
| | | } |
| | | ); |
| | | break; |
| | | case 2: |
| | | this.buffer = sgworld.Analysis.DrawPolylineBuffer( |
| | | buffRadius, |
| | | (event) => { |
| | | this.getBufferTable('line'); |
| | | } |
| | | ); |
| | | break; |
| | | case 3: |
| | | this.buffer = sgworld.Analysis.DrawPolygonBuffer( |
| | | buffRadius, |
| | | (event) => { |
| | | this.getBufferTable('polygon'); |
| | | } |
| | | ); |
| | | break; |
| | | } |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | #mapdiv { |
| | | .mapdiv { |
| | | width: 100%; |
| | | height: 100%; |
| | | overflow: hidden; |
| | |
| | | padding: 0; |
| | | position: relative; |
| | | } |
| | | .bufferBox { |
| | | width: 412px; |
| | | height: 230px; |
| | | z-index: 40; |
| | | position: absolute; |
| | | right: 1%; |
| | | bottom: 1%; |
| | | } |
| | | .coordLocalBox { |
| | | width: 350px; |
| | | height: 370px; |
| | | z-index: 40; |
| | | position: absolute; |
| | | right: 1%; |
| | | bottom: 1%; |
| | | } |
| | | .box-card { |
| | | background-color: rgba(0, 0, 0, 0.6); |
| | | border: 1px solid rgba(32, 160, 255, 0.6); |
| | | color: white; |
| | | } |
| | | .box-body { |
| | | padding: 18px; |
| | | } |
| | | /deep/ .el-form-item__label { |
| | | color: white !important; |
| | | } |
| | | </style> |