<template>
|
<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 class="toponymicLocalBox" v-if="showToponymicLocalBoxDialog">
|
<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(3)"></i>
|
</div>
|
</div>
|
<div class="box-body">
|
<el-form :model="comprehensive" :inline="true" label-width="50px">
|
<el-form-item label="地名:">
|
<el-input
|
style="width: 200px"
|
v-model="comprehensive.name"
|
></el-input>
|
</el-form-item>
|
<el-form-item>
|
<el-button type="info">查询</el-button>
|
</el-form-item>
|
</el-form>
|
<el-table :data="tableData" height="200px" style="width: 100%">
|
<el-table-column
|
align="center"
|
type="index"
|
label="序号"
|
width="70px"
|
/>
|
<el-table-column prop="name" align="center" label="定位">
|
<template slot-scope="scope">
|
<el-button
|
@click="handleLocation(scope.$index, scope.row)"
|
size="small"
|
icon="el-icon-place"
|
></el-button>
|
</template>
|
</el-table-column>
|
<el-table-column prop="name" align="center" label="地名">
|
</el-table-column>
|
</el-table>
|
<div style="margin-top: 10px" class="pagination_box">
|
<el-pagination
|
@size-change="handleSizeChange"
|
@current-change="handleCurrentChange"
|
:current-page="listData.pageIndex"
|
:page-sizes="[10, 20, 30, 40]"
|
:page-size="listData.pageSize"
|
layout="total, sizes, prev, pager, next, jumper"
|
:total="count"
|
>
|
</el-pagination>
|
</div>
|
</div>
|
</el-card>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import {
|
select_Comprehensive_ByPageAndCount,
|
select_Comprehensive_SelectWktById,
|
} from '../api/api';
|
export default {
|
name: '',
|
data() {
|
return {
|
buffer: null,
|
showBufferBoxDialog: false,
|
showCoordLocalBoxDialog: false,
|
showToponymicLocalBoxDialog: false,
|
comprehensive: {},
|
bufFrom: {
|
val: 50,
|
},
|
coordFrom: {
|
lon: 110,
|
lat: 32,
|
height: 8000000,
|
},
|
listData: {
|
name: null,
|
pageIndex: 1,
|
pageSize: 10,
|
},
|
count: 0,
|
tableData: [],
|
imagePoint: null,
|
};
|
},
|
mounted() {
|
this.init3DMap();
|
this.$bus.$on('mapChangeBox', (res) => {
|
this.showChangeBox(res);
|
});
|
},
|
methods: {
|
init3DMap() {
|
//地图初始化
|
window.sgworld = new SmartEarth.SGWorld('mapdiv', {
|
licenseServer: window.sceneConfig.licenseServer,
|
});
|
window.Viewer = window.sgworld._Viewer;
|
//定位
|
// sgworld.Navigate.jumpTo({
|
// //跳转视角
|
// destination: new Cesium.Cartesian3.fromDegrees(110, 32, 8000000),
|
// });
|
sgworld.Navigate.jumpTo({
|
//跳转视角
|
destination: {
|
x: 311837.3471863137,
|
y: 5628280.936629815,
|
z: 2992581.921482893,
|
},
|
orientation: {
|
heading: 2.5028896264234364,
|
pitch: -0.2201285642360813,
|
roll: 0.0,
|
},
|
});
|
Viewer._enableInfoOrSelection = false;
|
//显示fps
|
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: window.sceneConfig.mpt.url,
|
layerName: window.sceneConfig.mpt.name,
|
requestVertexNormals: true,
|
};
|
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;
|
} else if (res.id == '2') {
|
this.showToponymicLocalBoxDialog = true;
|
this.getToponymicData();
|
}
|
}
|
},
|
handleSizeChange(val) {
|
this.listData.pageSize = val;
|
this.getToponymicData();
|
},
|
handleCurrentChange(val) {
|
this.listData.pageIndex = val;
|
this.getToponymicData();
|
},
|
async getToponymicData() {
|
if (this.listData.tab == '') {
|
delete this.listData.tab;
|
}
|
this.listData.name = this.comprehensive.name;
|
const data = await select_Comprehensive_ByPageAndCount(this.listData);
|
|
if (data.code != 200) {
|
this.$message.error('列表调用失败');
|
}
|
this.tableData = data.result;
|
this.count = data.count;
|
},
|
async handleLocation(index, row) {
|
const data = await select_Comprehensive_SelectWktById({ id: row.gid });
|
if (data.code != 200) {
|
this.$message.error('列表调用失败');
|
}
|
var val = data.result.slice(6, data.result.length - 1);
|
val = val.split(' ');
|
var position = {
|
X: parseFloat(val[0]),
|
Y: parseFloat(val[1]),
|
Altitude: 2000,
|
};
|
if (this.imagePoint != null) {
|
sgworld.Creator.DeleteObject(this.imagePoint);
|
this.imagePoint = null;
|
}
|
this.imagePoint = sgworld.Creator.CreateLabel(
|
position,
|
'',
|
SmartEarthRootUrl + 'Workers/image/mark.png',
|
{
|
disableDepthTestDistance: Infinity,
|
scale: 0.8,
|
},
|
0,
|
'巡检点'
|
);
|
|
sgworld.Navigate.jumpTo({
|
//跳转视角
|
destination: new Cesium.Cartesian3.fromDegrees(
|
parseFloat(val[0]),
|
parseFloat(val[1]),
|
10000
|
),
|
});
|
},
|
closeBufferBox(res) {
|
switch (res) {
|
case 1:
|
this.showBufferBoxDialog = false;
|
this.clearBuffer();
|
break;
|
case 2:
|
this.showCoordLocalBoxDialog = false;
|
break;
|
case 3:
|
this.showToponymicLocalBoxDialog = false;
|
if (this.imagePoint != null) {
|
sgworld.Creator.DeleteObject(this.imagePoint);
|
this.imagePoint = null;
|
}
|
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 {
|
width: 100%;
|
height: 100%;
|
overflow: hidden;
|
margin: 0;
|
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%;
|
}
|
.toponymicLocalBox {
|
width: 750px;
|
height: 450x;
|
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;
|
}
|
/deep/ .el-input__inner {
|
background: rgba(255, 255, 255, 0.2) !important;
|
color: white !important;
|
}
|
|
::v-deep .el-table,
|
.el-table__expanded-cell {
|
background-color: transparent;
|
color: white;
|
}
|
|
::v-deep .el-table tr {
|
background-color: transparent !important;
|
}
|
::v-deep .el-table tbody tr:hover > td {
|
background-color: rgba(255, 255, 255, 0.2) !important;
|
}
|
::v-deep .el-table–enable-row-transition .el-table__body td,
|
.el-table .cell {
|
background-color: transparent !important;
|
}
|
::v-deep .el-table th.el-table__cell {
|
background-color: transparent !important;
|
color: white;
|
}
|
::v-deep .el-pager li {
|
background-color: transparent !important;
|
color: white;
|
}
|
::v-deep .btn-prev {
|
background-color: transparent !important;
|
}
|
::v-deep .btn-next {
|
background-color: transparent !important;
|
color: white !important;
|
}
|
::v-deep .el-pagination__total {
|
color: white;
|
}
|
::v-deep .el-pagination__jump {
|
color: white;
|
}
|
</style>
|