java osm pbf_read format .osm.pbf from geofabrik

article/2025/8/26 16:09:43

#--------------------------20200227更新----------------------------------------

德国人第二天邮件就反馈了。确实严谨,也学到了。

1 osm 全部坐标信息只在points里, 后面的way 和relation 只有点id的索引。

他给出的读取方法是:

l0 =osm.GetLayer(0)

f0=None

fcount=0while l0.GetNextFeature() is notNone:

fcount+= 1

必须顺次读取,先读完全部的points再读后面的

2 pbftoosm 不维护了。

Pbftoosm is not maintained any more. Please use Osmconvert, its direct

replacement, or Osmium instead.

osmium cat -o nk.osm north-korea-latest.osm.pbf

3 不兼容报错,主要是因为删除了上传者个人信息。 他们验证过的工具可以处理这个问题。

Our files follow the standard with the exception thatpersonal metadata

fields are set to 0 or empty strings to protect the privacy of

OpenStreetMap contributors. Our tests pointed out that this is not an

issue for established tools such as Osmium, Osmosis and Osmconvert.

4 处理是基于导入pg的

We do not plan to support pbftoosm in future because its development

stopped nine years ago. We do not use GDAL to read PBF files ourselves

because it is not performant. Instead, we import them into a PostgreSQL

database and run

毕竟咱是外行,还是学到很多啊

#----------------------------------------------------------------------------

项目需要分析过滤osm上的数据,  在

可以下载到按大洲,和国别 的 osm数据,    所有国家提供  .osm.pbf格式 和 raw osm压缩 .osm.bz2  格式,  数据少的国家 提供 . shp 格式的.

对shp的处理当然没问题. 但在数据大的国家动辄几G, pbf体积最小, 就下载了.但是读取可坑死我了.  前后折腾了N天.终于明白了.

一.症状

直接说结论:这个网站的pbf格式, 不是标准的pbf!  表现症状有2:

1.1 不被 gdal ogr 库支持

在py下

importgdal, ogr

gdal.SetConfigOption('OGR_INTERLEAVED_READING', 'YES')#gdal.SetConfigOption('OSM_MAX_TMPFILE_SIZE', '2000')

if __name__ == '__main__':

fname = './data/osm_pbf/north-korea-latest.osm.pbf'

osm =ogr.Open(fname)print(osm.GetLayerCount())

layer=osm.GetLayer(0)#layer = data.GetLayer('lines')

print(layer.GetFeatureCount())

feature=layer.GetNextFeature()

o1=feature.ExportToJson(as_object=True)print(o1)

1 所有的对 layer 0 也就是points  是可以运行的,但是 lines multipolygons 一个features都读不出来, 只返回None

layer.GetFeatureCount()

可以读出数量

在ubuntu下, 自己辛苦源码编译的gdal下,  全是-1

但是, gdal 测试里自带的pbf     GDAL/autotest/ogr/data/test.pbf

是没任何问题的  !

1.2 不被openstreetmap官网的pbf转换工具支持

官网提供了pbf2osm 直接一个可执行文件 比如x64 linux 直接下载一个pbftoosm64  放到bin 之类的路径下

对gdal自带的pbf是可以正常转型的 转成osm的 注意尖括号不能省略

pbftoosm64 test.osm

但是转他家下载的.osm.pbf就报错

➜ osm_pbf git:(master) ✗ pbftoosm64 nk.osm

pbftoosm Warning: header block element type unknown: 0x80 0x02.

pbftoosm Warning: header block element type unknown: 0xA6 0xC8.

pbftoosm: Format error: 0xA6.

pbftoosm: Number of bytes read: 24

这几天,为了编译gdal和他的依赖库, 兜了个大圈子,坑死我了.

2 解决

但是,这毕竟是个天天更新全球数据的网站, 德国人开的网站,总不至于发布完全无法读取的数据呀.

Commonly Used Formats

asia-latest.osm.pbf, suitable for Osmium, Osmosis, imposm, osm2pgsql, mkgmap, and others. This file was last modified 6 hours ago and contains all OSM data up to 2020-02-25T21:59:02Z. File size: 7.7 GB; MD5 sum:

sudo apt-get install build-essential cmake libboost-dev \

libexpat1-dev zlib1g-dev libbz2-dev

pip3.8 install osmium

写个新的py脚本read_osm_pbf.py

'''https://download.geofabrik.de/asia.html

asia-latest.osm.pbf, suitable for Osmium, Osmosis, imposm, osm2pgsql, mkgmap, and others.'''

importosmiumclassCounterHandler(osmium.SimpleHandler):def __init__(self):

osmium.SimpleHandler.__init__(self)

self.num_nodes=0defnode(self, n):

self.num_nodes+= 1

if __name__ == '__main__':

fname= './data/osm_pbf/north-korea-latest.osm.pbf'h=CounterHandler()

h.apply_file(fname)print("Number of nodes: %d" % h.num_nodes)

运行一下:

python3.8 read_osm_pbf.py

6385b05b65a1aa3c15ce0e80564b3fad.png

果然能读, 没报错

下面继续研究具体怎么读坐标,怎么关联shapely

有时间真想问问德佬, 你们这pbf和osm官网的pbf到底啥关系?!


http://chatgpt.dhexx.cn/article/NcRN4tuo.shtml

相关文章

边缘服务网格 osm-edge

本文篇幅稍长,阅读本文将了解以下内容: •什么是 osm-edge 及其产生背景•边缘计算与中心云计算的差异,以及带来的挑战•osm-edge 的设计及采用的技术•5 分钟快速体验边缘服务网格 关于 osm-edge osm-edge 是针对边缘计算环境设计的服务网格…

GeoServer发布OSM地图

参考顺序: CentOS7.5安装Postgresql10.5和PostGIS(CentOS7.6安装Postgresq11和PostGIS)CentOS7部署GeoServerCentOS7部署osm2pgsql GeoServer发布OSM地图 1. 创建图层数据表 osm_db中包含了planet_osm_line,planet_osm_point,planet_osm_…

使用OSM数据创建城市模型

使用OSM数据创建城市模型 一.OSM数据获取方式 (1)通过OpenStreetMap获取 (2)通过Geofabrik下载最近的OSM数据 (3)有很多插件也提供了数据获取方式,根据自己用的软件,自行百度查找 …

java osm_OSM初识(三)OSM Data

一 导出数据 将XML格式的OSM数据转换成另一种格式。 二 提取数据 剪切你选择区域内的数据,或者提取出特定区域特定的特征 三 数据格式 OSM文件仅属于OSM,不能用别的软件打开。其中后缀为bz2,pdf的文件是为了节省空间压缩过的OSM文件。一个简单…

简单学习OSM(OpenStreetMap)文件格式的最基础结构

目标 获取一个最简单的OSM文件,并学习其最基础的结构。 获取OSM数据的步骤 操作很简单: 进入官网:https://www.openstreetmap.org/ 点击左上角的 “导出” 按钮。 然后,填入坐标范围,点击按钮即可导出osm文件&…

OSM(OpenStreetMap)使用简述

0.背景 基于开源的地图制作工具osm以及开源的仿真引擎CARLA完成交通场景仿真场景的搭建。 1.构建OSM场景 https://www.openstreetmap.org/#map16/31.2808/121.1690 1.1.搜索关键字 1.2. 手动选择不同的区域 1.3.导出 导出为osm文件 2.osm->xodr OpenStreetMap 格式文件…

OSM数据内容解析

OSM数据内容解析 数据简介 OpenStreetMap(简称OSM,中文是公开地图),这是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。是一款由网络大众共同打造的免费开源、可编辑的地图服务。 OSM采…

OSM下载路网数据

OpenStreetMap(简称OSM,中文是公开地图)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。 本文介绍如何使用OSM免费下载路网数据。如想直接获取全国路网数据,可见文末! OSM地…

python第三方库pygame的使用

作用:pygame一般用来做游戏 注意:1.在使用pygame提供的功能之前,需要调用init方法 2.在游戏结束前需要调用 quit 方法 pygame中的各个函数: 1.pygame.init():该函数在使用pygame时进行初始化,只有引用了该…

Py之pygame:Python的pygame库的简介、安装、使用方法详细攻略

Py之pygame:Python的pygame库的简介、安装、使用方法详细攻略 目录 pygame库的简介 pygame库的安装 pygame库的使用方法 pygame库的简介 PyPoice是SDL多媒体库的Python包装模块。它包含Python函数和类,这些类和类允许使用SDL对CDROM、音频和视频输出、…

python3安装pygame出错(输入“pip3 install pygame“,安装pygame模块报错)

使用pip3 install pygame,安装出错 自己已经更换源镜像,但总是在执行到最后一步的时候报错,通过网上的方法安装,总是出现两个配置无法被找到,向下执行的时候出现错误,最后以第一种方式安装成功。 执行: p…

【Pygame基本使用】

pygame是什么 pygame是跨平台Python模块,专门为电子游戏设计,包含图像、声音等;简单的说它是别人已经编写好的程序,并放在了一个类似库里,专门给别人使用的; pygame的图形接口 https://www.jianshu.com/p…

python Pygame的具体使用讲解

一、实验介绍 1.1 实验内容 在本节课中,我们将讲解Pygame的常用对象及其操作,包括图形、动画、文字、音频等,确保同学们对Pygame有一个基础的了解,同时为后续课程做好准备。 Pygame图形Pygame动画Pygame文字Pygame音频Pygame事…

Pygame 官方文档 - 中译版

pygame 文档 Pygame之家【Pygame Home】 帮助内容【Help Contents】 指导索引【Reference Index】最有用的东西 【Most useful stuff】Color | display | draw | event | font | image | key | locals mixer | mouse | Rect | Surface | time | music | pygame 高级的东西【…

pygame入门

pygame入门 文章目录 pygame入门说明一、pygame的安装二、pygame模块概览三、pygame的“hello world”四、事件理解事件事件检索处理鼠标事件处理键盘事件事件过滤产生事件 五、显示全屏显示改变窗口尺寸复合模式其他 六、字体创建font对象使用字体中文字体 七、颜色八、图像使…

pygame下载(非常详细)

pygame安装 第一次安装pygame,从网上查了很多资料,各种方式都有,我发现了一种很简单的方法,不用去官网找,直接输入命令就能下载,希望能给大家提供一些参考! 打开终端 1、winR 打开终端&#…

Pygame是什么

Python 是当下最为火热,且功能最为全面的一门编程语言。Python 之所以深受大家喜爱, 除了可以被应用到“人工智能”领域之外,还可以延伸到数据分析、Web 开发、自动化测试、自然语言处理、游戏开发等各个领域。这一切的实现得益于 Python 有一个强大的第三方库,这个第三方库…

【pygame游戏开发】这几个经典游戏,勾起了少年的快乐

给大家分享几个好玩有趣的小游戏,既提升了学习的兴趣,又提升了学习效率,告别枯燥的学习。 一、飞机大战 1、源码部分 模块导入 import sys import cfg import pygame from modules import *游戏界面 def GamingInterface(num_player, scr…

python-颜色识别

使用Python来做颜色识别,使用了openCV import cv2 import numpy as np import time class ColorTac(object):def colorTacing(self):print(-*-COLOR TACKING MODE-*-)print(you can input:blue,red,yellow,green,purple.and must input one)color input("Col…

android颜色识别

写的一个关于颜色识别的小功能。识别主要颜色。 思路:遍历像素点,找出出现次数最多的像素值作为主要颜色。 采用的方法有: 1.调用摄像头,拍照,裁剪,压缩。 2.找出色值。 3.转换成hsv空间,进行颜…