OpenStreetMap(OSM)历史数据下载

转载:https://blog.csdn.net/qq_912917507/article/details/85057400

首先的一个疑问,OSM上有历史数据吗?有的话,去那里下载?

方法一

官方网址https://planet.openstreetmap.org/planet/full-history/

官方的方法不推荐

需要注意的事,你一次就将会把全球的历史存档数据下载下来

而且数据转换速度慢到令人发指,时间上也就保留5年

bzip2 -cd full-planet-110115-1800.osm.bz2 | bzip2 -c> full-planet.new.osm.bz2
这可能需要很长时间(在具有8GB RAM的2.66Ghz Intel Core i7上大约需要36小时)。生成的文件将略小于原始文件。

此处找到的文件是OpenStreetMap.org数据库的完整副本,包括编辑历史记录。这些是在Open Data Commons Open Database License 1.0许可下发布的。

完整的历史行星文件包含XML和自定义PBF格式的OpenStreetMap数据库的完整编辑历史记录。

方法二

http://download.geofabrik.de/asia/china.html#

可以下载整个国家,时间从140101到现在,可以直接下载shp格式,还算不错

务必点一下raw directory index

方法三

使用Osmium工具(没有实测,不知效果)

Osmium lets you extract data from OSM history files for a given point in time or a time range or a polygon or a bounding box. See osmium-tools and its extract command which can handle history dump files in various formats (see the --with-history option).

Osmium允许从OSM历史文件中提取给定时间点、时间范围、多边形或边框的数据。参见锇工具及其提取命令,该命令可以处理各种格式的历史转储文件(请参见—with-history选项)。

工具说明

https://wiki.openstreetmap.org/wiki/Osmium

多种语言可以选择

实例EXAMPLES

https://docs.osmcode.org/osmium/latest/osmium-time-filter.html

Extract current planet file from history planet:

从历史行星中提取当前行星文件:

osmium time-filter -o planet.osm.pbf history-planet.osh.pbf
Extract planet data how it appeared on January 1 2008 from history planet:

从历史行星中提取行星数据2008年1月1日它是如何出现的:

osmium time-filter -o planet-20080101.osm.pbf history-planet.osh.pbf 2008-01-01T00:00:00Z
 有用过的朋友可以给我们讲一讲

欢迎互相交流学习,作者微信 w912917507

### 如何从OpenStreetMap API获取历史数据 为了访问OpenStreetMap (OSM)历史数据,通常不会直接通过主要API接口来实现这一功能,因为默认的API并不支持历史版本的数据请求。对于这类需求,Planet文件或是专门用于查询特定区域和时间点数据的服务更为适用。 #### 使用 Planet 文件获取历史数据 一种方法是从Geofabrik或BBBike等提供商处下载整个星球的历史planet.osm文件或者是按国家和地区划分的小规模提取物[^2]。这些文件包含了自项目开始以来所有的更改记录,可以用来重建任何给定时刻的地图状态。不过需要注意的是,处理如此庞大的数据集可能需要相当强大的计算资源以及专业的工具链来进行解析与过滤。 #### 利用 Overpass Turbo 查询指定时间段内的变更日志 另一种更灵活的方法是利用Overpass Turbo服务配合`historic`参数执行复杂的空间-时间查询语句。下面给出了一段Python脚本的例子,展示了怎样调用Overpass API 来检索某段时间内被编辑过的道路对象: ```python import overpy api = overpy.Overpass() # 定义要查询的时间区间 start_time = "2023-01-01T00:00:00Z" end_time = "2023-06-01T00:00:00Z" query = f""" [out:json][timeout:25]; way(around:100,51.5074,-0.1278)["highway"](changed:"{start_time}", "{end_time}"); out body; >; out skel qt; """ result = api.query(query) for way in result.ways: print(f"Way ID:{way.id}, Nodes Count={len(way.nodes)}") ``` 这段代码会返回伦敦市中心半径100米范围内,在指定日期间发生过修改的所有公路路段的信息[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值