基于Python绘制个人足迹地图


Posted in Python onJune 01, 2020

前言

前两年,足迹地图小程序风靡朋友圈,一时间大家都流行晒自己的旅行地图。但是,笔者最近体验了好几款足迹地图的小程序,发现这些小程序虽然号称是足迹地图,但最多只是展示到省级别,无法精确到市级别,因此,笔者周末花了点时间,用Python来绘制自己的个人足迹地图,可以精确到市级别。

下面的部分,笔者将介绍如何简单地来绘制个人足迹地图。

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

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

本项目的完整结构如下:

基于Python绘制个人足迹地图

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

北京:
 - 延庆区
 - 昌平区
 - 海淀区
 - 东城区
 - 西城区
 - 大兴区
 - 朝阳区
上海:
 - 嘉定区
 - 青浦区
 - 松江区
 - 宝山区
 - 闵行区
 - 奉贤区
 - 浦东新区
 - 崇明区
 - 徐汇区
 - 黄浦区
 - 静安区
 - 杨浦区
 - 虹口区
 - 金山区
 - 长宁区
 - 普陀区
天津:
 - 滨海新区
 - 南开区
 - 河西区
 - 和平区
河北:
 - 保定市
 - 廊坊市
山东:
 - 烟台市
 - 青岛市
江苏:
 - 南京市
 - 苏州市
 - 扬州市
 - 镇江市
 - 无锡市
浙江:
 - 杭州市
 - 绍兴市
 - 宁波市
 - 舟山市
 - 湖州市
 - 嘉兴市
 - 台州市
 - 金华市
江西:
 - 南昌市
 - 九江市
安徽:
 - 黄山市
湖北:
 - 武汉市
湖南:
 - 长沙市
海南:
 - 海口市
 - 三亚市
四川:
 - 成都市
广东:
 - 湛江市

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

g: 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')

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

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

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

margin:auto;top:30px

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

个人足迹地图——全国

基于Python绘制个人足迹地图

接着,我们来生成每个省市的足迹地图,利用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)

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

个人足迹地区——海南

基于Python绘制个人足迹地图

个人足迹地图——江苏

基于Python绘制个人足迹地图

个人足迹地图——浙江

基于Python绘制个人足迹地图

最后一步,也是最为关键的一步,就是我们要打通全国足迹地图和每个省市足迹地图的联系,也就是说,我们点击全国足迹地图上去过的省份,那么可以点击进去查看该省市下的足迹地图情况,比如说去过哪些市。

对此,我们修改生成的全国.html文件,假设该地图的图像句柄为chart_a438407081634ceab6af1c965034ae16,那么在最后的<script>对中添加内容如下:(确保点击去过的省份,可以查看该省市的足迹地图)

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;
          }

      }
   });

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
10个易被忽视但应掌握的Python基本用法
Apr 01 Python
python通过定义一个类实例作为ftp回调方法
May 04 Python
详解Python中的Descriptor描述符类
Jun 14 Python
Python SqlAlchemy动态添加数据表字段实例解析
Feb 07 Python
Python实现12306火车票抢票系统
Jul 04 Python
python调用Matplotlib绘制分布点图
Oct 18 Python
用python画一只可爱的皮卡丘实例
Nov 21 Python
详解python 中in 的 用法
Dec 12 Python
Django框架教程之中间件MiddleWare浅析
Dec 29 Python
python使用gdal对shp读取,新建和更新的实例
Mar 10 Python
浅谈python3 构造函数和析构函数
Mar 12 Python
Python实现滑雪小游戏
Sep 25 Python
python 写函数在一定条件下需要调用自身时的写法说明
Jun 01 #Python
解决python调用自己文件函数/执行函数找不到包问题
Jun 01 #Python
Python如何在循环内使用list.remove()
Jun 01 #Python
IntelliJ 中配置 Anaconda的过程图解
Jun 01 #Python
解决python中import文件夹下面py文件报错问题
Jun 01 #Python
浅谈Python中文件夹和python package包的区别
Jun 01 #Python
python 通过文件夹导入包的操作
Jun 01 #Python
You might like
利用discuz自带通行证整合dedecms的方法以及文件下载
2007/03/06 PHP
修改php.ini以达到屏蔽错误信息并记录日志
2013/06/16 PHP
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
$()JS小技巧
2007/07/21 Javascript
js自定义事件及事件交互原理概述(二)
2013/02/01 Javascript
JS控制阿拉伯数字转为中文大写示例代码
2013/09/04 Javascript
类似php的js数组的in_array函数自定义方法
2013/12/27 Javascript
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
使用jQuery在对象中缓存选择器的简单方法
2015/06/30 Javascript
Jquery中map函数的用法
2016/06/03 Javascript
Angular 4依赖注入学习教程之简介(一)
2017/06/04 Javascript
angular内置provider之$compileProvider详解
2017/09/27 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
Vue.js分页组件实现:diVuePagination的使用详解
2018/01/10 Javascript
微信、QQ、微博、Safari中使用js唤起App
2018/01/24 Javascript
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
vue 纯js监听滚动条到底部的实例讲解
2018/09/03 Javascript
VuePress 快速踩坑小结
2019/02/14 Javascript
详解vue.js移动端配置flexible.js及注意事项
2019/04/10 Javascript
layer更改皮肤的实现方法
2019/09/11 Javascript
vue.js实现二级菜单效果
2019/10/19 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
Python类定义和类继承详解
2015/05/08 Python
python如何将两张图片生成为全景图片
2020/03/05 Python
详解Selenium 元素定位和WebDriver常用方法
2020/12/04 Python
详解Open Folder as PyCharm Project怎么添加的方法
2020/12/29 Python
一些高难度的SQL面试题
2016/11/29 面试题
英文自我鉴定
2013/12/10 职场文书
十佳班主任事迹材料
2014/01/18 职场文书
海飞丝的广告词
2014/03/20 职场文书
2014年大学生就业规划书
2014/04/04 职场文书
2015年秋季新学期寄语
2015/03/25 职场文书
国富论读书笔记
2015/06/26 职场文书
爱国主题班会教案
2015/08/14 职场文书
MySQL 时间类型的选择
2021/06/05 MySQL