256 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			256 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <div class="AiDvMap" v-resize="onDomResize">
 | |
|     <div class="chart-map" :class="v" style="width: 800px; height: 600px"></div>
 | |
|   </div>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| import * as echarts from 'echarts'
 | |
| import http from "dui/lib/js/request";
 | |
| 
 | |
| export default {
 | |
|   name: 'AiDvMap',
 | |
|   data() {
 | |
|     return {
 | |
|       timer: null,
 | |
|       v: `AiDvMap-${new Date().getTime()}`,
 | |
|       chart: null
 | |
|     }
 | |
|   },
 | |
|   directives: {
 | |
|     resize: {
 | |
|       bind(el, binding) {
 | |
|         let width = ''
 | |
|         let height = ''
 | |
| 
 | |
|         function isReize() {
 | |
|           const style = document.defaultView.getComputedStyle(el)
 | |
|           if (width !== style.width || height !== style.height) {
 | |
|             binding.value({
 | |
|               width: style.width,
 | |
|               height: style.height
 | |
|             })
 | |
|           }
 | |
|           width = style.width
 | |
|           height = style.height
 | |
|         }
 | |
| 
 | |
|         el.__vueSetInterval__ = setInterval(isReize, 300)
 | |
|       },
 | |
| 
 | |
|       unbind(el) {
 | |
|         clearInterval(el.__vueSetInterval__)
 | |
|       }
 | |
|     }
 | |
|   },
 | |
|   mounted() {
 | |
|     this.$nextTick(() => {
 | |
|       this.initChart()
 | |
|     })
 | |
|   },
 | |
| 
 | |
|   methods: {
 | |
|     onDomResize() {
 | |
|       this.$nextTick(() => {
 | |
|         this.chart.resize()
 | |
|       })
 | |
|     },
 | |
| 
 | |
|     initChart() {
 | |
|       this.chart = echarts.init(document.querySelector(`.${this.v}`))
 | |
|       this.getData().then(res => {
 | |
|         if (res.code === 0) {
 | |
|           echarts.registerMap('滨海县', res.data)
 | |
| 
 | |
|           let option = {
 | |
|             geo: [
 | |
|               {
 | |
|                 map: "滨海县",
 | |
|                 aspectScale: 1,
 | |
|                 zoom: 0.65,
 | |
|                 layoutCenter: ["50%", "50%"],
 | |
|                 layoutSize: "180%",
 | |
|                 show: true,
 | |
|                 roam: false,
 | |
|                 emphasis: {
 | |
|                   show: true,
 | |
|                   label: {
 | |
|                     textStyle: {
 | |
|                       color: "#FFFFFF"
 | |
|                     },
 | |
|                   },
 | |
|                   itemStyle: {
 | |
|                     // areaColor: '#fff'
 | |
|                   }
 | |
|                 },
 | |
|                 label: {
 | |
|                   normal: {
 | |
|                     show: false,
 | |
|                     color: '#fff',
 | |
|                     fontSize: '20'
 | |
|                   }
 | |
|                 },
 | |
|                 itemStyle: {
 | |
|                   normal: {
 | |
|                     borderColor: "rgba(2, 198, 220, 1)",
 | |
|                     borderWidth: 2,
 | |
|                     shadowColor: "rgba(2, 198, 220, 0.1)",
 | |
|                     shadowOffsetY: 10,
 | |
|                     shadowBlur: 120,
 | |
|                     areaColor: "#163c56",
 | |
|                   },
 | |
|                 }
 | |
|               },
 | |
|               // 重影
 | |
|               {
 | |
|                 type: "map",
 | |
|                 map: "滨海县",
 | |
|                 zlevel: -1,
 | |
|                 aspectScale: 1,
 | |
|                 zoom: 0.65,
 | |
|                 layoutCenter: ["50%", "51%"],
 | |
|                 layoutSize: "180%",
 | |
|                 roam: false,
 | |
|                 silent: true,
 | |
|                 itemStyle: {
 | |
|                   normal: {
 | |
|                     borderWidth: 1,
 | |
|                     // borderColor:"rgba(17, 149, 216,0.6)",
 | |
|                     borderColor: "rgba(2, 198, 220, 0.6)",
 | |
|                     shadowColor: "rgba(2, 198, 220, 0.6)",
 | |
|                     shadowOffsetY: 5,
 | |
|                     shadowBlur: 15,
 | |
|                     areaColor: "rgba(5,21,35,0.1)",
 | |
|                   },
 | |
|                 },
 | |
|               },
 | |
|               {
 | |
|                 type: "map",
 | |
|                 map: "滨海县",
 | |
|                 zlevel: -2,
 | |
|                 aspectScale: 1,
 | |
|                 zoom: 0.65,
 | |
|                 layoutCenter: ["50%", "52%"],
 | |
|                 layoutSize: "180%",
 | |
|                 roam: false,
 | |
|                 silent: true,
 | |
|                 itemStyle: {
 | |
|                   normal: {
 | |
|                     borderWidth: 1,
 | |
|                     // borderColor: "rgba(57, 132, 188,0.4)",
 | |
|                     borderColor: "rgba(2, 198, 220, 0.4)",
 | |
|                     shadowColor: "rgba(2, 198, 220, 0.4)",
 | |
|                     shadowOffsetY: 5,
 | |
|                     shadowBlur: 15,
 | |
|                     areaColor: "transpercent",
 | |
|                   },
 | |
|                 },
 | |
|               },
 | |
|               {
 | |
|                 type: "map",
 | |
|                 map: "滨海县",
 | |
|                 zlevel: -3,
 | |
|                 aspectScale: 1,
 | |
|                 zoom: 0.65,
 | |
|                 layoutCenter: ["50%", "53%"],
 | |
|                 layoutSize: "180%",
 | |
|                 roam: false,
 | |
|                 silent: true,
 | |
|                 itemStyle: {
 | |
|                   normal: {
 | |
|                     borderWidth: 1,
 | |
|                     // borderColor: "rgba(11, 43, 97,0.8)",
 | |
|                     borderColor: "rgba(2, 198, 220, 0.2)",
 | |
|                     shadowColor: "rgba(2, 198, 220, 0.2)",
 | |
|                     shadowOffsetY: 15,
 | |
|                     shadowBlur: 10,
 | |
|                     areaColor: "transpercent",
 | |
|                   },
 | |
|                 },
 | |
|               }
 | |
|             ],
 | |
|             series: [
 | |
|               {
 | |
|                 type: 'scatter',
 | |
|                 coordinateSystem: 'geo',
 | |
|                 z: 3,
 | |
|                 zlevel: 3,
 | |
|                 // symbol: 'none',
 | |
|                 symbolSize: 16,
 | |
|                 rippleEffect: {
 | |
|                   period: 2,
 | |
|                   scale: 4,
 | |
|                   brushType: 'fill'
 | |
|                 },
 | |
|                 label: {
 | |
|                   show: true,
 | |
|                   formatter: e => {
 | |
|                     const name = e.data[3]
 | |
|                     const value = e.data[2]
 | |
|                     return `{a|${name}}\n{b|${value}}`
 | |
|                   },
 | |
|                   fontSize: 16,
 | |
|                   rich: {
 | |
|                     a: {
 | |
|                       width: '100%',
 | |
|                       color: '#fff',
 | |
|                       lineHeight: 20,
 | |
|                       fontSize: 16
 | |
|                     },
 | |
|                     b: {
 | |
|                       backgroundColor: {
 | |
|                         // image: require('@/assets/images/point.png')
 | |
|                       },
 | |
|                       color: '#fff',
 | |
|                       height: 56,
 | |
|                       align: 'center',
 | |
|                       width: 50,
 | |
|                       fontSize: 16
 | |
|                     }
 | |
|                   }
 | |
|                 },
 | |
|                 data: []
 | |
|               }
 | |
|             ]
 | |
|           }
 | |
|           this.chart.setOption(option)
 | |
|         }
 | |
|       })
 | |
|     },
 | |
| 
 | |
|     convertData(data) {
 | |
|       return data.map(v => {
 | |
|         return [this.qqMapTransBMap(v.point[1], v.point[0]).lng, this.qqMapTransBMap(v.point[1], v.point[0]).lat, v.value, v.name]
 | |
|       })
 | |
|     },
 | |
| 
 | |
|     qqMapTransBMap(lng, lat) {
 | |
|       const x_pi = 3.14159265358979324 * 3000.0 / 180.0
 | |
|       var x = lng
 | |
|       var y = lat
 | |
|       var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi)
 | |
|       var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi)
 | |
| 
 | |
|       return {
 | |
|         lng: z * Math.cos(theta) + 0.0065,
 | |
|         lat: z * Math.sin(theta) + 0.006
 | |
|       }
 | |
|     },
 | |
| 
 | |
|     getData() {
 | |
|       return http.post(`/app/appdvcpconfig/apiForward?url=${encodeURIComponent(`https://geo.datav.aliyun.com/areas_v3/bound/geojson?code=${this.$store.state.user.info.areaId.substr(0, 6)}`)}`,)
 | |
|     }
 | |
|   }
 | |
| }
 | |
| </script>
 | |
| 
 | |
| <style lang="scss" scoped>
 | |
| .AiDvMap {
 | |
|   display: flex;
 | |
|   align-items: center;
 | |
|   justify-content: center;
 | |
|   width: 100%;
 | |
|   height: 100%;
 | |
| }
 | |
| </style>
 |