文章来源于Python大数据分析,作者费弗里

本文对应脚本已上传至Github仓库:
https://github.com/CNFeffery/DataScienceStudyNotes[1]

1 简介

我们平时在数据可视化或空间数据分析的过程中,经常会需要某个地区的道路网络及节点数据,而OpenStreetMap就是一个很好的数据来源(譬如图1柏林路网):

图1

通常我们可以在openstreetmap[2]中选择矩形区域内的路网矢量数据进行下载。

但这种方式对选择区域的大小有一定限制,想获取较大范围区域的路网数据并下载比较费事;

而另一种方式是事先下载已经整合好的大区域的文件。

譬如在geofabrik[3] 中提供了各大洲、国家等大范围的数据整合包,可以花费一定时间将其下载下来,再在需要哪些小区域时在本地GIS软件或编程工具中裁剪下所需的范围路网。

但这种方式一是对电脑资源要求较高,譬如中国范围路网信息shapefile文件大小达到了800多兆,二是OSM的路网信息不定期更新之后,要想及时跟上最新数据,就需要人工持续下载数据。

为了更加灵活自由,且即时地获取最新版本的OSM路网,我们可以利用Python来编写脚本工具,方便快捷地检索或下载OSM可以识别出的各个级别行政区对应的矢量格式数据。

2 基于Python的OSM路网下载

2.1 工作流程

编写这个工具灵感来源于anvaka[4]网站:

图2

用户通过输入指定城市的名称并检索,等待数据资源加载完成之后就可以在网页中看到渲染好的城市路网。

以重庆为例:

图3

通过对该网站进行抓包和源码分析,我弄明白了其工作流程大致如下:

  • Step1:

根据用户输入的城市名称,利用OSM官方的API进行模糊匹配,获取可能的对象列表:

图4

  • Step2:

用户点击选择正确的区域,后台js对其所对应的id信息进行变换。

再通过网站自带的API获取对应的.pbf格式数据,或overpass的API获取JSON格式的矢量数据。

图5

  • Step3:

渲染路网:

图6

了解了上述步骤之后,我们利用requestsgeopandas等库仅用不到100行代码就可以参考上述过程,提取所需的shapefileGeoJSON文件保存到本地。

具体的代码部分本文不做详细说明,我将这部分功能封装到文章开头对应Github仓库下的OsmDownloader.py[5]中,可以自行去下载并使用。

下面我们来学习如何在Python中使用它。

2.2 使用方式

提示:请提前安装完成requestsgeopandaspandas以及tqdm这几个三方库。

按照上文所述的地址下载对应脚本之后,记住其所在路径,接着在其他脚本开头导入模块部分添加:

import sys
sys.path.append(r'所在路径')
from OsmDownloader import OsmDownloader

这样才能成功导入没有在Python中注册过的独立模块。

接下来我们来下载数据,只需要两行代码即可完成对单个行政区路网数据的下载。

以成都市为例:

# 单个地区路网下载
downloader = OsmDownloader(area='成都市') # area参数控制检索的行政区,请尽量准确填写
downloader.download_shapefile(path='保存路径') # path参数控制文件保存的路径

程序运行后稍等片刻即可完成下载(具体的耗时取决于你的网络状况)。

譬如这里我花了不到20秒就完成成都市路网数据的下载:

图7

保存下来的数据线图层与点图层分开保存:

图8图9

如果你想要下载保存JSON格式的数据,换成downloader.download_geojson(path)即可。

而如果你想要批量下载多个地区的数据,结合for循环即可,如下例:

# 多个地区路网下载
area_list = ['北京市', '重庆市江北区', 'Tokyo', 'Boston', '台湾省']
for area in area_list:downloader = OsmDownloader(area=area)downloader.download_shapefile(path='保存路径')

等待一段时间后,我们area_list里多个不同级别行政区的路网数据便下载完成:

图10

如果担心中途网络连接原因导致中断,可以结合Python中的错误捕捉机制来进行相对应的处理,比较简单这里就不再赘述。

以上就是本文全部内容,对脚本获取或使用有疑问的可以留言告诉我。

参考资料

[1]

https://github.com/CNFeffery/DataScienceStudyNotes: https://github.com/CNFeffery/DataScienceStudyNotes

[2]

openstreetmap: https://www.openstreetmap.org/export

[3]

geofabrik: http://download.geofabrik.de/

[4]

anvaka: https://anvaka.github.io/city-roads/?q=

[5]

OsmDownloader.py: https://github.com/CNFeffery/DataScienceStudyNotes/blob/master/(数据科学学习手札80)用Python编写小工具下载OSM路网数据/OsmDownloader.py

-END-

往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习在线手册深度学习在线手册AI基础下载(pdf更新到25集)本站qq群1003271085,加入微信群请回复“加群”获取一折本站知识星球优惠券,请回复“知识星球”喜欢文章,点个在看

用Python编写小工具下载OSM路网数据相关推荐

  1. python:osmnx包下载城市路网数据

    OSMnx 是一个可从 OpenStreetMap 下载地理空间数据的软件包,并对真实世界的街道网络和任何其他地理空间几何进行建模.投影.可视化和分析.但是这个包在使用时遇到了一些让人头疼的问题,在这 ...

  2. Python编写小工具之统计演员票房排行榜

    闲来无事想要了解下2018年的票房之王(国产片-内地),于是乎写了这么个小工具 先看一下结果: 没错,前三是王宝强,张译,黄景瑜,王宝强荣登票房王宝座! (票房数据来源时光网) 首先先爬取电影票房数据 ...

  3. python爬虫小工具——下载助手

    使用request库 小下载: 需要一次性写到内存,花费一定空间,然后写入磁盘. import requests image_url = "https://www.python.org/st ...

  4. python 处理数据小工具_用Python这个小工具,一次性把论文作图与数据处理全部搞定!...

    原标题:用Python这个小工具,一次性把论文作图与数据处理全部搞定! 一入科研深似海-- 随着大学纷纷开学,"防脱发用生姜还是黑芝麻?", 研究僧们又开始为自己所剩无几的头发发愁 ...

  5. python学习一(python与pip工具下载与安装)

    python学习一(python与pip工具下载与安装)  一 Python下载  二 安装Python  三 安装 pip   3.1 采用cd命令进入到Scripts 目录下面   3.2 输入命 ...

  6. 一分钟教你学会python_十分钟教你学会python编写小游戏

    原标题:十分钟教你学会python编写小游戏 看过,估计大家都已经精通了吧,好的,话不多说,今天就活学活用,用python来编写纸牌游戏21点,江湖人称黑杰克,BLACK JACK-(注意法式卷舌). ...

  7. win10电脑桌面透明便签_DesktopNoteOK桌面便签小工具下载|windows10桌面透明便签插件_最火软件站...

    使用DesktopNoteOK桌面便签小工具,用户在电脑桌面上快速创建笔记,通过设置笔记的选项来创建不一样的笔记类型,桌面笔记有多个主题,随机背景和文本颜色,让笔记变得更加丰富多彩,现在最火软件站提供 ...

  8. python编写小游戏17_十分钟教你学会python编写小游戏

    原标题:十分钟教你学会python编写小游戏 看过,估计大家都已经精通了吧,好的,话不多说,今天就活学活用,用python来编写纸牌游戏21点,江湖人称黑杰克,BLACK JACK-(注意法式卷舌). ...

  9. 电脑待办事项提醒小工具下载

    很多人的电脑上都会有一些提醒类的小工具,以用来整合生活及工作中方方面面的信息,借助提醒类的小工具一方面可以帮助大家记录备忘事项,另一方面可提高大家按时完成工作任务的效率,在电脑上使用的待办事项提醒小工 ...

最新文章

  1. 三维形状和外观重建一次全搞定: DeepSurfels在线融合实现逼真重建
  2. dev调试时无法进入下一步_【问题解决方案】Dev C++ 无法调试的问题与解决
  3. Theano 中文文档 0.9 - 2. 发行说明
  4. Atitti 类库 开发者 常用 api 目录 1.1. Meta anno注解元数据api 1 1.2. Ref 反射api 1 1.3. Database meta api 1 1.4.
  5. c++ primer第16章课后习题答案
  6. 360看在线视频加速
  7. 网线水晶头接法详细图文教程
  8. 网口压线顺序_网线水晶头接法口诀顺序及接法详细步骤
  9. Unity笔记-29-ARPG游戏项目-01-第三人称相机
  10. 21款奔驰S400商务型升级原厂HUD抬头显示系统,提升行车安全性
  11. 机器学习Numpy库入门25例
  12. Matlab中table类型使用技巧
  13. 插入法排序c语言程序,C语言直接插入排序算法
  14. CMAKE_INSTALL_PREFIX
  15. Win11找不到gpedit.msc怎么办?Win11无法打开gpedit.msc解决教程
  16. 西游记中孙悟空大闹天宫时玉帝为什么不亲自出手?
  17. 计算机语言python-Python语言介绍
  18. 互联网江湖之“清华1996级”
  19. “春城”昆明郁金香盛开 万紫千红引游人
  20. 江阴学院计算机科学系logo,江阴中专校徽暨校标(LOGO)征集活动

热门文章

  1. linux的管道 |和grep命令以及一些其他命令(diff,echo,cat,date,time,wc,which,whereis,gzip,zcat,unzip,sort)...
  2. CodeForces 474.D Flowers
  3. [转] HDU 题目分类
  4. 【2013年11月12号】日记
  5. sql分区-纵向分表与横向分区表(转)
  6. 弹出层之2:JQuery.BlockUI
  7. 中公教育计算机网络,计算机考试题库:计算机网络模拟练习题(2)
  8. pep8 python 编码规范_Python合集之Python语法特点(三)
  9. 项目开发时前端及数据库遇到的问题
  10. 新手小白零基础搭建个人博客(一)服务器篇