vue+echarts绘制省份地图并添加自定义标注方式
echarts绘制省份地图并添加自定义标注
效果图
在main.js中引入地图
- import echarts from ‘echarts’
- vue.prototype.$echarts = echarts;
省份是动态引入的,在.vue文件中
html部分
- <div id=“province_map_box”>
- <div id=province_map”></div>
- </div>
css部分
- <style lang=“scss” scoped>
- #province_map_box {
- height: 500px;
- position: relative;
- }
- #province_map_box #province_map{
- height: 100%;
- }
- #province_map_box .province_map_logo{
- position: absolute;
- top: 0;
- left: 0;
- width:45px;
- }
- </style>
- <style lang=“scss”>
- #province_map.tooltip_style{
- line–height:1.7;
- overflow: hidden;
- }
- #province_map.tooltip_left{
- float: left;
- }
- #province_map.tooltip_right{
- float: right;
- }
- </style>
script部分
- data () {
- return {
- options: {
- geo: {
- map: “city”,
- scaleLimit: {
- min: 1,
- max: 2
- },
- zoom: 1,
- top: 20,
- label: {
- normal: {
- show:false,
- fontSize: “14”,
- color: “rgba(0,0,0,0.7)”
- },
- emphasis: {
- color: ‘#fff’
- }
- },
- itemStyle: {
- normal: {
- borderColor: “rgba(0, 0, 0, 0.2)”,
- areaColor: “#3b9cff”,//设置地图区域背景色
- },
- emphasis: {
- areaColor: “#3b9cff”,
- shadowOffsetX: 0,
- shadowOffsetY: 0
- }
- }
- },
- series: [
- {
- name: ‘省份’,
- type: ‘map’,
- geoIndex: 0,
- map: ‘province’,
- data:[]
- },
- {
- name: ‘企业分布’, //红色标注
- type: ‘custom’,
- coordinateSystem: ‘geo’,
- clickable:true,
- data:[]
- }
- ]
- }
- },
- cityJson: {
- features: []
- }
- },
- created(){
- this.city = this.$route.query.city
- },
- mounted() {
- this.$nextTick(()=>{
- this.initEchartMap()
- })
- },
- methods:{
- //初始化中国地图
- initEchartMap() {
- let mapDiv = document.getElementById(‘japan_map’)
- let myChart = this.$echarts.init(mapDiv)
- let city = this.city
- //动态引入省份json文件
- this.cityJson = require(`echarts/map/json/province/${city}.json`)
- this.$echarts.registerMap(‘city’, this.cityJson, {})
- this.setEchartOption()
- myChart.setOption(this.options)
- //可为自定义图标添加点击事件
- myChart.on(‘click’, {element: ‘aaa’}, (params) => {
- // todo: 当 name 为 ‘aaa’ 的图形元素被点击时,此回调被触发。
- });
- },
- //修改echart配制
- setEchartOption(){
- //红色标注点的坐标
- let markList = [
- { name: ‘五常’, value: [123.523565,52.920114] },
- { name: ‘中治’, value: [126.319954,46.400728] },
- { name: ‘中顺’, value: [133.310927,47.271857] },
- { name: ‘常也’, value: [129.631468,45.65747] },
- { name: ‘可谭’, value: [130.551333,47.321922] },
- { name: ‘顺允’, value: [125.436884,48.460261] },
- ]
- this.options.series[1].data = markList
- if(markList.length>0){
- this.options.series[1].renderItem = function(params,api){
- return {
- type: ‘image’,
- name: ‘aaa’,
- style: {
- image: require(“@/assets/img/icon_mark.png”), //标注点图标
- width: 14,
- height: 18,
- x: api.coord([markList[params.dataIndex].value[0], markList[params.dataIndex].value[1]])[0],
- y: api.coord([markList[params.dataIndex].value[0], markList[params.dataIndex].value[1]])[1]
- }
- }
- }
- }
- }
- }
注: echarts v4.2.1版本安装后会有地图json文件
echarts添加地图标点(笔记)
如图:
实例html:
- <!DOCTYPE html>
- <html style=“height: 100%“>
- <head>
- <meta charset=“utf-8”>
- </head>
- <body style=“height: 100%; margin: 0“>
- <div id=“container” style=“height: 100%“></div>
- <script type=“text/Javascript” src=“https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js”></script>
- <!– <script type=”text/javascript” src=”https://cdn.jsdelivr.net/npm/echarts-gl/dist/echarts-gl.min.js”></script> –>
- <!– <script type=”text/javascript” src=”https://cdn.jsdelivr.net/npm/echarts-stat/dist/ecStat.min.js”></script> –>
- <!– <script type=”text/javascript” src=”https://cdn.jsdelivr.net/npm/echarts/dist/extension/dataTool.min.js”></script> –>
- <script type=“text/javascript” src=“https://cdn.jsdelivr.net/npm/echarts/map/js/china.js”></script>
- <script type=“text/javascript” src=“E:\incuBATor-echarts-4.8.0\map\js\province\guangxi.js”></script>
- <!– <script type=”text/javascript” src=”https://cdn.jsdelivr.net/npm/echarts/map/js/world.js”></script> –>
- <!– <script type=”text/javascript” src=”https://api.map.baidu.com/api?v=2.0&ak=xfhhaTThl11qYVrqLZii6w8qE5ggnhrY&__ec_v__=20190126″></script>
- <script type=”text/javascript” src=”https://cdn.jsdelivr.net/npm/echarts/dist/extension/bmap.min.js”></script> –>
- <script type=“text/javascript”>
- var dom = document.getElementById(“container”);
- var myChart = echarts.init(dom);
- var app = {};
- option = null;
- var geoCoordMap = {
- “南宁医院”:[108.324994,22.810701]
- };
- var convertData = function (data) {
- var res = [];
- for (var i = 0; i < data.length; i++) {
- var geoCoord = geoCoordMap[data[i].name];
- if (geoCoord) {
- res.push(geoCoord.concat(data[i].value).concat(data[i].name));
- }
- }
- console.log(res);
- return res;
- };
- option = {
- backgroundColor: ‘#fff’,
- title: {
- text: ‘广西区合作医院分布’,
- subtext: ‘data from 数字广润’,
- sublink: ‘http://gxgrtech.com.cn/’,
- left: ‘center’,
- textStyle: {
- color: ‘#000’
- }
- },
- tooltip: {
- trigger: ‘item’,
- //formatter: “名称:{a}<br />坐标:{c}”
- formatter:function(params){
- console.log(params);
- console.log(params.data[3]);
- var res = ‘名称:’+params.data[3]+‘<br/>’;
- return res;
- }
- },
- legend: {
- orient: ‘vertical’,
- top: ‘bottom’,
- left: ‘right’,
- data:[‘医院’],
- textStyle: {
- color: ‘#fff’
- }
- },
- visualMap: {
- min: 0,
- max: 300,
- splitNumber: 5,
- color: [‘#d94e5d’,‘#eac736’,‘#50a3ba’],
- textStyle: {
- color: ‘#fff’
- },
- dimension:3
- },
- geo: {
- map: ‘广西’,
- label: {
- normal: {
- show:true,
- areaColor: ‘#ffefd5’,
- borderColor: ‘#111’,
- textStyle:{color:“#c71585”}
- },
- emphasis: {
- show: false,
- textStyle:{color:“#fff”}
- }
- },
- itemStyle: {
- normal: {
- show:false,
- areaColor: ‘#ffefd5’,
- borderColor: ‘#009fe8’
- },
- emphasis: {
- show:false,
- areaColor: ‘#f47920’
- }
- }
- },
- series: [
- {
- name: ‘医院’,
- type: ‘scatter’,
- coordinateSystem: ‘geo’,
- data: convertData([
- {name: “南宁医院”, value: 9}
- ]),
- encode: {
- value: 2
- },
- symbolSize: 12,
- label: {
- normal: {
- show: false,//显示市区标签
- textStyle:{color:“#c71585”}//省份标签字体颜色
- },
- emphasis: {//对应的鼠标悬浮效果
- show: true, //关闭文字 (这东西有问题得关)
- textStyle:{color:“#800080”}
- }
- },
- itemStyle: {
- normal: {
- borderWidth: .5,//区域边框宽度
- borderColor: ‘#009fe8’,//区域边框颜色
- areaColor:“#ffefd5”,//区域颜色
- },
- emphasis: {
- show:true,
- borderWidth: .5,
- borderColor: ‘#4b0082’,
- areaColor:“#f47920”,
- }
- }
- }
- ]
- };
- if (option && typeof option === “object”) {
- myChart.setOption(option, true);
- }
- </script>
- </body>
- </html>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
发表评论