关键词搜索

源码搜索 ×
×

Python制作炫酷的个人足迹地图

发布2022-08-04浏览7543次

详情内容

用Python来绘制自己的个人足迹地图, 精确到市级别。

首先我们需要安装以下Python的第三方模块:

echarts-china-cities-pypkg==0.0.9      
echarts-china-provinces-pypkg==0.0.3      
pyecharts==1.6.2
PyYAML==5.3.1 

    本项目的完整结构如下:

    我们在项目中采用YAML文件来配置自己旅行过的省以及省下面的市,配置文件如下:

    北京:

    • 延庆区
    • 昌平区
    • 海淀区
    • 东城区
    • 西城区
    • 大兴区
    • 朝阳区

    上海:

    • 嘉定区
    • 青浦区
    • 松江区
    • 宝山区
    • 闵行区
    • 奉贤区
    • 浦东新区
    • 崇明区
    • 徐汇区
    • 黄浦区
    • 静安区
    • 杨浦区
    • 虹口区
    • 金山区
    • 长宁区
    • 普陀区

    天津:

    • 滨海新区
    • 南开区
    • 河西区
    • 和平区

    河北:

    • 保定市
    • 廊坊市

    山东:

    • 烟台市
    • 青岛市

    江苏:

    • 南京市
    • 苏州市
    • 扬州市
    • 镇江市
    • 无锡市

    浙江:

    • 杭州市
    • 绍兴市
    • 宁波市
    • 舟山市
    • 湖州市
    • 嘉兴市
    • 台州市
    • 金华市

    江西:

    • 南昌市
    • 九江市

    安徽:

    • 黄山市

    湖北:

    • 武汉市

    湖南:

    • 长沙市

    海南:

    • 海口市
    • 三亚市

    四川:

    • 成都市

    广东:

    • 湛江市

    接着我们利用Python脚本来生成足迹地图。先是全国地图,用于显示省和直辖市的情况,china_map.py的代码如下:

    # -*- coding: utf-8 -*-
    # author: Jclian91
    # place: Pudong Shanghai
    # time: 2020/5/31 9:21 上午
    # 绘制个人足迹地图:全国范围
    import yaml
    from pyecharts.charts import Map
    from pyecharts import options as opts
    
    # 省和直辖市
    with open("travel_config.yml", 'r', encoding='utf-8') as ymlfile:
        province_city_dict = yaml.safe_load(ymlfile)
    
    province_dict = dict(zip(province_city_dict.keys(), [1]*len(province_city_dict.keys())))
    print(province_dict)
    
    # maptype='china' 只显示全国直辖市和省级
    map = Map(init_opts=opts.InitOpts(width='1200px', height='800px'))
    map.set_global_opts(
        title_opts=opts.TitleOpts(title="个人足迹地图"),
        visualmap_opts=opts.VisualMapOpts(max_=1, is_piecewise=True,
                                          pieces=[
                                            {"max": 1, "min": 1, "label": "去过", "color": "#4EA397"},
                                            {"max": 0, "min": 0, "label": "未去过", "color": "#FFFFFF"},
                                            ])  #最大数据范围,分段
                                         )
    map.add("个人足迹地图", data_pair=province_dict.items(), maptype="china", is_roam=True)
    map.render('全国.html')
    
      5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    运行上述脚本,会生成全国.html。为了保证图片居中显示,我们对该HTML中的下面一行:

    <div id="a438407081634ceab6af1c965034ae16" class="chart-container" style="width:1200px; height:800px;"></div>
    
    • 1

    的样式(style)增加如下内容:

    margin:auto;top:30px
    
    • 1

    全国范围的足迹地图效果图如下:

    接着,我们来生成每个省市的足迹地图,利用province_map.py脚本,代码如下:

    # -*- coding: utf-8 -*-
    # author: Jclian91
    # place: Pudong Shanghai
    # time: 2020/5/31 10:01 上午
    # 绘制个人足迹地图:省市范围
    import yaml
    from pyecharts.charts import Map
    from pyecharts import options as opts
    
    # 省和直辖市下面的市
    with open("travel_config.yml", 'r', encoding='utf-8') as ymlfile:
        province_city_dict = yaml.safe_load(ymlfile)
    
    
    for province, cities in province_city_dict.items():
    
        map = Map(init_opts=opts.InitOpts(width='1200px', height='800px'))
        map.set_global_opts(
            title_opts=opts.TitleOpts(title="个人足迹地图-%s" % province),
            visualmap_opts=opts.VisualMapOpts(max_=1, is_piecewise=True,
                                              pieces=[
                                                {"max": 1, "min": 1, "label": "去过", "color": "#4EA397"},
                                                {"max": 0, "min": 0, "label": "未去过", "color": "#FFFFFF"},
                                                ])  #最大数据范围,分段
                                             )
        city_dict = dict(zip(cities, [1]*len(cities)))
        map.add("个人足迹地图-%s" % province, data_pair=city_dict.items(), maptype=province, is_roam=True)
        map.render('./provinces/%s.html' % province)
        print("生成个人足迹地图-%s 成功" % province)
    
      5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    这时,会在provinces目录下生成每个省或者直辖市的足迹地图,我们分别对每个HTML进行修改,保证图片居中。我们在这里只展示三个省市的情况:


    在这里插入图片描述

    最后一步,也是最为关键的一步,就是我们要打通全国足迹地图和每个省市足迹地图的联系,也就是说,我们点击全国足迹地图上去过的省份,那么可以点击进去查看该省市下的足迹地图情况,比如说去过哪些市。
      对此,我们修改生成的全国.html文件,假设该地图的图像句柄为chart_a438407081634ceab6af1c965034ae16,那么在最后的

        chart_a438407081634ceab6af1c965034ae16.on('click', function (param){
            var selected = param.name;
                if (selected) {
                    switch(selected){
                        case '北京':
                            location.href = "provinces/北京.html";
                            break;
                        case '上海':
                            location.href = "provinces/上海.html";
                            break;
                        case '天津':
                            location.href = "provinces/天津.html";
                            break;
                        case '四川':
                            location.href = "provinces/四川.html";
                            break;
                        case '安徽':
                            location.href = "provinces/安徽.html";
                            break;
                        case '山东':
                            location.href = "provinces/山东.html";
                            break;
                        case '江苏':
                            location.href = "provinces/江苏.html";
                            break;
                        case '江西':
                            location.href = "provinces/江西.html";
                            break;
                        case '河北':
                            location.href = "provinces/河北.html";
                            break;
                        case '浙江':
                            location.href = "provinces/浙江.html";
                            break;
                        case '海南':
                            location.href = "provinces/海南.html";
                            break;
                        case '湖北':
                            location.href = "provinces/湖北.html";
                            break;
                        case '湖南':
                            location.href = "provinces/湖南.html";
                            break;
                        case '广东':
                            location.href = "provinces/广东.html";
                            break;
                        default:
                            break;
                    }
    
            }
      });
    
      5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    我特意制作了个人足迹地图的视频:

    个人足迹

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载