前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用Python编写小工具下载OSM路网数据

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

作者头像
派大星的数据屋
发布于 2022-04-03 01:38:29
发布于 2022-04-03 01:38:29
1.7K00
代码可运行
举报
运行总次数:0
代码可运行

本文对应脚本已上传至我的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这几个三方库。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sys
sys.path.append(r'所在路径')
from OsmDownloader import OsmDownloader

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

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

以成都市为例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 单个地区路网下载
downloader = OsmDownloader(area='成都市') # area参数控制检索的行政区,请尽量准确填写
downloader.download_shapefile(path='保存路径') # path参数控制文件保存的路径

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

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

图7

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

图8

图9

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 多个地区路网下载
area_list = ['北京市', '重庆市江北区', 'Tokyo', 'Boston', '台湾省']
for area in area_list:
	downloader = OsmDownloader(area=area)
	downloader.download_shapefile(path='保存路径')

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

图10

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

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

-END-

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python大数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
地表覆盖、土壤属性、DEM、水系数据下载网站合集
  本文对目前主要的土壤属性、地表覆盖、数字高程模型与水体水系矢量数据获取网站加以整理与介绍。
疯狂学习GIS
2025/06/13
510
地表覆盖、土壤属性、DEM、水系数据下载网站合集
行政边界与路网、建筑轮廓、POI、基站数据网站整理
  今天我们继续GIS获取网站的整理,本次为行政区边界数据与各类城市要素数据,包括路网数据、建筑轮廓数据、POI数据与移动基站数据等。这些数据对于空间分析,尤其是基于城市、社会要素的空间分析而言是十分重要的。另一方面,大家在获取数据时,尤其是通过国外网站获取数据时,一定需要注意边境、领土问题。
疯狂学习GIS
2021/07/22
2.1K0
GIS 地图shp资源
为了方便GIS地图处理,这里有一些指向地理空间数据和其他与GIS相关的东西的重要资源的链接,您可能会觉得有用:
Jamesjin63
2022/10/25
1.8K0
GIS 地图shp资源
(数据科学学习手札88)基于geopandas的空间数据分析——空间计算篇(下)
  在基于geopandas的空间数据分析系列文章第8篇中,我们对geopandas开展空间计算的部分内容进行了介绍,涉及到缓冲区分析、矢量数据简化、仿射变换、叠加分析与空间融合等常见空间计算操作,而本文就将针对geopandas中剩余的其他常用空间计算操作进行介绍。
Feffery
2020/06/28
1.6K0
免费快速下载省市区县行政区的Shp数据
摘要:一般非专业的GIS应用通常会用到省市等行政区区划边界空间数据做分析,本文简单介绍了如何在互联网上下载省,市,区县的shp格式空间边界数据,并介绍了一个好用的在线数据转换工具,并且开源。
Twcat_tree
2023/10/16
2.3K0
免费快速下载省市区县行政区的Shp数据
OpenStreetMap介绍与OSM数据多种下载方法对比
  本文对OpenStreetMap(OSM)网页与各类OSM数据的多种下载方式加以详细介绍,并对不同数据下载方式加以对比。OSM数据包含道路与铁路路网、建筑、水体、土地利用、兴趣点、行政区边界等各类数据,同时具有.shp、.pbf、.osm、.csv等多种类型,方便大家不同的使用需求。在这里有一点需要注意:OSM数据在国家边界数据方面非常不准确,如有相关需求,大家可以从其它网站获取对应边界数据。
疯狂学习GIS
2023/07/09
3.2K0
OpenStreetMap介绍与OSM数据多种下载方法对比
遥感数据、气象数据、土地土壤数据、农业数据、行政区数据...GIS数据获取网站整理
  本文对GIS行业相关的综合数据获取网站加以整理,包括但不限于遥感数据、气候数据、土地数据、土壤数据、农业数据、行政区数据、社会数据、经济数据等。数据较多,大家可以直接通过下方目录加以总览。
郭好奇同学
2021/05/28
5.2K0
遥感数据、气象数据、土地土壤数据、农业数据、行政区数据...GIS数据获取网站整理
数据分享 | 路网数据后续
它来了它来啦,磨叽的小编终于把它带来啦!之前小编答应过大家,将拼接完成的天地图2015年1:100万全国路网数据分享给大家。于是乎,在今天这个天朗气清,惠风和畅的日子,小编就将数据及拼接方法分享给大家。走过路过不要错过哦!今天可是满满的干货~
GIS与遥感开发平台
2022/04/29
6660
数据分享 | 路网数据后续
(数据科学学习手札82)基于geopandas的空间数据分析——geoplot篇(上)
  在前面的基于geopandas的空间数据分析系列文章中,我们已经对geopandas的基础知识、基础可视化,以及如何科学绘制分层设色地图展开了深入的学习,而利用geopandas+matplotlib进行地理可视化固然能实现常见的地图可视化,且提供了操纵图像的极高自由度,但对使用者matplotlib的熟悉程度要求较高,制作一幅地图可视化作品往往需要编写较多的代码,而geoplot基于geopandas,提供了众多高度封装的绘图API,很大程度上简化了绘图难度,就像seaborn之于matplotlib。
Feffery
2020/05/07
2.4K0
(数据科学学习手札82)基于geopandas的空间数据分析——geoplot篇(上)
(数据科学学习手札83)基于geopandas的空间数据分析——geoplot篇(下)
在上一篇文章中我们详细学习了geoplot中较为基础的三种绘图API:pointplot()、polyplot()以及webmap(),而本文将会承接上文的内容,对geoplot中较为实用的几种高级绘图API进行介绍。
Feffery
2020/05/21
1.9K0
(数据科学学习手札83)基于geopandas的空间数据分析——geoplot篇(下)
Geopandas 一行代码算出每个省的面积
它继承pandas.Series和pandas.Dataframe,实现了GeoSeries和GeoDataFrame类,使得其操纵和分析平面几何对象非常方便。
abs_zero
2020/11/11
1.5K0
Geopandas 一行代码算出每个省的面积
数据分享| OSM矢量数据下载
今天小编就向大家介绍一款可以下载世界范围内,多款矢量数据的开源世界地图--Open Street Map(简称为OSM)
GIS与遥感开发平台
2022/04/29
2.5K0
数据分享| OSM矢量数据下载
(数据科学学习手札85)Python+Kepler.gl轻松制作酷炫路径动画
Kepler.gl相信很多人都听说过,作为Uber几年前开源的交互式地理信息可视化工具,kepler.gl依托WebGL强大的图形渲染能力,可以在浏览器端以多种形式轻松展示大规模数据集。
Feffery
2020/05/31
1.1K0
开发一个地图图表,摸鱼三小时编码十分钟,还被夸效率太高了
早年是百度开发的,后期捐赠给Apache了(就是Tomcat、Maven、Kafka那个Apache)。
大风写全栈
2025/01/07
1310
开发一个地图图表,摸鱼三小时编码十分钟,还被夸效率太高了
shpfile转GeoJSON;控制shp转GeoJSON的精度;如何获取GeoJSON;GeoJSON是什么有什么用;GeoJSON结构详解(带数据示例)
GeoJSON是一种编码各种地理数据结构的格式。它是JSON(JavaScript Object Notation)的一个地理空间扩展,用于在网络中交换地理数据。GeoJSON对象可以表示几何(点、线、面)、特征(包含几何和属性的对象)以及特征集合。
watermelo37
2025/01/22
1.4K0
shpfile转GeoJSON;控制shp转GeoJSON的精度;如何获取GeoJSON;GeoJSON是什么有什么用;GeoJSON结构详解(带数据示例)
充分利用网络开源数据制图[ArcGIS高效前期]
前期分析的制图工作中很大一部分工作是要从电子地图中对比着描绘现状,最后完成区位图、外部交通、公服等细分的分析图,以及综合现状分析图。
Sidchen
2020/08/02
1.6K0
常见地图白化方法(一)
地图白化是一种绘制地图的技术,它可以实现对感兴趣区域以外的数据进行遮盖或填充白色的效果,从而突出显示目标区域的特征。 地图白化的原理是利用 shapefile 文件中的多边形坐标来创建一个剪切路径,然后将这个路径应用到 matplotlib 的绘图对象上,使得只有路径内的数据可见,路径外的数据被隐藏或覆盖。 气象家园的五星上将兰溪之水说过,其实所谓的“白化”一般就两种途径:①mask数据;②mask图形
用户11172986
2024/06/20
2340
常见地图白化方法(一)
使用Python和Geopandas进行地理数据可视化的实用指南
地理数据可视化在许多领域都是至关重要的,无论是研究地理空间分布、城市规划、环境保护还是商业决策。Python语言以其强大的数据处理和可视化库而闻名,而Geopandas作为其地理信息系统(GIS)领域的扩展,为处理地理空间数据提供了方便的工具。本文将介绍如何使用Python和Geopandas进行地理数据可视化,并提供实用的代码示例。
一键难忘
2024/07/08
8060
#Python实战#神器Geopandas一行代码算出每个省面积
它继承pandas.Series和pandas.Dataframe,实现了GeoSeries和GeoDataFrame类,使得其操纵和分析平面几何对象非常方便。
查理不是猹
2021/12/23
6300
python与地理空间分析(3)shp文件操作
在python与地理空间分析(1)与(2)中我们介绍了GIS中常用的数据类型、python在处理地理空间数据时用到的包以及给定经纬度计算空间距离的算法,本期我们主要介绍对地理空间分析中常用到的矢量数据shp文件的处理,在捍卫祖国领土从每一张地图开始我们也提供较为精准的包括南海九段线的中国地图,大家可以自行下载。
MeteoAI
2019/08/19
15.5K1
python与地理空间分析(3)shp文件操作
推荐阅读
相关推荐
地表覆盖、土壤属性、DEM、水系数据下载网站合集
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验