vue引入echarts 展示中国地图,点击省份显示市级区域
点击前展示:
点击省份后,展示:
1、5.0以上不再有省市区数据,所以npm 4.9版本
C/C++ Code复制内容到剪贴板
- npm install echarts@4.9.0
2、使用:
XML/HTML Code复制内容到剪贴板
- <div class="map">
- <china-map :mapStyle="{width: '550px', height: '450px'}"></china-map>
- </div>
- <script>
- import chinaMap from './components/chind-map.vue'
- export default {
- components: {
- chinaMap
- },
- ...
不带点击进入市区的模板
XML/HTML Code复制内容到剪贴板
- <template>
- <div class="map">
- <div id="myChartChina" :style="mapStyle"></div>
- </div>
- </template>
- <script>
- import echarts from 'echarts'
- import china from 'echarts/map/json/china.json'
- // import Vue from 'vue'
- // echarts.registerMap('china', china)
- // Vue.prototype.$echartsecharts = echarts
- export default {
- props: {
- mapStyle: {
- type: Object,
- default () {
- return {}
- }
- }
- },
- data () {
- return {
- // state: {
- // option: option,
- // detail: false, // 是否使用详细地图
- // curMap:geoJson,
- // }
- }
- },
- created () {
- this.init()
- },
- methods: {
- init () {
- setTimeout(() => {
- echarts.registerMap('china', china)
- this.drawLine()
- }, 100)
- console.log(this.mapStyle)
- },
- drawLine () {
- console.log('地图初始化')
- // 基于准备好的dom,初始化echarts实例
- var myChartContainer = document.getElementById('myChartChina')
- // console.log(myChartContainer)
- // console.log(this.$refs.mapOption)
- // var resizeMyChartContainer = function () {
- // myChartContainer.style.width = 100 + '%'
- // myChartContainer.style.height = window.innerHeight * 0.7 + 'px'
- // }
- // resizeMyChartContainer()
- function randomData () {
- return Math.round(Math.random() * 500)
- }
- var nationMap = echarts.init(myChartContainer)
- // 绘制图表
- var option = {
- tooltip: {
- trigger: 'item',
- formatter: p => {
- // console.log(p)
- let val = p.value
- if (window.isNaN(val)) {
- val = 0
- }
- // const txtCon =
- // "<div style='text-align:center'> 地区:" + p.name + '<br />value值:' + p.data.value + '<br />code:' + p.data.cityCode + '</div>'
- return "<div style='text-align:center'>地区:" + p.name + '<br />'
- }
- },
- legend: {
- orient: 'vertical',
- left: 'left',
- data: ['']
- },
- // 是否允许缩放
- // roam: true,
- // top: 100,
- zoom: 2, // 默认显示级别
- visualMap: {
- show: false,
- // min: 0,
- // max: 1500,
- // // left: '10%',
- // // top: 'bottom',
- // text: ['高', '低'],
- calculable: true,
- color: ['#0b50b9', '#c3e2f4']
- },
- selectedMode: 'single',
- series: [
- {
- // name: '',
- type: 'map',
- mapType: 'china',
- itemStyle: {
- normal: {
- borderColor: 'rgba(0, 0, 0, 0.2)'
- },
- emphasis: {
- shadowOffsetX: 0,
- shadowOffsetY: 0,
- shadowBlur: 20,
- borderWidth: 0,
- shadowColor: 'rgba(0, 0, 0, 0.5)'
- }
- },
- showLegendSymbol: true,
- label: {
- normal: {
- show: true
- },
- emphasis: {
- show: true
- }
- },
- data: [
- { name: '北京', value: randomData() },
- { name: '天津', value: randomData() },
- { name: '上海', value: randomData() },
- { name: '重庆', value: randomData() },
- { name: '河北', value: randomData() },
- { name: '河南', value: randomData() },
- { name: '云南', value: randomData() },
- { name: '辽宁', value: randomData() },
- { name: '黑龙江', value: randomData() },
- { name: '湖南', value: randomData() },
- { name: '安徽', value: randomData() },
- { name: '山东', value: randomData() },
- { name: '新疆', value: randomData() },
- { name: '江苏', value: randomData() },
- { name: '浙江', value: randomData() },
- { name: '江西', value: randomData() },
- { name: '湖北', value: randomData() },
- { name: '广西', value: randomData() },
- { name: '甘肃', value: randomData() },
- { name: '山西', value: randomData() },
- { name: '内蒙古', value: randomData() },
- { name: '陕西', value: randomData() },
- { name: '吉林', value: randomData() },
- { name: '福建', value: randomData() },
- { name: '贵州', value: randomData() },
- { name: '广东', value: randomData() },
- { name: '青海', value: randomData() },
- { name: '西藏', value: randomData() },
- { name: '四川', value: randomData() },
- { name: '宁夏', value: randomData() },
- { name: '海南', value: randomData() },
- { name: '台湾', value: randomData() },
- { name: '香港', value: randomData() },
- { name: '澳门', value: randomData() }
- ]
- }
- ]
- }
- nationMap.setOption(option, true, true)
- },
- }
- }
- </script>
点击进入市区的模板
XML/HTML Code复制内容到剪贴板
- <template>
- <div class="map">
- <div id="myChartChina" :style="mapStyle"></div>
- </div>
- </template>
- <script>
- import echarts from 'echarts'
- import china from 'echarts/map/json/china.json'
- // 定义全国省份的数组
- var provinces = {
- '上海': {
- 'py': 'shanghai'
- },
- '河北': {
- 'py': 'hebei'
- },
- '山西': {
- 'py': 'shanxi'
- },
- '内蒙古': {
- 'py': 'neimenggu'
- },
- '辽宁': {
- 'py': 'liaoning'
- },
- '吉林': {
- 'py': 'jilin'
- },
- '黑龙江': {
- 'py': 'heilongjiang'
- },
- '江苏': {
- 'py': 'jiangsu'
- },
- '浙江': {
- 'py': 'zhejiang'
- },
- '安徽': {
- 'py': 'anhui'
- },
- '福建': {
- 'py': 'fujian'
- },
- '江西': {
- 'py': 'jiangxi'
- },
- '山东': {
- 'py': 'shandong'
- },
- '河南': {
- 'py': 'henan'
- },
- '湖北': {
- 'py': 'hubei'
- },
- '湖南': {
- 'py': 'hunan'
- },
- '广东': {
- 'py': 'guangdong'
- },
- '广西': {
- 'py': 'guangxi'
- },
- '海南': {
- 'py': 'hainan'
- },
- '四川': {
- 'py': 'sichuan'
- },
- '贵州': {
- 'py': 'guizhou'
- },
- '云南': {
- 'py': 'yunnan'
- },
- '西藏': {
- 'py': 'xizang'
- },
- '陕西': {
- 'py': 'shanxi1'
- },
- '甘肃': {
- 'py': 'gansu'
- },
- '青海': {
- 'py': 'qinghai'
- },
- '宁夏': {
- 'py': 'ningxia'
- },
- '新疆': {
- 'py': 'xinjiang'
- },
- '北京': {
- 'py': 'beijing'
- },
- '天津': {
- 'py': 'tianjin'
- },
- '重庆': {
- 'py': 'chongqing'
- },
- '香港': {
- 'py': 'xianggang'
- },
- '澳门': {
- 'py': 'aomen'
- },
- '台湾': {
- 'py': 'taiwan'
- }
- }
- var nationMap
- export default {
- props: {
- mapStyle: {
- type: Object,
- default () {
- return {}
- }
- }
- },
- data () {
- return {
- isIntoProvince: false
- }
- },
- created () {
- this.init()
- },
- methods: {
- init () {
- setTimeout(() => {
- echarts.registerMap('china', china)
- this.drawLine('china')
- // console.log(china)
- nationMap.on('click', param => {
- this.isIntoProvince = !this.isIntoProvince
- // console.log(param)
- // console.log(this.isIntoProvince)
- if (!this.isIntoProvince) {
- this.drawLine('china')
- } else {
- // 遍历取到provincesText 中的下标 去拿到对应的省js
- const province = provinces[param.name]
- if (province) {
- console.log(province)
- // 获取得城市拼音
- this.showProvince(param.name, province.py)
- }
- }
- })
- }, 100)
- },
- drawLine (area) {
- console.log('地图初始化')
- // 基于准备好的dom,初始化echarts实例
- var myChartContainer = document.getElementById('myChartChina')
- // console.log(myChartContainer)
- // console.log(this.$refs.mapOption)
- // var resizeMyChartContainer = function () {
- // myChartContainer.style.width = 100 + '%'
- // myChartContainer.style.height = window.innerHeight * 0.7 + 'px'
- // }
- // resizeMyChartContainer()
- function randomData () {
- return Math.round(Math.random() * 500)
- }
- nationMap = echarts.init(myChartContainer)
- // 绘制图表
- var option = {
- tooltip: {
- trigger: 'item',
- formatter: p => {
- // console.log(p)
- let val = p.value
- if (window.isNaN(val)) {
- val = 0
- }
- // const txtCon =
- // "<div style='text-align:center'> 地区:" + p.name + '<br />value值:' + p.data.value + '<br />code:' + p.data.cityCode + '</div>'
- return "<div style='text-align:center'>地区:" + p.name + '<br />'
- }
- },
- legend: {
- orient: 'vertical',
- left: 'left',
- data: ['']
- },
- // 是否允许缩放
- // roam: true,
- // top: 100,
- zoom: 2, // 默认显示级别
- visualMap: {
- show: false,
- // min: 0,
- // max: 1500,
- // // left: '10%',
- // // top: 'bottom',
- // text: ['高', '低'],
- calculable: true,
- color: ['#0b50b9', '#c3e2f4']
- },
- selectedMode: 'single',
- series: [
- {
- // name: '',
- type: 'map',
- mapType: area,
- itemStyle: {
- normal: {
- borderColor: 'rgba(0, 0, 0, 0.2)'
- },
- emphasis: {
- shadowOffsetX: 0,
- shadowOffsetY: 0,
- shadowBlur: 20,
- borderWidth: 0,
- shadowColor: 'rgba(0, 0, 0, 0.5)'
- }
- },
- showLegendSymbol: true,
- label: {
- normal: {
- show: true
- },
- emphasis: {
- show: true
- }
- },
- data: [
- { name: '北京', value: randomData() },
- { name: '天津', value: randomData() },
- { name: '上海', value: randomData() },
- { name: '重庆', value: randomData() },
- { name: '河北', value: randomData() },
- { name: '河南', value: randomData() },
- { name: '云南', value: randomData() },
- { name: '辽宁', value: randomData() },
- { name: '黑龙江', value: randomData() },
- { name: '湖南', value: randomData() },
- { name: '安徽', value: randomData() },
- { name: '山东', value: randomData() },
- { name: '新疆', value: randomData() },
- { name: '江苏', value: randomData() },
- { name: '浙江', value: randomData() },
- { name: '江西', value: randomData() },
- { name: '湖北', value: randomData() },
- { name: '广西', value: randomData() },
- { name: '甘肃', value: randomData() },
- { name: '山西', value: randomData() },
- { name: '内蒙古', value: randomData() },
- { name: '陕西', value: randomData() },
- { name: '吉林', value: randomData() },
- { name: '福建', value: randomData() },
- { name: '贵州', value: randomData() },
- { name: '广东', value: randomData() },
- { name: '青海', value: randomData() },
- { name: '西藏', value: randomData() },
- { name: '四川', value: randomData() },
- { name: '宁夏', value: randomData() },
- { name: '海南', value: randomData() },
- { name: '台湾', value: randomData() },
- { name: '香港', value: randomData() },
- { name: '澳门', value: randomData() }
- ]
- }
- ]
- }
- nationMap.setOption(option, true, true)
- // nationMap.on('georoam', this.onDatazoom) // 缩放监听事件
- },
- /**
- *
- * @param {省份中文名} cnName
- * @param {省份拼音名} pyName
- */
- showProvince (cnName, pyName) {
- require('echarts/map/js/province/' + pyName + '.js')
- this.drawLine(cnName)
- },
- /**
- * 地图缩小/放大
- */
- onDatazoom () {
- console.log('地图放大,缩小')
- // const { detail, option } = this.state
- // const { zoom } = this.getZoom()
- // const threshold = 1.7
- // this.saveZoom() // 地图缩放后,将缩放值和center保存在状态中
- // if (zoom >= threshold && !detail) {
- // // 切换详细地图
- // option.geo.itemStyle.normal.borderColor = darkBlue
- // option.geo.itemStyle.normal.shadowColor = darkBlue
- // this.setState({
- // detail: true,
- // option,
- // curMap: sqJson
- // })
- // this.drawMap(sqJson)
- // } else if (detail && zoom < threshold) {
- // // 切换默认地图
- // option.geo.itemStyle.normal.borderColor = defaultBlue
- // option.geo.itemStyle.normal.shadowColor = defaultBlue
- // this.setState({
- // detail: false,
- // option,
- // curMap: geoJson
- // })
- // this.drawMap(geoJson)
- // }
- }
- }
- }
- </script>
给地图加阴影
XML/HTML Code复制内容到剪贴板
- series: [
- {
- // name: '',
- type: 'map',
- mapType: area,
- itemStyle: {
- normal: {
- borderColor: 'rgba(0, 0, 0, 0.2)',
- // 设置扇形的阴影
- shadowBlur: 20,
- shadowColor: 'rgba(0,0,0,0.4)',
- shadowOffsetX: -5,
- shadowOffsetY: 5
- },
下一篇 小程序-微信支付