用Python编写小工具下载OSM路网数据

简介: 用Python编写小工具下载OSM路网数据

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中的错误捕捉机制来进行相对应的处理,比较简单这里就不再赘述。

相关文章
|
4天前
|
数据挖掘 PyTorch TensorFlow
|
1天前
|
算法 Python
揭秘!Python数据魔术师如何玩转线性回归,让你的预测精准到不可思议
【9月更文挑战第13天】在数据科学领域,线性回归以其优雅而强大的特性,将复杂的数据关系转化为精准的预测模型。本文将揭秘Python数据魔术师如何利用这一统计方法,实现令人惊叹的预测精度。线性回归假设自变量与因变量间存在线性关系,通过拟合直线或超平面进行预测。Python的scikit-learn库提供了简便的LinearRegression类,使模型构建、训练和预测变得简单直接。
11 5
|
3天前
|
存储 算法 测试技术
预见未来?Python线性回归算法:数据中的秘密预言家
【9月更文挑战第11天】在数据的海洋中,线性回归算法犹如智慧的预言家,助我们揭示未知。本案例通过收集房屋面积、距市中心距离等数据,利用Python的pandas和scikit-learn库构建房价预测模型。经过训练与测试,模型展现出较好的预测能力,均方根误差(RMSE)低,帮助房地产投资者做出更明智决策。尽管现实关系复杂多变,线性回归仍提供了有效工具,引领我们在数据世界中自信前行。
17 5
|
3天前
|
机器学习/深度学习 数据挖掘 TensorFlow
🔍揭秘Python数据分析奥秘,TensorFlow助力解锁数据背后的亿万商机
【9月更文挑战第11天】在信息爆炸的时代,数据如沉睡的宝藏,等待发掘。Python以简洁的语法和丰富的库生态成为数据分析的首选,而TensorFlow则为深度学习赋能,助你洞察数据核心,解锁商机。通过Pandas库,我们可以轻松处理结构化数据,进行统计分析和可视化;TensorFlow则能构建复杂的神经网络模型,捕捉非线性关系,提升预测准确性。两者的结合,让你在商业竞争中脱颖而出,把握市场脉搏,释放数据的无限价值。以下是使用Pandas进行简单数据分析的示例:
17 5
|
3天前
|
存储 安全 算法
RSA在手,安全我有!Python加密解密技术,让你的数据密码坚不可摧
【9月更文挑战第11天】在数字化时代,信息安全至关重要。传统的加密方法已难以应对日益复杂的网络攻击。RSA加密算法凭借其强大的安全性和广泛的应用场景,成为保护敏感数据的首选。本文介绍RSA的基本原理及在Python中的实现方法,并探讨其优势与挑战。通过使用PyCryptodome库,我们展示了RSA加密解密的完整流程,帮助读者理解如何利用RSA为数据提供安全保障。
15 5
|
4天前
|
存储 缓存 安全
Python案例分享:如何实现文件的上传下载
Python案例分享:如何实现文件的上传下载
30 6
|
4天前
|
数据采集 数据挖掘 数据处理
使用Python和Pandas处理CSV数据
使用Python和Pandas处理CSV数据
29 5
|
5天前
|
数据采集 存储 数据挖掘
使用Python读取Excel数据
本文介绍了如何使用Python的`pandas`库读取和操作Excel文件。首先,需要安装`pandas`和`openpyxl`库。接着,通过`read_excel`函数读取Excel数据,并展示了读取特定工作表、查看数据以及计算平均值等操作。此外,还介绍了选择特定列、筛选数据和数据清洗等常用操作。`pandas`是一个强大且易用的工具,适用于日常数据处理工作。
|
6天前
|
安全 数据安全/隐私保护 Python
情书也能加密?Python AES&RSA,让每一份数据都充满爱的密码
【9月更文挑战第8天】在这个数字化时代,情书不再局限于纸笔,也可能以电子形式在网络中传递。为了确保其安全,Python提供了AES和RSA等加密工具,为情书编织爱的密码。首先,通过安装pycryptodome库,我们可以利用AES对称加密算法高效保护数据;接着,使用RSA非对称加密算法加密AES密钥和IV,进一步增强安全性。即使情书被截获,没有正确密钥也无法解读内容。让我们用Python为爱情编织一张安全的网,守护每份珍贵情感。
21 2
|
4天前
|
机器学习/深度学习 数据挖掘 TensorFlow
从数据小白到AI专家:Python数据分析与TensorFlow/PyTorch深度学习的蜕变之路
【9月更文挑战第10天】从数据新手成长为AI专家,需先掌握Python基础语法,并学会使用NumPy和Pandas进行数据分析。接着,通过Matplotlib和Seaborn实现数据可视化,最后利用TensorFlow或PyTorch探索深度学习。这一过程涉及从数据清洗、可视化到构建神经网络的多个步骤,每一步都需不断实践与学习。借助Python的强大功能及各类库的支持,你能逐步解锁数据的深层价值。
14 0