基于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 相关文章推荐
优化Python代码使其加快作用域内的查找
Mar 30 Python
python中常用检测字符串相关函数汇总
Apr 15 Python
Python3操作SQL Server数据库(实例讲解)
Oct 21 Python
django js实现部分页面刷新的示例代码
May 28 Python
详解python的四种内置数据结构
Mar 19 Python
python如何实现视频转代码视频
Jun 17 Python
python全栈要学什么 python全栈学习路线
Jun 28 Python
Kears+Opencv实现简单人脸识别
Aug 28 Python
Python如何使用OS模块调用cmd
Feb 27 Python
Python实现仿射密码的思路详解
Apr 23 Python
Python OpenCV 图像平移的实现示例
Jun 04 Python
python使用shell脚本创建kafka连接器
Apr 29 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
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
PHP redis实现超迷你全文检索
2017/03/04 PHP
javascript调试说明
2010/06/07 Javascript
js中将URL中的参数提取出来作为对象的实现代码
2011/08/16 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
2013/07/31 Javascript
js菜单点击显示或隐藏效果的简单实例
2014/01/13 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
JS和JQ的event对象区别分析
2014/11/24 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
2015/05/26 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
jQuery 插件封装的方法
2016/11/16 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
基于JavaScript实现类名的添加与移除
2017/04/23 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
2017/11/28 Javascript
javascript显示动态时间的方法汇总
2018/07/06 Javascript
MockJs结合json-server模拟后台数据
2020/08/26 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
2019/11/10 Javascript
微信小程序获取当前位置和城市名
2019/11/13 Javascript
Python使用Socket(Https)Post登录百度的实现代码
2012/05/18 Python
python写的一个文本编辑器
2014/01/23 Python
Python SVM(支持向量机)实现方法完整示例
2018/06/19 Python
CentOS 7 安装python3.7.1的方法及注意事项
2018/11/01 Python
对pandas里的loc并列条件索引的实例讲解
2018/11/15 Python
django删除表重建的实现方法
2019/08/28 Python
Python GUI自动化实现绕过验证码登录
2020/01/10 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
python 实现波浪滤镜特效
2020/12/02 Python
h5调用摄像头的实现方法
2016/06/01 HTML / CSS
Pandora西班牙官方商店:PandoraShop.es
2020/10/05 全球购物
股权转让协议书
2014/04/12 职场文书
总经理助理岗位职责范本
2014/07/20 职场文书
四风问题个人自查剖析材料思想汇报
2014/09/21 职场文书
致毕业季:你如何做好自己的职业生涯规划书?
2019/07/01 职场文书
创业方案:赚钱的烧烤店该怎样做?
2019/07/05 职场文书