今天教大家用python制作北上广深——地铁线路动态图,这可能是全网最全最详细的教程了。

坐标点的采集

小五之前做过类似的地理可视化,不过都是使用网络上收集到的json数据。但很多数据其实是过时的,甚至是错误/不全的。所以我们最好还是要自己动手,丰衣足食(爬虫大法好)。

打开高德地图的地铁网页,http://map.amap.com/subway/index.html?&1100

可以轻松得到北京地铁数据的接口,同理也把其他三个城市的url复制出来。

有了api,解析json即可获得数据????

url = 'http://map.amap.com/service/subway?_1615466846985&srhdata=1100_drw_beijing.json'
response = requests.get(url)
result = json.loads(response.text)
stations = []
for i in result['l']:station = []for a in i['st']:station.append([float(b) for b in a['sl'].split(',')])stations.append(station)
pprint.pprint(stations)

pprint格式化打印结果,方便预览

坐标系的转换

其实我之前有看到类似地理可视化文章,结果自己一试发现缩小看还行,一放大就会发现坐标点飘出二里地了????

正好拿上文获取的坐标点给大家演示一下,看看同样的经纬度在不同地图里的地理位置????

????可以看到该经纬度在高德地图里指的是金安桥地铁站,然而在百度地图里,地理位置则指向了几公里外的某大厦。

为什么会出现这个问题呢?

其实是不同地图产品的地理坐标系导致的。

下面说一下常见的地理坐标系:地球坐标系是国际通用坐标系,比较适合国际地图可视化。不过在我国范围内,一般不会直接使用它,而是使用由国家测绘局在其基础上加密的火星坐标系。另外还有公司会在火星坐标系上进行二次加密,比如百度坐标系、搜狗坐标系等。

我网上找到了一张图,来自知乎@师大Giser[1]????

上图可以作为参考,具体原因我们就不细究了。重点是什么,如何利用python转换坐标系?

例如在本文中,我们是在高德地图中获得的坐标点集合,那么也就是使用的是GCJ-02坐标系。而下文可视化中会调用百度地图的接口,也就是需要在BD-09坐标系中进行可视化。

幸好我在网上搜到了GCJ-02BD-09的公式,并用python实现此公式:

#需要的两个常量先设置好
pi = 3.1415926535897932384 #π
r_pi = pi * 3000.0/180.0def gcj02_bd09(lon_gcj02,lat_gcj02):b = math.sqrt(lon_gcj02 * lon_gcj02 + lat_gcj02 * lat_gcj02) + 0.00002 * math.sin(lat_gcj02 * r_pi)o = math.atan2(lat_gcj02 , lon_gcj02) + 0.000003 * math.cos(lon_gcj02 * r_pi)lon_bd09 = b * math.cos(o) + 0.0065lat_bd09 = b * math.sin(o) + 0.006return [lon_bd09,lat_bd09]

这样我们就写好了一个python将GCJ-02坐标系转成BD-09的函数,调用这个函数,就可以将高德地图获取的坐标点集合统统转换成百度坐标系。

result = []
for station in stations:result.append([gcj02_bd09(*point) for point in station])

以其中一个坐标点为例:

到此,我们的前期数据工作终于准备齐了。

当然,如果我们一开始获取的数据就是BD_09(百度地图)坐标系的,转换这步就可以直接省略喽~

地理可视化

接下来就要利用pyecharts中的BMap来可视化了,不过需要先获取百度开放平台的密钥。

百度地图开放平台????http://lbsyun.baidu.com/apiconsole/key#/home

登录百度账户,查看应用管理-我的应用。点击创建应用,全部默认随便创建。

复制????上图中的访问应用(AK),保存好,这在后续的可视化中将要用到。

我们使用pyecharts中的BMap,先导入模块

from pyecharts.charts import BMap
from pyecharts import options as opts
from pyecharts.globals import BMapType, ChartType

在导入数据(也就是上文转换后的经纬度数据result)后,可以调整一下参数以及增添一些控件。

????关键参数都做了注释,方便大家查看(其中百度appkey记得替换成自己的)

map_b = (BMap(init_opts = opts.InitOpts(width = "800px", height = "600px")).add_schema(baidu_ak = '****************', #百度地图开发应用appkeycenter = [116.403963, 39.915119], #当前视角的中心点zoom = 10, #当前视角的缩放比例is_roam = True, #开启鼠标缩放和平移漫游).add(series_name = "",type_ = ChartType.LINES, #设置Geo图类型data_pair = result, #数据项is_polyline = True, #是否是多段线,在画lines图情况下#linestyle_opts = opts.LineStyleOpts(color = "blue", opacity = 0.5, width = 1), # 线样式配置项).add_control_panel(maptype_control_opts = opts.BMapTypeControlOpts(type_ = BMapType.MAPTYPE_CONTROL_DROPDOWN), #切换地图类型的控件scale_control_opts = opts.BMapScaleControlOpts(), #比例尺控件overview_map_opts = opts.BMapOverviewMapControlOpts(is_open = True), #添加缩略地图navigation_control_opts = opts.BMapNavigationControlOpts() #地图的平移缩放控件)
)map_b.render(path = 'subway_beijing.html')

注:因为是北京地图,所以设置天安门的经纬度[116.403963, 39.915119]为视角中心。

让我们看一下可视化的结果吧:

????上图中的四个角都有控件,这是我们在代码中添加了控件参数,它们分别为:地图的平移缩放控件、切换地图类型的控件、缩略地图、以及比例尺控件。

是不是还阔以

其他效果展示

上文已经基本实现了用python制作地铁线路动态图。不过大家都用同一种颜色背景制作动态图的话,就显得就太单调了。

正好我们还要绘制其他三个城市的地铁图,那就调整一些参数,看看能获得什么效果吧?

上海-变色

上海的数据接口是:

http://map.amap.com/service/subway?_1615467204533&srhdata=3100_drw_shanghai.json

上海市的地铁图我们改一下line的颜色,可在参数linestyle_opts中修改color。

????下图中的线条颜色是lilac——浅紫色

广州-卫星图

广州的数据接口是:

http://map.amap.com/service/subway?_1615494419554&srhdata=4401_drw_guangzhou.json

其实我们还可以调整可视化背景为卫星图。不过这一操作并不需要额外写代码,因为刚刚上文提到我在调整参数时添加了4个控件,其中右上角的就可以直接切换地图类型,具体操作见下图。

深圳-个性化配色

深圳的数据接口是:

http://map.amap.com/service/subway?_1615494473615&srhdata=4403_drw_shenzhen.json

如果不满意百度地图设置好的地图背景,我们还可以个性化设置mapStyle,调整自己的配色styleJson

下图就是小五参考网上公开的配色方案制作的,大家也可以用来参考https://blog.csdn.net/weixin_41290949/article/details/106379134[2]

小结

今天带大家学习了如何利用python绘制一线城市的地铁线路动图。

主要分为四个部分:坐标点的采集、坐标系的转换、利用pyecharts地理可视化、其他效果展示。

如果你读完本文觉得有收获,希望可以给文章右下角点个赞????

参考资料

[1]

地学大数据:知乎@师大Giser

[2]

百度地图开发mapStyle个性化地图styleJson的配色解决方案: https://blog.csdn.net/weixin_41290949/article/details/106379134

本文代码下载

在公众号Python小二后台回复地铁 ,即可获取全部代码!

< END >

微信扫码关注,了解更多内容

太酷炫了,我用python画出了北上广深的地铁路线动态图相关推荐

  1. 太酷炫了,我用 Python 画出了北上广深的地铁路线动态图

    今天教大家用python制作北上广深--地铁线路动态图,这可能是全网最全最详细的教程了. 坐标点的采集 小五之前做过类似的地理可视化,不过都是使用网络上收集到的json数据.但很多数据其实是过时的,甚 ...

  2. python画人民大会堂_太震撼了,我用python画出全北京的公交线路动图

    原标题:太震撼了,我用python画出全北京的公交线路动图 今天教大家用pyecharts制作北京市公交线路动态图,这应该是全网唯一一篇能正常运行的教程 一.获取百度秘钥 首先,本项目需要引用百度地图 ...

  3. 利用python + pyecharts+Pandas对北上广深等城市进行租房数据分析

    本次分析的租房数据主要来源于上一篇博客中获取的"房天下"网站租房信息,对该数据分析主要使用了Pandas数据处理库. 利用python pyecharts进行租房情况数据分析 数据 ...

  4. 太酷炫了,用python绘制股票K线图!

    大家好,我是小五 发现大家还是最喜欢股票基金话题呀~ 那说到股票基金就不得不提--K线图! 那小五今天就带大家???? 用python来轻松绘制高颜值的K线图???? 获取股票交易数据 巧妇难为无米之 ...

  5. 用python画汽车_太震撼了,我用 Python 画出了全北京的公交线路动图

    今天教大家用pyecharts制作北京市公交线路动态图,这应该是全网唯一一篇能正常运行的教程 一.获取百度秘钥 首先,本项目需要引用百度地图api,所以需要先注册获取百度开放平台秘钥,地址为: htt ...

  6. python代码画闪电_太震撼了,我用Python画出全北京的公交线路动图

    一.获取百度秘钥 首先,本项目需要引用百度地图API,所以需要先注册获取百度开放平台秘钥,地址为: http://lbsyun.baidu.com/apiconsole/key# 有账号的直接登录,没 ...

  7. python空气质量分析报告_Python数据可视化:2018年北上广深空气质量分析

    原标题:Python数据可视化:2018年北上广深空气质量分析 作者:法纳斯特,Python爱好者,专注爬虫,数据分析及可视化 就在这周偶然看到一个学弟吐槽天津的空气,不禁想起那段厚德载雾,自强不吸的 ...

  8. Python数据可视化:2018年北上广深空气质量分析

    感谢关注天善智能,走好数据之路↑↑↑ 欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答.求职一站式搞定! 对商业智能BI.大数据分析挖掘.机器学习, ...

  9. Python数据可视化:2018年北上广深空气质量分析(附完整代码)

    ♚ 法纳斯特,Python爱好者,喜欢爬虫,数据分析以及可视化. 就在这周偶然看到一个学弟吐槽天津的空气,不禁想起那段厚德载雾,自强不吸的日子. 无图无真相,下图为证. 左边的图是去年2月份的时候,这 ...

最新文章

  1. 在idea使用maven工程建立web项目时,启动Tomcat访问不到项目首页。
  2. 蓝桥杯练习系统算法训练习题加答案java版本
  3. SQL 时间类型转字符串格式列表
  4. 【转载】绝对干货!Linux小白最佳实践:《超容易的Linux系统管理入门书》(连载九)如何通过源代...
  5. 想知道黑苹果什么味道?来咬一口尝尝~
  6. oslo.config资源
  7. dump解析入门-用VS解析dump文件进行排障
  8. win10控制视频声音大小
  9. 往mysql数据库中存当前日期_在MySQL数据库中存储日期的最简单方法是什么?
  10. android 数字圆环,Android 自定义数字圆环
  11. 基于Cache的Fibonacci数列的计算
  12. 一款QQ全自动签到的辅助工具
  13. php ob系列的函数
  14. Android Bmob之用户更改头像(上传图片、下载图片和更新图片)
  15. 匈牙利算法--任务分配
  16. 小米手机android程序闪退,告诉大家小米手机应用闪退的解决方法,不需要修复...
  17. 使用Vue+DataV+ECharts打造新冠肺炎疫情数据大屏(可动态刷新)
  18. [转]移动App测试中的最佳做法
  19. 前端自学Vue笔记干货(第一版,持续更新中~~~)
  20. 如何安装打印机驱动程序

热门文章

  1. 资料随意收集(1):Lotus Notes常见问题解决办法(实用--转帖)
  2. Solidworks提示字体Arial Unicode MS安装不正确,PDF文件中一个或多个文本字串可能遗失怎么办...
  3. 2.6. 字符类型与字符编码
  4. 阿里P8架构师制作的24张前端全栈知识图谱,堪称完美学习宝典
  5. n1 openwrt 挂载u盘_[Openwrt 扩展上篇]USB挂载U盘启动Samba共享
  6. http://blog.sina.com.cn/s/blog_5eec6f3a0100hxwn.html
  7. 国庆中秋长假游玩攻略:来自汇智人的第一手出行避坑指南
  8. web容器、中间件以及web服务器的区别
  9. Atheros CSI Tool环境搭建之路由器配置记录---2022/03/22
  10. 浏览器/软件去广告(Tampermonkey的使用/手机软件推荐)