美文网首页超级程序猿程序员技术初心
ECharts如何制作省份地图并在地图上显示自定义图标

ECharts如何制作省份地图并在地图上显示自定义图标

作者: 邵佳楠 | 来源:发表于2018-01-16 11:02 被阅读4045次

之前一直被客户提的一个需求烦恼着,他要只显示某个省份的地图,并且呢要在地图上显示小车的图标,还有其它一些点的信息。我以前只用过echarts做过图表,没做过地图,所以自己也是网上看了很多并且看了很多api文档,最后总算是搞出来了,在这里留个笔记方便自己也方便别人。

步入正题之前需要下几个文件

  1. echats的js文件,自己可以去官网上下
  2. 地图省份的数据 (可能有的省份不对),这是我的 网盘地址: 密码:8xa9
    下面步入正题:
    先放上一张效果图(小车图标的位置我是随机生成了,所以有点丑不要介意哈)
    效果图

我这里就以显示贵州省的地图为例,首先引入几个JS文件:

    <script src="~/Scripts/jquery.js"></script>/*Jquery文件*/
    <script src="~/Scripts/echarts.js"></script>/*echarts文件,可从官网下载,我这里用的是3.0的*/
    <script src="~/Scripts/guizhou.js"></script>/*省份数据,可从我的网盘中下载*/
    <script src="~/Scripts/mapData/ColdCar.js"></script>/*地图上车辆显示的经纬度数据*/

车辆经纬度的数据格式大致如下

var coldCar = [
    {
        "name": "车辆1",
        "value": [107.615944, 27.479744, 2]
    },
    {
        "name": "车辆2",
        "value": [108.296644, 27.676476, 2]
    }
]

定义一个div标签用来初始化echarts

<!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
<div id="echartMap" style="width: 100%;height:100%;"></div>

具体的JS实现代码

        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('echartMap'));
        var option = {
            tooltip: {
                show: true,
                trigger: 'item',
                triggerOn: 'click',
                formatter: "名称:{b}<br />坐标:{c}"
            },
            series: [
                {
                    name: '冷链仓储分布',
                    type: 'effectScatter',
                    coordinateSystem: 'geo',
                    zlevel: 2,
                    rippleEffect: {
                        brushType: 'stroke'
                    },
                    label: {
                        emphasis: {
                            show: true,
                            position: 'right',
                            formatter: '{b}'
                        }
                    },
                    symbolSize: 10,
                    showEffectOn: 'render',
                    itemStyle: {
                        normal: {
                            color: '#46bee9'
                        }
                    },
                    data: coldStore
                }, {
                    name: "冷链运输车分布",
                    type: 'custom',//配置显示方式为用户自定义
                    coordinateSystem: 'geo',
                    itemStyle: {
                        normal: {
                            color: '#46bee9'
                        }
                    },
                    renderItem: function (params, api) {//具体实现自定义图标的方法
                        return {
                            type: 'image',
                            style: {
                                image: "../../Content/images/汽车.png",
                                x: api.coord([
                                    coldCar[params.dataIndex].value[0], coldCar[params.dataIndex]
                                        .value[1]
                                ])[0],
                                y: api.coord([
                                    coldCar[params.dataIndex].value[0], coldCar[params.dataIndex]
                                        .value[1]
                                ])[1]
                            }
                        }
                    },
                    data: coldCar
                }, {
                    name: "高风险食品安全分布",
                    type: 'effectScatter',
                    coordinateSystem: 'geo',
                    rippleEffect: {
                        brushType: 'stroke'
                    },
                    label: {
                        emphasis: {
                            show: true,
                            position: 'right',
                            formatter: '{b}'
                        }
                    },
                    symbolSize: 10,
                    showEffectOn: 'render',
                    zlevel: 2,
                    itemStyle: {
                        normal: {
                            color: '#FF4500'
                        }
                    },
                    data: coldFood
                }, {
                    name: "药品安全分布",
                    type: 'effectScatter',
                    coordinateSystem: 'geo',
                    rippleEffect: {
                        brushType: 'stroke'
                    },
                    label: {
                        emphasis: {
                            show: true,
                            position: 'right',
                            formatter: '{b}'
                        }
                    },
                    symbolSize: 10,
                    showEffectOn: 'render',
                    zlevel: 2,
                    itemStyle: {
                        normal: {
                            color: '#9932CC'
                        }
                    },
                    data: coldMed
                }
            ],
            legend: {
                type: "plain",
                show: true,
                orient: 'vertical',
                top: 'middle',
                left: 'left',
                data: [
                    {
                        name: "冷链仓储分布",
                        icon: "circle",
                        textStyle: {
                            color: "#a9d6fa"
                        }
                    },
                    {
                        name: "冷链运输车分布",
                        icon: "circle",
                        textStyle: {
                            color: "#a9d6fa"
                        }
                    },
                    {
                        name: "高风险食品安全分布",
                        icon: "circle",
                        textStyle: {
                            color: "#a9d6fa"
                        }
                    },
                    {
                        name: "药品安全分布",
                        icon: "circle",
                        textStyle: {
                            color: "#a9d6fa"
                        }
                    }
                ]
            },
            geo: {//引入贵州省的地图
                map: '贵州',
                label: {
                    emphasis: {
                        show: false
                    }
                },
                roam: true,
                zoom: 1,
                itemStyle: {
                    normal: {
                        borderColor: '#387ba7',
                        shadowColor: 'rgba(0, 0, 0, 0.5)',
                        shadowBlur: 10,
                        shadowOffsetX: 10
                    },
                    emphasis: {
                        areaColor: '#b3f3f3'
                    }
                },
                regions: [//对不同的区块进行着色
                    {
                        name: '毕节市',
                        itemStyle: {
                            normal: {
                                areaColor: '#2b97df'
                            }
                        }
                    }, {
                        name: '遵义市',
                        itemStyle: {
                            normal: {
                                areaColor: '#a9d6fd'
                            }
                        }
                    }, {
                        name: '铜仁市',
                        itemStyle: {
                            normal: {
                                areaColor: '#3497df'
                            }
                        }
                    }, {
                        name: '贵阳市',
                        itemStyle: {
                            normal: {
                                areaColor: '#0d4369'
                            }
                        }
                    }, {
                        name: '安顺市',
                        itemStyle: {
                            normal: {
                                areaColor: '#005c9b'
                            }
                        }
                    }, {
                        name: '黔西南布依族苗族自治州',
                        itemStyle: {
                            normal: {
                                areaColor: '#a9d6fd'
                            }
                        }
                    }, {
                        name: '六盘水市',
                        itemStyle: {
                            normal: {
                                areaColor: '#0d4369'
                            }
                        }
                    }, {
                        name: '黔东南苗族侗族自治州',
                        itemStyle: {
                            normal: {
                                areaColor: '#005c9b'
                            }
                        }
                    }, {
                        name: '黔南布依族苗族自治州',
                        itemStyle: {
                            normal: {
                                areaColor: '#2b97df'
                            }
                        }
                    }
                ]
            }
        };
        myChart.setOption(option);

代码呢,大致如上,显示自定义图标的代码主要是这段,具体的参数大家可以去官网看文档

 {
                    name: "冷链运输车分布",
                    type: 'custom',//配置显示方式为用户自定义
                    coordinateSystem: 'geo',
                    itemStyle: {
                        normal: {
                            color: '#46bee9'
                        }
                    },
                    renderItem: function (params, api) {//具体实现自定义图标的方法
                        return {
                            type: 'image',
                            style: {
                                image: "../../Content/images/汽车.png",
                                x: api.coord([
                                    coldCar[params.dataIndex].value[0], coldCar[params.dataIndex]
                                        .value[1]
                                ])[0],
                                y: api.coord([
                                    coldCar[params.dataIndex].value[0], coldCar[params.dataIndex]
                                        .value[1]
                                ])[1]
                            }
                        }
                    },
                    data: coldCar
                }

显示自定义地图的代码是这块

geo: {//引入贵州省的地图
                map: '贵州',
                label: {
                    emphasis: {
                        show: false
                    }
                },
                roam: true,
                zoom: 1,
                itemStyle: {
                    normal: {
                        borderColor: '#387ba7',
                        shadowColor: 'rgba(0, 0, 0, 0.5)',
                        shadowBlur: 10,
                        shadowOffsetX: 10
                    },
                    emphasis: {
                        areaColor: '#b3f3f3'
                    }
                },

好了,大致的代码就这么多啦,希望能帮到大家
最后附上完整的代码文件: 网盘地址 密码:hnn9

相关文章

网友评论

  • 2ebde3d29438:请问一下,怎么显示出地图名字
  • Strive0427:我下载的也是乱码的
    邵佳楠:@随遇而安_642b https://www.jianshu.com/p/4a55f5f11cf4可以看我这篇文章用我这里面的json
  • YOYO是菜鸟:亲,我想问一下,您给提供的网盘里的js 和json 这两个文件分别是做什么的呢?我想做一个市的地图,然后把这个市的各个区划分出来显示,该怎么做呢?
    邵佳楠:@二十二_b98d 我今天写一个单独扣地图的文章,到时候你看下
    YOYO是菜鸟:@邵佳楠 亲 可以加一下扣扣交流么?741351653
    我是只想做一个市的地图,比如青岛市,然后把青岛市的地区划分 一下
    邵佳楠:@二十二_b98d guizhou.js是地图的json数据,这个可以换成你想要的任何地图数据,coldcar.js就是用来控制echart的js,如果你想做一个市的地图,我上面一个网盘里面有 全国省份的数据,你可以单独拿出你需要省的数据然后把guzhou.js替换显示就好了
  • hfm0922:打开的地图json文件是乱码,什么原因?
    邵佳楠:@hfm0922 不会吧。。其他人都好好的
  • 0e81b76ec48a:楼主会不会写显示县的地图啊?求大佬带飞~~~
    邵佳楠:@710281 这个其实只要把地图的json数据改成县就好了,生成县的json可以从geojson上面自己画或者用我给的库 从省里面扣出县
  • 4d438c59bf59:请问地图在哪里可以制作,我想要某几个省的地图而不是单个省的怎么弄?
  • 4d438c59bf59:你好,能加QQ吗,有急事需要请教,我的QQ是:2576588874
  • c35096101623:你好,自定义图片过后,地图上点绑定不上事件,有解决的办法吗
    邵佳楠:@向往_cf27 实现不了这个效果。。。。尴尬。。
    c35096101623:@邵佳楠 graphic能实现现在的效果上添加 tooltip效果吗,能分享下代码吗
    邵佳楠:我刚研究了一会儿,发现确实点击事件用不了,不过写在graphic这个下面的话是可以的,单独用custom自定义就不行,可以去他们问题交流那边提问一下
  • 764825af4e69:你的地图数据js文件解救了我!
    邵佳楠:@我们都是好孩子65 不谢不谢,嘿嘿
  • 764825af4e69:非常感谢
  • 易冷zzz:你好问一下你这篇文章的代码是如何插入的?看到插入的代码效果跟编辑器里的一致,所以想学习一下,谢谢
    邵佳楠:就切换到markdown模式,然后使用代码块标签把代码复制进去就好了
  • e0e03d73c741:请问能在全国地图上添加自定义图标吗?
    邵佳楠:@Memor黯然_4205 可以的,只要根据实际省份的经纬度来进行标注序号就好了
    e0e03d73c741:在全国地图上有个排序需要在前十个省上标注序号能行吗?
    邵佳楠:可以的。把地图数据换成全国地图就好了
  • congcongzhang:您好,刚开头的那个Jquery.js和最后那个地图的都是自己写的嘛,我是新手,您的完整代码能发我邮箱1007358526@qq.com一份吗,很感谢,最后的网盘链接不能用了
    邵佳楠:链接:https://pan.baidu.com/s/1t1LO9XEJBIryo8VW2alF4A 密码:hnn9 你看下是不是这个
  • Sunshine喵小喵:x: api.coord([
    coldCar[params.dataIndex].value[0], coldCar[params.dataIndex]
    .value[1]
    ])[0],
    这个没看明白,大佬能否给指点一下
  • b08a5540dfcc:你好我想问 ,地图的数据可以生成吗,比如贵州现在多个贵安新区
    风花雪月_4b92:怎么不显示文字
    邵佳楠:@我素熊猫 应该是可以的,具体我也记不太清楚了。。。百度看看有没有生成GeoJson的网站
    我素熊猫:同问 能解决吗。 还有个双龙区

本文标题:ECharts如何制作省份地图并在地图上显示自定义图标

本文链接:https://www.haomeiwen.com/subject/ctfsoxtx.html