Python实现OSM地图数据解析——Pydriosm

如何优雅的从OSM(OpenStreetMap)上获取一个城市的路网? 如何从Openstreetmap中获取一个城市的交通路网数据?怎么认识数据中的各种字段?怎么优雅地处理路网数据?这篇文章给了一个小例子,希望能对您有所帮助。 阅读详情

1. Pydriosm简介

Pydriosm是一个开源的OSM地图文件下载和解析工具。通过OSM官方API为研究人员/从业者提供OSM地图文件在线下载和本地OSM地图文件读取解析功能,以及便捷的PostgreSQL数据库接口。

2. 安装

pip install pydriosm

3. 使用方法

3.1 下载数据

(1)查看支持的文件下载格式

>>>from pydriosm import GeofabrikDownloader
>>>geofabrik_downloader = GeofabrikDownloader()
>>>geofabrik_download_catalogue = geofabrik_downloader.get_download_catalogue()
>>>print(geofabrik_download_catalogue.columns.tolist())
['Subregion', 'SubregionURL', '.osm.pbf', '.osm.pbf.Size', '.shp.zip', '.osm.bz2']

(2)查看下载链接列表

>>>print(geofabrik_download_catalogue.head())
 		Subregion  ...                                           .osm.bz2
0       Algeria  ...  http://download.geofabrik.de/africa/algeria-la...
1        Angola  ...  http://download.geofabrik.de/africa/angola-lat...
2         Benin  ...  http://download.geofabrik.de/africa/benin-late...
3      Botswana  ...  http://download.geofabrik.de/africa/botswana-l...
4  Burkina Faso  ...  http://download.geofabrik.de/africa/burkina-fa...
[5 rows x 6 columns]

(3)下载地图文件

>>>subregion_name = 'London'  # case-insensitive
>>>osm_file_format = ".pbf"  # or ".osm.pbf"
>>>download_dir = "tests"

# Download the OSM PBF data of London from Geofabrik
>>>geofabrik_downloader.download_osm_data(subregion_name, osm_file_format,
                                       download_dir, verbose=True)
Confirmed to download .osm.pbf data of the following geographic region(s):
    Greater London
? [No]|Yes: yes
Downloading "greater-london-latest.osm.pbf" to "\tests" ...
Done.

(4)下载多个文件

>>>subregion_names = ['Rutland', 'West Yorkshire', 'West Midlands']

>>>paths_to_pbf = geofabrik_downloader.download_osm_data(
    subregion_names, osm_file_format, download_dir, ret_download_path=True)
    verbose=True)
Confirmed to download .osm.pbf data of the following geographic region(s):
    Rutland
    West Yorkshire
    West Midlands
? [No]|Yes: yes
Downloading "rutland-latest.osm.pbf" to "\tests" ...
Done.
Downloading "west-yorkshire-latest.osm.pbf" to "\tests" ...
Done.
Downloading "west-midlands-latest.osm.pbf" to "\tests" ...
Done.

>>>print(type(path_to_pbf))
<class 'list'>

>>>for path_to_pbf in paths_to_pbf:
>>>    print(f"'{os.path.relpath(path_to_pbf)}'")
'tests\rutland-latest.osm.pbf'
'tests\west-yorkshire-latest.osm.pbf'
'tests\west-midlands-latest.osm.pbf'

3.2 解析文件

(1)解析文件

>>>from pydriosm import GeofabrikReader
>>>geofabrik_reader = GeofabrikReader()
>>>subregion_name = 'Rutland'
>>>data_dir = download_dir  # "tests"
>>>rutland_pbf_raw = geofabrik_reader.read_osm_pbf(subregion_name, data_dir)
>>>print(type(rutland_pbf_raw))
<class 'dict'>

(2)检查point层

>>>rutland_pbf_points = rutland_pbf_raw['points']
>>>print(rutland_points.head())
											 points
0  {"type": "Feature", "geometry": {"type": "Poin...
1  {"type": "Feature", "geometry": {"type": "Poin...
2  {"type": "Feature", "geometry": {"type": "Poin...
3  {"type": "Feature", "geometry": {"type": "Poin...
4  {"type": "Feature", "geometry": {"type": "Poin...

(3)转换为json格式
rutland_pbf_points 中每一行都是GeoJSON格式的嵌套字典,因此可以转换为json格式:

>>>import json
>
>>>rutland_pbf_points_0 = rutland_pbf_points['points'][0]
>>>print(type(rutland_pbf_points_0))
<class 'str'>

>>>rutland_pbf_points_0_ = json.loads(rutland_pbf_points_0)
>>>print(type(rutland_pbf_points_0_))
<class 'dict'>

>>>print(list(rutland_pbf_points_0_.keys()))
['type', 'geometry', 'properties', 'id']

3.3 不同geometry 类型及其数据结构

对osm文件解析后可以得到文件中不同的geometry 类型(Point, Line,Multiline,MultiPolygon,Geometry Collection):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 总结

pydriosm主要特色可总结为:

  • 在线文件下载:可输入区域名称下载文件,但受所选择OSM官方API限制,对国内支持稍差,某些地区可能无法匹配;
  • 本地文件解析:可对’.pbf/.osm.pbf’,’.shp.zip/.shp’解析,按point,line,multiline,multipolygon,relation等分类存储,便于后续数据进一步过滤,用户可根据个人需求进行数据提取;
  • PostgreSQL数据库API:习惯使用数据库的用户,可以直接将解析数据存入数据库。

更多功能请访问原文档解锁。

参考

  1. https://pydriosm.readthedocs.io/en/latest/index.html
  2. https://pypi.org/project/pydriosm/
一种从OSM上获得区域路网数据的方法(以南京市为例)(纯操作) 这是一篇没有感情的看图说话 阅读详情

相关推荐

osmapi:适用于OpenStreetMap API的Python包装器

欧斯马皮 OSM API的Python包装器 安装 使用pip安装 : pip install osmapi 文献资料 该文档是使用pdoc生成的,可以。 在本地构建文档,您可以使用 pdoc --html osmapi.OsmApi # create HTML file 该项目使用GitHub Pages发布其文档。 要更新在线文档,您需要使用上述命令重新生成文档,并更新此存储库的gh-pages分支。 例子 要测试该库,请在的上创建一个帐户。 从OpenStreetMap读取 import osmapi api = osmapi . OsmApi () print ( api . NodeGet ( 123 )) # {u'changeset': 532907, u'uid': 14298, # u'timestamp': u'2007-09-29T09:19:17Z', # u

OSM地图地理编码、反地理编码和路线规划API

q=福建省厦门市&format=json&addressdetails=1&limit=1&polygon_svg=0。

loutengyuan的专栏 1031

Pydroid3 v6.2.1 解锁

Pydroid3 v6.2.1版本 已经将所有插件的所有库内置,直接安装即可使用。包括tensorflow、torch等

OSM数据内容解析

OpenStreetMap(简称OSM,中文是公开地图),这是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。是一款由网络大众共同打造的免费开源、可编辑的地图服务。OSM采用WGS 84(EPSG:4326)地理坐标系。优点:数据开放,可自己搭建服务器,自己修改数据。缺点:数据尚不完善,资源不是十分丰富。OSM数据很大程度上依赖于本地参与者的贡献,因而地图数据的质量在不同地区差异很大。

DIY_Liu的博客 9971

CSIT883系统分析与项目管理——Lecture3重点概念

🎈本节课,介绍了项目集成管理当中,关于NPV这个概念相关的内容,以及介绍什么是系统需求,什么时候需要开始系统需求,如何进行调查系统需求等等相关的题目,这里供大家复习参考吧!还有还有最关键的是NPV的计算,我单独写一篇博文,需要的同学快去学习吧!

AI手套的博客 1091

国产麒麟系统下Kettle安装避坑指南:解决aarch64架构不支持问题

本文详细解析了在国产麒麟系统上部署Kettle时遇到的aarch64架构不支持问题,提供了从获取适配的SWT库、修改启动脚本到生产环境调优的完整解决方案。文章重点解决了ARM架构与Java GUI工具的兼容性挑战,并分享了内存配置、字体显示及Carte服务部署等实战经验,助力用户在国产化环境中稳定运行ETL流程。

weixin_29197835的博客 562

Python实现OSM地图数据解析——OSM2Rail

开源python依赖库——OSM2Rail,不仅提供了更精确的铁路网络解析结果,而且实现了OpenStreetMap地图数据包自动下载,同时在GMNS标准的基础上扩展了铁路数据字段,将解析数据输出为符合GMNS-Rail 标准的路网文件。轻松获取想要的铁路网络数据!

Better.C的博客 4144

Python离线断网情况下安装numpy、pandas和matplotlib等常用第三方包

联网情况下在命令终端CMD中输入“pip install numpy”即可自动安装,pandas和matplotlib同理一样方法进行自动安装。 工作的电脑不能上外网,所以不能通过直接输入pip命令来安装。 环境:电脑上已经安装了Python(没有安装的请参考其他教程)。 Python离线断网情况下安装numpy、pandas和matplotlib等常用第三方包的步骤如下: ...

dayou7738的博客 4944

OSM数据分析及图形化显示以及各组员之间的关系Relation的存储

OpenStreetMap(OSM)       https://wiki.openstreetmap.org/wiki/Elements       OSM虽然是简称,但如果赋予数据的话,它就是一种格式,格式以.osm结尾,其元素有     三大元素: 1. Node ---   二维几何形态的最最基本的组成元素,点Point,横坐标:维度(lat) 纵坐标:经度...

Appleyk的专栏 1万+

MobaXterm详细使用教程

当然MobaXterm的功能远不止这些,但这些是最基本,最常用的,因此先拿出来讲。点击确定后,输入密码(输入密码时并不会显示,只管输入后按确定即可,第一次登陆成功后会提示保存密码,一般选择同意),就可以连接上虚拟机了。(2) 我们可以直接apt-get安装vim等常用功能(或者官网下载插件),实现在windows下模拟linux环境,这样就可以使用vi命令准备INCAR文件,也可以使用Gnuplot进行绘图。支持 Unix 命令(bash,ls,cat,sed,grep,awk,rsync,…

博客 4万+

【Unity 实用工具篇】✨| 使用Fungus插件制作一个对话系统,简单好学易上手

今天带来的是Unity中一款简单易用的对话插件Fungus,它是一个免费的交互式的对话系统。 Fungus是Unity免费的一款开源的插件,它可以无代码的实现玩家与NPC之间的对话,并且支持本地化,对相机、Sprite及音乐音效的控制。 学会使用该插件就可以做一些对话剧情类的游戏了,还是非常好用的,下面就来学习一下Fungus具体怎么使用吧!

努力前行,总会成为自己心中的那道光 1万+

OSM和PBF数据格式说明

从openstreetmap上下载的数据都是*.osm后缀的,虽然后缀是osm,但它的格式其实是xml的,而pbf则是一种xml的压缩格式。 一、osm格式 复制于:http://wiki.citydatum.com/index.php/OpenStreetMap,这个网页对openstreetmap有一个整体介绍,包括openstreetmap的发展和现状等等,这里只摘抄跟数据格式有关的内容,并补充了点内容。 1.数据格式 OSM使用拓扑数据结构,包括四类核心要素(aka. data p.

吴道简的博客 3万+

STM32CubeMX之定时器输入捕获

上一章介绍了STM32定时器的PWM输出功能,定时器的几个通道除了有输出功能外,还可以做输入用,可捕获信号的上升沿或下降沿,可以用于测量信号的频率、周期、占空比等。本篇文章将介绍用STM3...

zhang062061的专栏 1346

openstreetmap道路网数据对应中国道路速度——武汉

osm下载的道路网数据的highways标签对道路进行了分类,并且分类情况与中国不符,相关文献也寥寥无几,好在osm网站对每一种分类进行了图文解释(http://wiki.openstreetmap.org/wiki/Key:highway),本文将相应道路分类与中国道路分类进行匹配,并结合研究区域——武汉市的实际情况,进行速度赋值。 "highway" 字段,中英对照及速度(km/h)

u011994016的专栏 3万+

[特殊字符] 2026终极实战:Python爬取得物App球鞋实时交易价格 —— 从签名破解到数据可视化全栈指南

价格敏感度:热门鞋款(如Air Jordan 1、Yeezy 350、Dunk SB)价格每分钟都在波动,短线套利空间巨大。稀缺性:限量发售、联名款、地区限定,导致供需关系实时变化。数据壁垒:得物App使用自研WMS签名算法设备指纹绑定动态请求头加密,是爬虫工程师的“练兵场”。本博客将手把手带你从零搭建一套生产级得物球鞋价格爬虫系统,涵盖:抓包与逆向分析(mitmproxy + Frida)签名算法逆向(Python复刻)设备模拟与心跳保活(ADB + uiautomator2)

2201_76125261的博客 1125

点云最小二乘法拟合曲线

文章目录一、引言 一、引言

dayuhaitang1的博客 2736

OSM数据构建路段拓扑

OSM路网数据构建路段拓扑。

Gweixiao的博客 3064

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

OSM获取路网数据 (数据转换方法对比

ArcMap加载百度地图 由之前安装ArcBruTile插件转换成将百度地图适配为标准的WMTS服务,感谢大佬cehui0303 1.打开ArcMap,使用Catalog添加WMTS服务,url输入 http://demo.cxgis.com/wmts/baidu/vec?request=getcapabilities 2.点击确定,成功添加服务 3.将图层拖入视图,放大即可看到百度地图 OpenStreetMap获取城市路网数据 ...

Puzzle的博客 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【OSM历史数据获取及处理】

以"amenity"=>“fast_food"为例,当这一串字符串出现在末尾时,可能会出现末尾的"丢失,使用re.findall(r”“amenity”=>“(.*?(上方的oregon-internal.osh.pbf,包含所有年份的osm数据,需要登录osm账号之后进入internal server才可下载,需要使用osmium或其他插件/软件操作)获取,以美国数据为例,最小只能获取到某个州的整体数据,具体到某个市的数据可通过裁剪整个州的数据获取。以美国Oregon州的Portland市为例。

weixin_45795153的博客 5384

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Wami Map Project – 开源的 OSM API 服务

  Wami 地图项目把 OSM 数据分享给所有的人,很容易使用。他们利用 MongoDB 的潜力进行大数据管理来实现从 OSM 数据来源搜索相关的数据。它们的 API 使人们有可能检索不同格式的 POI,包括 GeoJSON。   OSM(OpenStreetMap)地图由用户根据手提 GPS 装置、航空摄影照片、其他自由内容甚至单靠地方智慧绘制。OSM 网站的灵感来自维基百科等网站。这可从该...

weixin_34107739的博客 313

python 读取osm.pbf数据,并以txt存储每个feature

python 读取openstreetmap的pbf数据,并以txt存储每个feature

coderxsj 1968

Linux安装gcc的四种方法

相比于windows系统,Linux安装程序就比较复杂了,很多需要root用户才能安装。常见的有以下几种安装方法 源码安装 rpm包安装 yum安装 (RedHat、CentOS) apt-get安装 (debian,ubuntu) 源码安装 以安装gcc为例,登陆https://gcc.gnu.org/,下载自己想要的版本的gcc安装包 上传gcc-4.1.2.tar.gz到Linux服务器任意目录,解压 解压目录执行shell命令 ./configurat.

xllntld的专栏 9万+

python读取文件可视化_如何在Python中从OSM文件提取和可视化数据

I have downloaded an OpenStreetMap file on my desktop , and I have used my OSM file in the jupyter notebook.My code:import xml.etree.cElementTree as ETosm_file = "ahmedabad_india.osm"for event, elem i...

weixin_39970994的博客 906

Mapbox矢量瓦片pbf文件信息解析

Mapbox由于配合其矢量瓦片pbf格式文件,有突出的渲染性能,被很多公司和开发者所使用。矢量瓦片的格式有很多种,其中pbf格式是一种二进制文件,直接把数据信息压缩位二进制了。 矢量瓦片优势 主要优势有 数据传输量小 相对与栅格瓦片数据量大大缩小 不受分辨率影响 矢量瓦片无论在地图放大到各种级别都是清晰的,都不会出现栅格放大后显示像元的问题。 动态样式 矢量瓦片会根据用户的定制的样...

做GIS梦的人 1万+

【功能上新】Python实现OSM地图数据解析——OSM2Rail

一款开源的铁路网络建模工具

Better.C的博客 3206

利用OpenStreetMap(OSM)数据搭建一个地图服务

http://www.cnblogs.com/LBSer/p/4451471.html 图 利用OSM数据简单发布的北京地图服务 一、OSM是什么 开放街道图(OpenStreetMap,简称OSM)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图(wiki:http://wiki.openstreetmap.org/wiki/Main_Pa...

weixin_30699235的博客 2359
上一篇: Python实现OSM地图数据解析——OSM2GMNS
下一篇: Python实现基于OSM地图数据的交通需求生成——Grid2demand
Better.C
博客等级 码龄9年 1万+粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值