diff --git a/src/views/dataV/layOut.vue b/src/views/dataV/layOut.vue index 0997168..1a27fe7 100644 --- a/src/views/dataV/layOut.vue +++ b/src/views/dataV/layOut.vue @@ -7,7 +7,7 @@ element-loading-background="#263840" element-loading-text="地图加载中" element-loading-spinner="el-icon-loading" - :style="{ height: '100vh', width: '100vw', transform: `${scale}` }" + :style="{ height: 'calc(100vh - 310px)', width: '67%', 'margin-top': '65px', transform: `${scale}` }" />
diff --git a/src/views/dataV/map.js b/src/views/dataV/map.js index 41f5482..36ab072 100644 --- a/src/views/dataV/map.js +++ b/src/views/dataV/map.js @@ -1,6 +1,6 @@ -import { listDevice } from '@/api/iot/device' -import { listLand } from '@/api/agriculture/land' -import { getDicts } from '@/api/system/dict/data' +import { listDevice } from '@/api/iot/device'; +import { listLand } from '@/api/agriculture/land'; +import { getDicts } from '@/api/system/dict/data'; const mapMixin = { data() { return { @@ -9,37 +9,38 @@ const mapMixin = { baseUrl: process.env.VUE_APP_BASE_API, loading: false, landType: [], - deviceType: [] - } + deviceType: [], + }; }, watch: { baseId: { - handler: async function(n) { + handler: async function (n) { if (n) { - await this.$nextTick() + await this.$nextTick(); if (this.type == 'pageThree') { - this.loading = true + this.loading = true; // 获去地块数据 - const res = await listLand({ baseId: this.baseId }) - this.area = res.rows + const res = await listLand({ baseId: this.baseId }); + this.area = res.rows; + // 获取设备数据 - const res1 = await listDevice({ baseId: this.baseId }) + const res1 = await listDevice({ baseId: this.baseId }); this.device = res1.rows.map((item) => ({ ...item, - imgUrl: item.imgUrl.split(',').length > 1 ? item.imgUrl.split(',')[1] : item.imgUrl - })) - this.initMap() + imgUrl: item.imgUrl.split(',').length > 1 ? item.imgUrl.split(',')[1] : item.imgUrl, + })); + this.initMap(); getDicts('agriculture_land_type').then((response) => { - this.landType = response.data - }) + this.landType = response.data; + }); getDicts('iot_device_status').then((response) => { - this.deviceType = response.data - }) + this.deviceType = response.data; + }); } } }, - immediate: true - } + immediate: true, + }, }, async mounted() {}, methods: { @@ -48,26 +49,24 @@ const mapMixin = { this.map = new this.AMap.Map('indexMap', { // 设置地图容器id mapStyle: 'amap://styles/grey', - zoom: 16, // 初始化地图级别 - // center: baseCoordinate, //初始化地图中心点位置 - doubleClickZoom: false - }) - await this.createAreaPolygon() - await this.createDevicePoint() - this.map.setFitView() + zoom: 12, // 初始化地图级别 + doubleClickZoom: false, + }); + await this.createAreaPolygon(); + await this.createDevicePoint(); }, /** 绘制地块 */ createAreaPolygon() { - const label = [] - const overlayGroup = [] + const label = []; + const overlayGroup = []; this.area.forEach((item) => { if (item.landPath) { - const path = [] - const pointList = [] + const path = []; + const pointList = []; item.landPath.split('|').forEach((point) => { - path.push(new this.AMap.LngLat(point.split(',')[0], point.split(',')[1])) - pointList.push([Number(point.split(',')[0]), Number(point.split(',')[1])]) - }) + path.push(new this.AMap.LngLat(point.split(',')[0], point.split(',')[1])); + pointList.push([Number(point.split(',')[0]), Number(point.split(',')[1])]); + }); const polygon = new this.AMap.Polygon({ path: path, fillColor: item.fillColor, @@ -76,13 +75,14 @@ const mapMixin = { strokeWeight: item.strokeWeight, strokeOpacity: item.strokeOpacity, extData: { - ...item - } - }) + ...item, + }, + }); polygon.on('click', (e) => { - this.createInfoWindow(e) - }) - overlayGroup.push(polygon) + this.createInfoWindow(e); + }); + + overlayGroup.push(polygon); // 添加地块名称 label.push( new this.AMap.Text({ @@ -93,119 +93,120 @@ const mapMixin = { background: 'transparent', color: '#fff', border: 'none', - fontSize: '16px' - } + fontSize: '16px', + }, }) - ) + ); } - }) - this.map.add(new this.AMap.OverlayGroup(label)) - this.map.add(new this.AMap.OverlayGroup(overlayGroup)) + }); + this.map.add(new this.AMap.OverlayGroup(label)); + this.map.add(new this.AMap.OverlayGroup(overlayGroup)); + this.map.setFitView(overlayGroup); }, /** 创建设备marker点 */ createDevicePoint() { - const devicePointList = [] + const devicePointList = []; this.device.forEach((device) => { if ((device.longitude, device.latitude)) { const marker = new this.AMap.Marker({ icon: new this.AMap.Icon({ image: this.baseUrl + device.imgUrl, - imageSize: new this.AMap.Size(32, 32) + imageSize: new this.AMap.Size(32, 32), }), position: [device.longitude, device.latitude], title: device.deviceName, anchor: 'bottom-center', extData: { - ...device - } - }) + ...device, + }, + }); marker.on('click', (e) => { - this.createInfoWindow2(e) - }) - devicePointList.push(marker) + this.createInfoWindow2(e); + }); + devicePointList.push(marker); } - }) - this.map.add(new this.AMap.OverlayGroup(devicePointList)) - this.loading = false + }); + this.map.add(new this.AMap.OverlayGroup(devicePointList)); + this.loading = false; }, /** 获取地块中心点 */ getAreaCenter(location) { - var total = location.length - var X = 0 - var Y = 0 - var Z = 0 + var total = location.length; + var X = 0; + var Y = 0; + var Z = 0; location.forEach((lnglat) => { - var lng = (lnglat[0] * Math.PI) / 180 - var lat = (lnglat[1] * Math.PI) / 180 - var x, y, z - x = Math.cos(lat) * Math.cos(lng) - y = Math.cos(lat) * Math.sin(lng) - z = Math.sin(lat) - X += x - Y += y - Z += z - }) - X = X / total - Y = Y / total - Z = Z / total + var lng = (lnglat[0] * Math.PI) / 180; + var lat = (lnglat[1] * Math.PI) / 180; + var x, y, z; + x = Math.cos(lat) * Math.cos(lng); + y = Math.cos(lat) * Math.sin(lng); + z = Math.sin(lat); + X += x; + Y += y; + Z += z; + }); + X = X / total; + Y = Y / total; + Z = Z / total; - var Lng = Math.atan2(Y, X) - var Hyp = Math.sqrt(X * X + Y * Y) - var Lat = Math.atan2(Z, Hyp) - return [parseFloat((Lng * 180) / Math.PI), parseFloat((Lat * 180) / Math.PI)] + var Lng = Math.atan2(Y, X); + var Hyp = Math.sqrt(X * X + Y * Y); + var Lat = Math.atan2(Z, Hyp); + return [parseFloat((Lng * 180) / Math.PI), parseFloat((Lat * 180) / Math.PI)]; }, /** 信息窗体 */ createInfoWindow(e) { - var info = document.createElement('div') - info.className = 'InfoBox' - var title = document.createElement('div') - title.className = 'title' - title.innerHTML = `${e.target._opts.extData.landName}` - var type = document.createElement('div') - var typeName = '' + var info = document.createElement('div'); + info.className = 'InfoBox'; + var title = document.createElement('div'); + title.className = 'title'; + title.innerHTML = `${e.target._opts.extData.landName}`; + var type = document.createElement('div'); + var typeName = ''; this.landType.forEach((item) => { if (item.dictValue == e.target._opts.extData.landType) { - typeName = item.dictLabel + typeName = item.dictLabel; } - }) - type.className = 'type' + }); + type.className = 'type'; type.innerHTML = `
类型:
${typeName}
-
面积:${e.target._opts.extData.landArea}亩
` - info.appendChild(title) - info.appendChild(type) +
面积:${e.target._opts.extData.landArea}亩
`; + info.appendChild(title); + info.appendChild(type); const infoWindow = new this.AMap.InfoWindow({ anchor: 'bottom-center', - content: info // 使用默认信息窗体框样式,显示信息内容 - }) - infoWindow.open(this.map, new this.AMap.LngLat(e.lnglat.getLng(), e.lnglat.getLat())) + content: info, // 使用默认信息窗体框样式,显示信息内容 + }); + infoWindow.open(this.map, new this.AMap.LngLat(e.lnglat.getLng(), e.lnglat.getLat())); }, createInfoWindow2(e) { - var info = document.createElement('div') - info.className = 'InfoBox' - var title = document.createElement('div') - title.className = 'title' - title.innerHTML = `${e.target._opts.extData.deviceName}` - var num = document.createElement('div') - num.className = 'num' - num.innerHTML = `
编号:${e.target._opts.extData.serialNumber}
` - var tips = document.createElement('div') - tips.className = 'tips' - var statusName = '' + var info = document.createElement('div'); + info.className = 'InfoBox'; + var title = document.createElement('div'); + title.className = 'title'; + title.innerHTML = `${e.target._opts.extData.deviceName}`; + var num = document.createElement('div'); + num.className = 'num'; + num.innerHTML = `
编号:${e.target._opts.extData.serialNumber}
`; + var tips = document.createElement('div'); + tips.className = 'tips'; + var statusName = ''; this.deviceType.forEach((item) => { if (item.dictValue == e.target._opts.extData.status) { - statusName = item.dictLabel + statusName = item.dictLabel; } - }) - tips.innerHTML = `${statusName}` - info.appendChild(title) - info.appendChild(num) - info.appendChild(tips) + }); + tips.innerHTML = `${statusName}`; + info.appendChild(title); + info.appendChild(num); + info.appendChild(tips); const infoWindow = new this.AMap.InfoWindow({ anchor: 'bottom-center', - content: info // 使用默认信息窗体框样式,显示信息内容 - }) - infoWindow.open(this.map, new this.AMap.LngLat(e.lnglat.getLng(), e.lnglat.getLat())) - } - } -} -export default mapMixin + content: info, // 使用默认信息窗体框样式,显示信息内容 + }); + infoWindow.open(this.map, new this.AMap.LngLat(e.lnglat.getLng(), e.lnglat.getLat())); + }, + }, +}; +export default mapMixin;