| | |
| | | > |
| | | <div style="width: 274px; margin: 13px auto"> |
| | | <el-date-picker |
| | | ref="datePick" |
| | | v-model="datenum" |
| | | :picker-options="pickerOptions" |
| | | placeholder="选择日期" |
| | | popper-class="jlpMySelectPopper" |
| | | ref="datePick" |
| | | v-model="datenum" |
| | | value-format="yyyy-MM-dd" |
| | | style="width: 280px" |
| | | @change="chooseDate" |
| | | @blur="chooseDate1" |
| | | @focus="chooseDate2" |
| | | value-format="yyyy-MM-dd" |
| | | style="width: 280px" |
| | | > |
| | | </el-date-picker> |
| | | /> |
| | | </div> |
| | | <!-- <el-card class="box-card" style="width: 274px; margin: 13px auto"> --> |
| | | |
| | | <!-- <div v-else style="height: 180px; width: 274px; overflow-x: hidden"> |
| | | <div |
| | | style=" |
| | | width: 272px; |
| | | text-align: center; |
| | | height: 180px; |
| | | line-height: 140px; |
| | | font-size: 14px; |
| | | color: #5a5c60; |
| | | " |
| | | > |
| | | 无飞行记录 |
| | | </div> |
| | | </div> --> |
| | | <!-- </el-card> --> |
| | | |
| | | <div |
| | | style="width: 274px; margin: 10px auto; border-radius: 8px" |
| | | class="coll" |
| | | > |
| | | <!--accordion 手风琴模式--> |
| | | <el-collapse |
| | | accordion |
| | | style="box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1)" |
| | | v-show="shou1 === true" |
| | | v-loading="loading" |
| | | > |
| | |
| | | <img |
| | | style="position: absolute; left: 18px" |
| | | src="../../assets/images/uav/uav.png" |
| | | /> |
| | | > |
| | | <span |
| | | style="display: inline-block; position: absolute; left: 20px" |
| | | > |
| | | 该日期暂无无人机数据</span |
| | | > |
| | | 该日期暂无无人机数据</span> |
| | | </template> |
| | | </el-collapse-item> |
| | | </el-collapse> |
| | | <el-collapse |
| | | v-show="shou1 === false" |
| | | ref="collapse" |
| | | v-model="asideData.activeNames" |
| | | v-loading="loading" |
| | | accordion |
| | | style="box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1)" |
| | | @change="handleChange" |
| | | ref="collapse" |
| | | v-show="shou1 === false" |
| | | v-loading="loading" |
| | | > |
| | | <el-collapse-item |
| | | v-for="(item1, index) in asideData.uavTimeFly" |
| | |
| | | <img |
| | | style="position: absolute; left: 18px" |
| | | src="../../assets/images/uav/uav.png" |
| | | /> |
| | | > |
| | | <span |
| | | style="display: inline-block; position: absolute; left: 20px" |
| | | > |
| | | {{ item1.name }}</span |
| | | > |
| | | {{ item1.name }}</span> |
| | | </template> |
| | | <el-scrollbar style="height: 200px; overflow-x: hidden"> |
| | | <div |
| | |
| | | > |
| | | <div class="numss"> |
| | | <el-radio-group |
| | | v-if="selecttrue === 1" |
| | | v-model="radioSeven" |
| | | size="medium" |
| | | @change="changeCode" |
| | | v-if="selecttrue === 1" |
| | | style="margin-top: 10px; margin-left: 10px" |
| | | @change="changeCode" |
| | | > |
| | | <el-radio-button label="PM2.5"></el-radio-button> |
| | | <el-radio-button label="PM10"></el-radio-button> |
| | | <el-radio-button label="SO2"></el-radio-button> |
| | | <el-radio-button label="NO2"></el-radio-button> |
| | | <el-radio-button label="CO"></el-radio-button> |
| | | <el-radio-button label="03"></el-radio-button> |
| | | <el-radio-button label="TVOC"></el-radio-button> |
| | | <el-radio-button label="PM2.5" /> |
| | | <el-radio-button label="PM10" /> |
| | | <el-radio-button label="SO2" /> |
| | | <el-radio-button label="NO2" /> |
| | | <el-radio-button label="CO" /> |
| | | <el-radio-button label="03" /> |
| | | <el-radio-button label="TVOC" /> |
| | | </el-radio-group> |
| | | <div class="Duo" v-if="selecttrue === 2"> |
| | | <div |
| | | v-if="selecttrue === 2" |
| | | class="Duo" |
| | | > |
| | | <div class="spantuu"> |
| | | <span>无人机飞行高度范围(米): </span> |
| | | <el-input |
| | | class="inputtu" |
| | | v-model="tallone" |
| | | ref="uvas" |
| | | ></el-input> |
| | | v-model="tallone" |
| | | class="inputtu" |
| | | /> |
| | | -- |
| | | <el-input |
| | | class="inputtu" |
| | | v-model="talltwo" |
| | | ref="uvas" |
| | | ></el-input> |
| | | v-model="talltwo" |
| | | class="inputtu" |
| | | /> |
| | | </div> |
| | | <!-- <el-select v-model="Duovalue" placeholder="其他因子" class="slee"> |
| | | <el-option |
| | |
| | | </el-option> |
| | | </el-select> --> |
| | | <div class="spantu"> |
| | | <span>图形边长(米): </span |
| | | ><el-input |
| | | class="inputtu" |
| | | <span>图形边长(米): </span><el-input |
| | | ref="uvas" |
| | | v-model="uvasize" |
| | | class="inputtu" |
| | | clearable |
| | | placeholder="请输入内容" |
| | | ref="uvas" |
| | | ></el-input> |
| | | /> |
| | | </div> |
| | | <el-select v-model="Duovalue" placeholder="其他因子" class="slee"> |
| | | <el-select |
| | | v-model="Duovalue" |
| | | placeholder="其他因子" |
| | | class="slee" |
| | | > |
| | | <el-option |
| | | v-for="item in optionsduo" |
| | | :key="item.code" |
| | | :label="item.name" |
| | | :value="item.name" |
| | | > |
| | | </el-option> |
| | | /> |
| | | </el-select> |
| | | <!-- <div class="spantuu"> |
| | | <span>无人机飞行高度范围(米): </span> |
| | |
| | | ></el-input> |
| | | </div> --> |
| | | </div> |
| | | <div v-if="selecttrue === 1" style="margin-left: 10px"> |
| | | <el-button type="primary" @click="gengD" style="margin-top: 10px" |
| | | >更多条件</el-button |
| | | <div |
| | | v-if="selecttrue === 1" |
| | | style="margin-left: 10px" |
| | | > |
| | | <el-button |
| | | type="primary" |
| | | style="margin-top: 10px" |
| | | @click="gengD" |
| | | > |
| | | 更多条件 |
| | | </el-button> |
| | | </div> |
| | | <div |
| | | v-if="selecttrue === 2" |
| | | style="margin-left: 10px; margin-top: 10px" |
| | | > |
| | | <el-button class="gengD" @click="shou">收起</el-button> |
| | | <el-button type="primary" @click="selectDuo">查询</el-button> |
| | | <el-button |
| | | size="medium" |
| | | type="primary" |
| | | icon="el-icon-setting" |
| | | @click="dialogFormVisible = true" |
| | | > |
| | | 6参设定 |
| | | </el-button> |
| | | <el-button |
| | | class="gengD" |
| | | @click="shou" |
| | | > |
| | | 收起 |
| | | </el-button> |
| | | <el-button |
| | | type="primary" |
| | | @click="selectDuo" |
| | | > |
| | | 查询 |
| | | </el-button> |
| | | </div> |
| | | </div> |
| | | <!-- <div class="Duo" v-if="selecttrue === 2"> |
| | |
| | | </div> --> |
| | | </div> |
| | | <!-- <div v-if="noneData" class="noneData">当前时间没有飞行数据</div> --> |
| | | <div id="map_container" v-loading="loading1" /> |
| | | <div |
| | | id="map_container" |
| | | v-loading="loading1" |
| | | /> |
| | | <div class="dataParameter"> |
| | | <dir class="item"> |
| | | <div |
| | | v-for="(item, index) in temMergeDataList" |
| | | v-show="index < 3" |
| | | :key="index" |
| | | > |
| | | <p> {{ item.name }}:{{ item.value }}</p> |
| | | </div> |
| | | </dir> |
| | | <div |
| | | class="item1" |
| | | style="margin-left: 10px;" |
| | | > |
| | | <div |
| | | v-for="(item, index) in temMergeDataList" |
| | | v-show="index > 2" |
| | | :key="index" |
| | | > |
| | | <p> {{ item.name }}:{{ item.value }}</p> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-main> |
| | | </el-container> |
| | | <el-dialog |
| | | title="6参设定" |
| | | :visible.sync="dialogFormVisible" |
| | | width="1000px" |
| | | > |
| | | <el-descriptions |
| | | title="国控6参" |
| | | :column="3" |
| | | border |
| | | > |
| | | <el-descriptions-item |
| | | label="PM2.5 | ug/m³" |
| | | label-class-name="my-label" |
| | | content-class-name="my-content" |
| | | > |
| | | 22 |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="PM10 | ug/m³"> |
| | | 34 |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="SO2 | ug/m³"> |
| | | 4 |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="NO2 | ug/m³"> |
| | | 16 |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="CO | mg/m³"> |
| | | 0.5 |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="O3 | ug/m³"> |
| | | 149 |
| | | </el-descriptions-item> |
| | | </el-descriptions> |
| | | <!-- <el-descriptions title="设备标准值" border> |
| | | </el-descriptions> --> |
| | | <div |
| | | style=" |
| | | font-size: 16px; |
| | | font-weight: 700; |
| | | margin: 10px 0 20px 0; |
| | | font-size: 16px; |
| | | font-weight: 700; |
| | | color: #303133; |
| | | " |
| | | > |
| | | 设备标准值 |
| | | </div> |
| | | <el-table |
| | | :data="sensorTableData" |
| | | border |
| | | > |
| | | <el-table-column |
| | | prop="sensorName" |
| | | label="名称" |
| | | /> |
| | | <el-table-column |
| | | prop="unit" |
| | | label="单位" |
| | | /> |
| | | <el-table-column label="一级"> |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | v-model="scope.row.tab1" |
| | | placeholder="请输入内容" |
| | | /> |
| | | <!-- <span v-show="!scope.row.show">{{ scope.row.tab1 }}</span> --> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="二级"> |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | v-model="scope.row.tab2" |
| | | placeholder="请输入内容" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="三级"> |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | v-model="scope.row.tab3" |
| | | placeholder="请输入内容" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="四级"> |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | v-model="scope.row.tab4" |
| | | placeholder="请输入内容" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="五级"> |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | v-model="scope.row.tab5" |
| | | placeholder="请输入内容" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="六级"> |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | v-model="scope.row.tab6" |
| | | placeholder="请输入内容" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <div |
| | | slot="footer" |
| | | class="dialog-footer" |
| | | > |
| | | <el-button @click="dialogFormVisible = false"> |
| | | 取 消 |
| | | </el-button> |
| | | <el-button |
| | | type="primary" |
| | | @click="customLevel" |
| | | > |
| | | 确 定 |
| | | </el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | break |
| | | } |
| | | |
| | | if (dLat > 0) pLat = wgsLat |
| | | else mLat = wgsLat |
| | | if (dLon > 0) pLon = wgsLon |
| | | else mLon = wgsLon |
| | | if (dLat > 0) { |
| | | pLat = wgsLat |
| | | } else { |
| | | mLat = wgsLat |
| | | } |
| | | if (dLon > 0) { |
| | | pLon = wgsLon |
| | | } else { |
| | | mLon = wgsLon |
| | | } |
| | | |
| | | if (++i > 10000) break |
| | | if (++i > 10000) { |
| | | break |
| | | } |
| | | } |
| | | return { lat: wgsLat, lon: wgsLon } |
| | | }, |
| | |
| | | var y = |
| | | Math.sin((latA * this.PI) / 180.0) * Math.sin((latB * this.PI) / 180.0) |
| | | var s = x + y |
| | | if (s > 1) s = 1 |
| | | if (s < -1) s = -1 |
| | | if (s > 1) { |
| | | s = 1 |
| | | } |
| | | if (s < -1) { |
| | | s = -1 |
| | | } |
| | | var alpha = Math.acos(s) |
| | | var distance = alpha * earthR |
| | | return distance |
| | |
| | | export default { |
| | | filters: { |
| | | sensorFilter: function (value) { |
| | | if (!value) return '' |
| | | if (!value) { |
| | | return '' |
| | | } |
| | | return json[value] |
| | | }, |
| | | }, |
| | | data() { |
| | | data () { |
| | | return { |
| | | dialogFormVisible: false, |
| | | chosee: 1, |
| | | shou1: true, |
| | | zhanK1: 1, |
| | |
| | | selecttrue: 1, |
| | | pickerOptions: { |
| | | cellClassName: (time) => { |
| | | let timeDate = moment(time.getTime()).format('yyyy-MM-DD') |
| | | const timeDate = moment(time.getTime()).format('yyyy-MM-DD') |
| | | if (this.timeNums.includes(timeDate)) { |
| | | return 'dateArrClass' // 返回值设置的是我们添加的类名 |
| | | } |
| | |
| | | // 最大时间 最小时间 |
| | | this.timeOne = minDate.getTime() // 当选一个日期时 就是最小日期 |
| | | // 如何你选择了两个日期了,就把那个变量置空 |
| | | if (maxDate) this.timeOne = '' |
| | | if (maxDate) { |
| | | this.timeOne = '' |
| | | } |
| | | }, |
| | | disabledDate: (time) => { |
| | | if (this.timeOne) { |
| | |
| | | noneData: true, |
| | | defaultData: [], |
| | | carMac: null, |
| | | dialogFormVisible: false, |
| | | optionsduo: [ |
| | | { code: 'a34004', name: 'PM2.5' }, |
| | | { code: 'a34002', name: 'PM10' }, |
| | |
| | | endTime: '', |
| | | dataDate: '', |
| | | sensorTime: [], |
| | | uvasize: 50, |
| | | uvasize: 20, |
| | | timeValue: [ |
| | | new Date(2020, 1, 1, 0, 0, 0), |
| | | new Date(2022, 12, 31, 23, 59, 59), |
| | |
| | | timeNums: [], |
| | | batchs: '', |
| | | macs: '', |
| | | sensorTableData: [ |
| | | { |
| | | sensorName: 'PM2.5', |
| | | unit: 'ug/m³', |
| | | tab1: '35', |
| | | tab2: '75', |
| | | tab3: '115', |
| | | tab4: '150', |
| | | tab5: '250', |
| | | tab6: '350', |
| | | }, |
| | | { |
| | | sensorName: 'PM10', |
| | | unit: 'ug/m³', |
| | | tab1: '50', |
| | | tab2: '150', |
| | | tab3: '250', |
| | | tab4: '350', |
| | | tab5: '420', |
| | | tab6: '500', |
| | | }, |
| | | { |
| | | sensorName: 'SO2', |
| | | unit: 'ug/m³', |
| | | tab1: '150', |
| | | tab2: '500', |
| | | tab3: '650', |
| | | tab4: '800', |
| | | tab5: '', |
| | | tab6: '', |
| | | }, |
| | | { |
| | | sensorName: 'NO2', |
| | | unit: 'ug/m³', |
| | | tab1: '100', |
| | | tab2: '200', |
| | | tab3: '700', |
| | | tab4: '1200', |
| | | tab5: '2340', |
| | | tab6: '3090', |
| | | }, |
| | | { |
| | | sensorName: 'CO', |
| | | unit: 'mg/m³', |
| | | tab1: '5', |
| | | tab2: '10', |
| | | tab3: '35', |
| | | tab4: '60', |
| | | tab5: '90', |
| | | tab6: '120', |
| | | }, |
| | | { |
| | | sensorName: 'O3', |
| | | unit: 'ug/m³', |
| | | tab1: '160', |
| | | tab2: '200', |
| | | tab3: '300', |
| | | tab4: '400', |
| | | tab5: '800', |
| | | tab6: '1000', |
| | | }, |
| | | { |
| | | sensorName: 'TVOC', |
| | | unit: 'mg/m³', |
| | | tab1: '0.1', |
| | | tab2: '0.3', |
| | | tab3: '0.5', |
| | | tab4: '0.7', |
| | | tab5: '0.9', |
| | | tab6: '1', |
| | | }, |
| | | { |
| | | sensorName: '尘负荷', |
| | | unit: 'ug/m³', |
| | | tab1: '300', |
| | | tab2: '500', |
| | | tab3: '1000', |
| | | tab4: '10000', |
| | | tab5: '20000', |
| | | tab6: '50000', |
| | | }, |
| | | ], |
| | | temMergeDataList: [] |
| | | } |
| | | }, |
| | | |
| | | mounted() { |
| | | this.initStart() |
| | | // this.$refs.datePick.focus() |
| | | // this.getDate() |
| | | // this.flyData() |
| | | }, |
| | | watch: { |
| | | dataTypeValue(n, o) { |
| | | dataTypeValue (n, o) { |
| | | if (this.dataTypeValue === 'webSocket') { |
| | | this.dateValue = [] |
| | | this.historyView = false |
| | |
| | | this.webSocketView = false |
| | | } |
| | | }, |
| | | dateValue(n, o) { |
| | | dateValue (n, o) { |
| | | if (n === null) { |
| | | this.dateValue = [] |
| | | } |
| | | }, |
| | | viewKey(n, o) { |
| | | viewKey (n, o) { |
| | | // console.log(n) |
| | | }, |
| | | deep: true, |
| | | immediate: true, |
| | | }, |
| | | created() { |
| | | |
| | | mounted () { |
| | | this.$nextTick(() => { |
| | | this.initStart() |
| | | }) |
| | | |
| | | // this.$refs.datePick.focus() |
| | | // this.getDate() |
| | | // this.flyData() |
| | | }, |
| | | created () { |
| | | this.newTime(this.timeValue) |
| | | this.newDate() |
| | | this.getDate() |
| | |
| | | // this.getFlyData() |
| | | }, |
| | | methods: { |
| | | selectDuo() { |
| | | customLevel () { |
| | | this.selectDuo() |
| | | this.dialogFormVisible = false |
| | | }, |
| | | selectDuo () { |
| | | // console.log(2115); |
| | | if (this.chosee === 1) { |
| | | this.$message.warning('请先在左侧选择无人机时间') |
| | |
| | | } |
| | | this.$request({ |
| | | // url: '/uav/queryDataByBatch', |
| | | url: '/uav/test', |
| | | url: '/uav/getUav', |
| | | // url: '/uav/test', |
| | | method: 'post', |
| | | data: { |
| | | batch: this.batchs, |
| | |
| | | this.initStart(this.carData) |
| | | }) |
| | | }, |
| | | chooseDate() { |
| | | chooseDate () { |
| | | // this.$refs.datePick.focus() // 选择日期后依旧触发焦点 |
| | | this.getTimeAreaData(this.datenum) |
| | | $('.coll').css('margin-top', '350px') |
| | | }, |
| | | chooseDate2() { |
| | | chooseDate2 () { |
| | | // this.$refs.datePick.focus() // 选择日期后依旧触发焦点 |
| | | // this.getTimeAreaData(this.datenum) |
| | | $('.coll').css('margin-top', '350px') |
| | | }, |
| | | chooseDate1() { |
| | | chooseDate1 () { |
| | | $('.coll').css('margin-top', '10px') |
| | | // this.$refs.datePick.focus() // 选择日期后依旧触发焦点 |
| | | }, |
| | | gengD() { |
| | | gengD () { |
| | | // if (this.zhanK === 1) { |
| | | // this.$message.warning('请先在左侧选择无人机和时间') |
| | | // return |
| | | // } |
| | | this.selecttrue = 2 |
| | | $('.numss').css({ width: '930px' }) |
| | | $('.numss').css({ width: '1050px' }) |
| | | }, |
| | | shou() { |
| | | shou () { |
| | | this.selecttrue = 1 |
| | | $('.numss').css({ width: '690px' }) |
| | | $('.numss').css({ width: '700px' }) |
| | | }, |
| | | parseTime(time, cFormat) { |
| | | parseTime (time, cFormat) { |
| | | if (arguments.length === 0 || !time) { |
| | | return null |
| | | } |
| | |
| | | }) |
| | | return time_str |
| | | }, |
| | | newTime2(timeArr) { |
| | | newTime2 (timeArr) { |
| | | var arr = [] |
| | | timeArr.map((v) => { |
| | | var date = new Date(v) |
| | |
| | | }) |
| | | return arr |
| | | }, |
| | | // 点击列表切换走航车数据 |
| | | changeCarData(e) { |
| | | this.carMac = e |
| | | this.getStart() |
| | | }, |
| | | // 请求走航车列表数据 |
| | | // 进行经纬度转换为距离的计算 |
| | | Rad(d) { |
| | | Rad (d) { |
| | | return (d * Math.PI) / 180.0 // 经纬度转换成三角函数中度分表形式。 |
| | | }, |
| | | // 计算距离,参数分别为第一点的纬度,经度;第二点的纬度,经度 |
| | | GetDistance(lat1, lng1, lat2, lng2) { |
| | | GetDistance (lat1, lng1, lat2, lng2) { |
| | | var radLat1 = this.Rad(lat1) |
| | | var radLat2 = this.Rad(lat2) |
| | | var a = radLat1 - radLat2 |
| | |
| | | return s |
| | | }, |
| | | // 日期格式化 |
| | | newDate() { |
| | | newDate () { |
| | | var aData = new Date() |
| | | var month = |
| | | aData.getMonth() < 9 |
| | |
| | | this.sensorDate = aData.getFullYear() + '-' + month + '-' + date |
| | | }, |
| | | // 时间格式化 |
| | | newTime(timeArr) { |
| | | newTime (timeArr) { |
| | | let str = '' |
| | | let str2 = '' |
| | | this.sensorTime = [] |
| | |
| | | }) |
| | | }, |
| | | // 修改时间 |
| | | dateChange(e) { |
| | | dateChange (e) { |
| | | if (e === null) { |
| | | this.sensorDate = [] |
| | | } else { |
| | |
| | | } |
| | | this.dataType = 'history' |
| | | // this.map = null |
| | | this.getStart() |
| | | } |
| | | }, |
| | | // 获取无人机以及时间区间 |
| | | getTimeAreaData(item) { |
| | | getTimeAreaData (item) { |
| | | // this.asideData.uavTimeFly = [] |
| | | this.loading = true |
| | | this.$request({ |
| | |
| | | }) |
| | | }, |
| | | // 折叠面板监听 |
| | | handleChange(val) { |
| | | handleChange (val) { |
| | | // console.log(val, 222) |
| | | }, |
| | | // 经纬度转换为三维坐标系下的 XY 坐标 map.lngLatToGeodeticCoord |
| | | // 选中radio |
| | | selectRedio(item) { |
| | | selectRedio (item) { |
| | | this.map.remove(this.textMarkers.markers) |
| | | this.textMarkers.markers = [] |
| | | this.map.remove(this.Layler) |
| | | this.addLayers(item) |
| | | }, |
| | | // 初始化地图 |
| | | getFlyData(item, index, mac) { |
| | | getFlyData (item, index, mac) { |
| | | // for (var i = 0; i < this.xie.date.length; i++) { |
| | | // this.xie.date[i].flyLat = this.xie.date[i].flyLat + ' °'.toString() |
| | | // this.xie.date[i].flyLon = this.xie.date[i].flyLon + ' °'.toString() |
| | |
| | | } |
| | | this.$request({ |
| | | // url: '/uav/queryDataByBatch', |
| | | url: '/uav/test', |
| | | // url: '/uav/test', |
| | | url: '/uav/getUav', |
| | | method: 'post', |
| | | data: { |
| | | batch: item.batch, |
| | |
| | | }) |
| | | }, |
| | | // 获取组织下存在飞行记录的日期 |
| | | getDate() { |
| | | getDate () { |
| | | this.$request({ |
| | | url: '/uav/queryDate', |
| | | method: 'get', |
| | |
| | | } |
| | | }) |
| | | }, |
| | | initStart(res) { |
| | | initDataParams (res) { |
| | | let options = {TemMergeAvg: '合并范围均值', TemMergedHighest: '合并范围最高值', TemMergedLowest: '合并范围最低值', TemNotMergedAvg: '未合并范围均值', TemNotMergedHighest: '未合并范围最高值', TemNotMergedLowest: '未合并范围最低值'} |
| | | let optionKeys = Object.keys(options) |
| | | this.temMergeDataList = optionKeys.reduce((acc, key) => { |
| | | // 使用正则表达式匹配data对象的键 |
| | | let regex = new RegExp(key, 'i') |
| | | let matchedDataKey = Object.keys(res).find(k => regex.test(k)) |
| | | if (matchedDataKey) { |
| | | acc.push({ |
| | | name: options[key], |
| | | value: res[matchedDataKey] |
| | | }) |
| | | } |
| | | return acc |
| | | }, []) |
| | | |
| | | console.log(this.temMergeDataList) |
| | | }, |
| | | initStart (res) { |
| | | console.log('res', res) |
| | | this.abc += 1 |
| | | const that = this |
| | | if (res) this.initDataParams(res[0]) |
| | | if (!res) { |
| | | that.map = new BMapGL.Map('map_container') |
| | | console.log('BMapGL', BMapGL) |
| | | console.log('BMapGL', BMapGL) |
| | | console.log('window', window.BMapGL) |
| | | that.map.enableScrollWheelZoom(true) // 开启鼠标滚轮,地图可以进行放大、缩小s |
| | | that.map.setMapType(BMAP_EARTH_MAP) // 设置地图类型为地球模式 |
| | | that.map.setDisplayOptions({ |
| | |
| | | // 已有地图,避免再次请求 |
| | | // if (!that.showPoints) { |
| | | // console.log(111) |
| | | // that.map = new BMapGL.Map('map_container') |
| | | // that.map = new window.BMapGL.Map('map_container') |
| | | // } |
| | | // that.map.enableScrollWheelZoom(true) // 开启鼠标滚轮,地图可以进行放大、缩小s |
| | | // that.map.setMapType(BMAP_EARTH_MAP) // 设置地图类型为地球模式 |
| | |
| | | // building: true, // 不显示建筑物 |
| | | // poiText: false, // 显示poi文字 |
| | | // }) |
| | | // that.map.addControl(new BMapGL.NavigationControl3D()) // 添加3d控件 |
| | | // that.map.addControl(new window.BMapGL.NavigationControl3D()) // 添加3d控件 |
| | | if (this.responseJSON.length === 0) { |
| | | showNoPoints() |
| | | } |
| | |
| | | // draw(that.sensor, that.viewType, that.carMac) |
| | | // drawLine()// 轨迹(绘制带折线箭头) |
| | | // drawStartAndEnd() // 起点和终点标注 |
| | | function draw(sensor, type, carMac) { |
| | | function draw (sensor, type, carMac) { |
| | | var levels = getGrading(sensor, type, carMac) |
| | | $.each(levels, function (index, value) { |
| | | var color = value.color |
| | |
| | | } |
| | | |
| | | // 画方块,上色,添加文字 |
| | | function drawPolygon(sensor) { |
| | | function drawPolygon (sensor) { |
| | | $.each(that.showPoints, function (item, point) { |
| | | var sw = getPoint(225, point.lng, point.lat, that.distance) |
| | | var ne = getPoint(45, point.lng, point.lat, that.distance) |
| | |
| | | new BMapGL.Point(sw.lng, ne.lat), // 右下角 |
| | | ], |
| | | { |
| | | strokeWeight: 0.1, //边框线的宽度,以像素为单位 |
| | | strokeWeight: 0.1, // 边框线的宽度,以像素为单位 |
| | | // strokeOpacity: 0.0, //边线的透明度 |
| | | fillColor: color, //是否需要填充色 |
| | | fillOpacity: 0.8, //填充色的透明度,0~1之间 |
| | | strokeColor: 'black', //边框线的颜色 |
| | | strokeStyle: 'solid', //边线的样式,solid或dashed。 |
| | | fillColor: color, // 是否需要填充色 |
| | | fillOpacity: 0.8, // 填充色的透明度,0~1之间 |
| | | strokeColor: 'black', // 边框线的颜色 |
| | | strokeStyle: 'solid', // 边线的样式,solid或dashed。 |
| | | } |
| | | ) |
| | | that.map.addOverlay(polygon) |
| | |
| | | } |
| | | |
| | | // 起点和终点标注 |
| | | function drawStartAndEnd() { |
| | | function drawStartAndEnd () { |
| | | var startIcon = new BMapGL.Icon( |
| | | require('@/assets/images/start.png'), |
| | | new BMapGL.Size(48, 48) |
| | |
| | | } |
| | | |
| | | // 绘制带箭头折线 |
| | | function drawLine() { |
| | | function drawLine () { |
| | | var data = [] |
| | | var points = [] |
| | | $.each(trackPoints, function (index, value) { |
| | |
| | | } |
| | | |
| | | // 格子间隔>=size的放进points |
| | | function getShowPoints(size) { |
| | | function getShowPoints (size) { |
| | | var points = [] |
| | | points.push(trackPoints[0]) |
| | | for (var i = 1; i < trackPoints.length; i++) { |
| | |
| | | } |
| | | |
| | | // 根据中心,角度,距离,找点 |
| | | function getPoint(angle, lng, lat, distance) { |
| | | function getPoint (angle, lng, lat, distance) { |
| | | var EARTH_RADIUS = 6378137 // 地球的半径,m |
| | | // 将距离转换成经度的计算公式 |
| | | var ra = distance / EARTH_RADIUS |
| | |
| | | return new BMapGL.Point(lng, lat) |
| | | } |
| | | |
| | | function getGrading(sensor, type, carMac) { |
| | | function getGrading (sensor, type, carMac) { |
| | | var levels = [] |
| | | var level0 = {} |
| | | var level1 = {} |
| | |
| | | levels.push(level0, level1, level2, level3, level4, level5, level6) |
| | | return levels |
| | | } |
| | | function getColorAndLevel(senosor, data) { |
| | | function getColorAndLevel (senosor, data) { |
| | | var levelData = that.sensorTableData |
| | | var colorAndLevel = {} |
| | | var color |
| | |
| | | } |
| | | |
| | | // point上添加label文本 |
| | | function setLabelStyle(content, point) { |
| | | function setLabelStyle (content, point) { |
| | | var label = new BMapGL.Label( |
| | | "<span class='my-maptip'>" + content + '<br /><span>', // 为lable填写内容 |
| | | { |
| | |
| | | } |
| | | |
| | | // 无数据时,缩放至该中心 |
| | | function showNoPoints() { |
| | | function showNoPoints () { |
| | | that.map.centerAndZoom('苏州市', 17) |
| | | setTimeout(function () { |
| | | document.getElementById('cpm').style.display = 'block' |
| | |
| | | }) |
| | | |
| | | // var that = this |
| | | function clickChange() { |
| | | function clickChange () { |
| | | $('.carTop').on('click', () => { |
| | | // console.log('点击了') |
| | | that.view.removeAllLayers() |
| | |
| | | clickChange() |
| | | } |
| | | }, |
| | | changeCode(value) { |
| | | changeCode (value) { |
| | | switch (value) { |
| | | case 'PM2.5': |
| | | this.sensorKey = 'a34004' |
| | |
| | | } |
| | | this.initStart(this.carData) |
| | | }, |
| | | changeCode1(index) { |
| | | this.changeColor1 = index |
| | | if (index === 0) { |
| | | this.viewKey = '2D' |
| | | } else { |
| | | this.viewKey = '3D' |
| | | } |
| | | this.getStart() |
| | | }, |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" > |
| | | <style lang="scss" scoped> |
| | | .main-container { |
| | | display: -webkit-box; |
| | | display: -ms-flexbox; |
| | | display: flex; |
| | | -webkit-box-orient: vertical; |
| | | -webkit-box-direction: normal; |
| | | -ms-flex-flow: column; |
| | | flex-flow: column; |
| | | min-height: 100%; |
| | | -webkit-transition: margin-left 0.28s; |
| | | transition: margin-left 0.28s; |
| | | margin-left: 210px; |
| | | position: relative; |
| | | height: 100%; |
| | | } |
| | | /deep/.BMap_cpyCtrl { |
| | | display: none; |
| | | } |
| | |
| | | /deep/.inputNum { |
| | | width: 4% !important; |
| | | } |
| | | .dateArrClass { |
| | | position: relative; |
| | | } |
| | | .dateArrClass > div ::after { |
| | | content: ''; |
| | | position: absolute; |
| | | right: 8px; |
| | | top: 23px; |
| | | width: 5px; |
| | | height: 5px; |
| | | border-radius: 50%; |
| | | z-index: 999; |
| | | background-color: #f40; |
| | | } |
| | | |
| | | .numss { |
| | | width: 700px; |
| | | background-color: white; |
| | |
| | | width: 20%; |
| | | } |
| | | } |
| | | .jlpMySelectPopper.el-picker-panel { |
| | | width: 280px; |
| | | height: 330px; |
| | | } |
| | | .jlpMySelectPopper.el-date-picker table { |
| | | width: 88%; |
| | | } |
| | | |
| | | .BMap_cpyCtrl { |
| | | display: none; |
| | | } |
| | | |
| | | .anchorBL { |
| | | display: none; |
| | | } |
| | |
| | | .el-scrollbar__wrap { |
| | | overflow-x: hidden; |
| | | } |
| | | </style> |
| | | .dataParameter{ |
| | | background-color: rgba(192, 192, 192, 0.4); |
| | | position: absolute; |
| | | bottom: 0px; |
| | | padding: 10px; |
| | | color: #000; |
| | | font-size: 16px; |
| | | cursor: pointer; |
| | | display: flex; |
| | | .item{ |
| | | margin: 0px; |
| | | padding: 0px; |
| | | } |
| | | } |
| | | </style> |
| | | <style > |
| | | .jlpMySelectPopper.el-picker-panel { |
| | | width: 280px; |
| | | height: 330px; |
| | | } |
| | | .jlpMySelectPopper.el-date-picker table { |
| | | width: 88%; |
| | | } |
| | | .dateArrClass { |
| | | position: relative; |
| | | } |
| | | .dateArrClass > div ::after { |
| | | content: ''; |
| | | position: absolute; |
| | | right: 8px; |
| | | top: 23px; |
| | | width: 5px; |
| | | height: 5px; |
| | | border-radius: 50%; |
| | | z-index: 999; |
| | | background-color: #f40; |
| | | } |
| | | |
| | | </style> |