3种获取OpenStreetMap数据的方法【OSM】

这篇具有很好参考价值的文章主要介绍了3种获取OpenStreetMap数据的方法【OSM】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OpenStreetMap 是每个人都可以编辑的世界地图。 这意味着你可以纠正错误、添加新地点,甚至自己为地图做出贡献! 这是一个社区驱动的项目,拥有数百万注册用户。 这是一个社区驱动的项目,旨在在开放许可下向每个人提供所有地理数据。

OpenStreetMap 数据是最新、最详细的可用空间数据库。 因此,OSM 已成为希望在其应用程序和网站中使用地图数据的开发人员的流行资源。 但是,将 OpenStreetMap 数据转换为 OSM 对象并在项目中使用它需要经验和特定知识。

在本文中,我们将介绍获取 OpenStreetMap 数据的基础知识以及三种获取OSM数据的方法。

3种获取OpenStreetMap数据的方法【OSM】,oracle,数据库

推荐:用 NSDT编辑器 快速搭建可编程3D场景

0、OpenStreetMap 数据结构

在讨论提取数据和查询示例之前,让我们先看看 OpenStreetMap 数据结构,因为需要这些知识来更好地理解查询示例。

OSM 数据库中的每个对象都分配有与其表关联的类型。 对象分为三种类型:节点、路径和关系。 每种对象都有唯一的 ID。 所以OSM中的每个对象都有一个ID和类型。 例如, osm_type=“way” 和 osm_id=67104773。

此外,每个对象可能具有描述其属性的标签,例如地址、开放时间、设施类型、颜色、参考文献、维基百科页面或其他信息。

0.1 节点

节点(Node)是具有位置(坐标)的对象。 节点可以代表邮箱、树、地铁入口、市中心、建筑物编号等。
3种获取OpenStreetMap数据的方法【OSM】,oracle,数据库

节点可以是独立的,也可以是关系的一部分。 例如,地铁入口可以是地铁站的一部分。

0.2 路线

路线(way)是一条线或多边形,例如街道、河流、建筑物或边界。
3种获取OpenStreetMap数据的方法【OSM】,oracle,数据库

与节点类似,路线可以是独立的,也可以是关系的一部分。 通常,街道和河流由一组方式表示,因此每个部分都可以有自己的标签,例如速度限制、车道数量、表面等。

0.3 关系

关系(relation)是描述世界上某些结构的节点、道路和可能的其他关系的组,例如,关系“自行车道”描述了道路旁边的自行车道的结构。
3种获取OpenStreetMap数据的方法【OSM】,oracle,数据库

关系也可以有标签 - 这些通常称为“关系上的标签”,因为它们直接应用于关系,而不是像节点或路径标签这样的单个成员。

0.4 标签

OSM 数据库中的每个对象都可能有一组描述该对象的特征和属性的标签(tag)。 以下是如何标记建筑物的示例:

  • Building=yes(这告诉我们这是一座建筑物)
  • name=Old Marylebone Town Hall(这是建筑物的名称)
  • operator=Westminster City Council(这告诉我们谁在运营这座大楼)
  • addr:street=Marylebone Road(这告诉我们可以在哪里找到这座建筑)

OpenStreetMap (OSM) 社区努力创建一种保持标签平衡且易于理解的方法。 文档门户解释了标签。

该文档不仅解释了每个标签的作用,还解释了为什么它会这样做,以便当你在网络上查看地图或使用根据 OSM 数据构建的应用程序时,可以了解正在查看的内容并拥有你的位置或路线的一些背景信息。

OSM 社区还创建了一系列用于在地图上标记道路和其他要素的指南。 这些指南在 OSM 行话中称为“风格指南”,它们解释了如何标记不同类型的事物,以便您的数据与其他人的数据保持一致。 风格指南非常重要,因为它有助于确保所有使用 OSM 数据的地图看起来都一样!

让我们看一下如何从 OSM 项目检索数据并使用它来构建新应用程序:

1、使用原始OSM 数据快照

原始 OpenStreetMap 文件使用基于 XML 的格式。 XML 格式旨在添加有关节点、路径和关系的新信息,并跟踪对地图所做的更改。

最适合数据读取的替代格式由第三方工具和提取器生成。

以下是获取 OSM 原始数据的一些最流行的方法:

1.1 通过 Planet OSM 网站

Planet OSM 提供 OSM 数据的每周快照。 它包含当时 OSM 中的所有对象。

可以使用第三方工具将文件转换为不同的格式或数据库。 例如,Osm2pgsql 允许你将数据导入到 Postgis 数据库。

从数据库中获取数据后,你可以使用 SQL 查询来处理它。 例如,此查询提取法国巴黎特定视图框中的所有餐馆:

with filterGeom as (select ST_Transform(ST_SetSRID(st_geomfromgeojson('{"type":"Polygon","coordinates":[[[2.2795, 48.8810], [2.4142, 48.8810], [2.4142, 48.8325], [2.2795, 48.8325], [2.2795, 48.8810]]]}'), 4326), 3857) as w)
(select 
pop.osm_id,
pop.tags,
'node' as osm_type,
ST_AsGeoJSON(st_transform(way, 4326))::jsonb as geojson
from planet_osm_point pop, filterGeom
where pop.amenity = 'restaurant' and ST_Intersects(way, filtergeom.w))
union all
(select 
pol.osm_id,
pol.tags,
'polygon' as osm_type,
ST_AsGeoJSON(st_transform(way, 4326))::jsonb as geojson
from planet_osm_polygon pol, filterGeom
where pol.amenity = 'restaurant' and ST_Intersects(way, filtergeom.w))

请注意,一些餐厅被映射为节点 ( planet_osm_point),而另一些餐厅则被映射为路径 ( planet_osm_polygon)。 所以你必须从2个表中查询。

1.2 通过 Geofabrik 网站

Geofabrik 以 PBF 格式提供各大洲的每日 OSM 数据提取。 数据已从元数据(个人数据、用户 ID、变更集)中清除。 因此你可以使用它而无需担心数据保护法规。

1.3 通过 BBBike 网站

BBBike 提供按城市和地区划分的 OSM 摘录。 提取内容只有 2-50 MB 大,你可以选择 PBF、XML、形状文件、矢量地图图块等数据格式。

2、使用Overpass API 作为 OSM API

Overpass API 允许你按条件查询 OpenStreetMap 数据。 它针对读取数据进行了优化,可以使用 Overpass QL(或 Overpass XML 作为替代方案)来编写查询,也可以在 Overpass QL 文档页面上找到查询示例。

你可以使用 Overpass Turbo 交互式工具运行小型查询并测试你的请求。 Overpass Turbo 交互式允许你在实时地图上测试请求。 通过简单直观的界面,你可以轻松搜索地址、使用标签、编辑对象或只是玩地图。

下面是一个查询示例,它与上一节中的示例执行相同的工作 - 查询巴黎餐馆:

nw
  [amenity=restaurant]
  (48.8330,2.2792,48.8800,2.4140);
out;

请注意,你可以在一个请求中查询多个表中的数据。 要从一张表中获取信息,请使用 node、rel和way。 要同时查询多个表中的数据,请使用nw、 nwr、wr或nr。

有一个可用的开放 Overpass API 实例列表,可以免费使用。 但是,它们的使用有限制,因此你不能在应用程序中将它们用于生产目的。

然而,值得注意的是,即使 Overpass API 非常适合小型和简单的查询,但它并不是更复杂的查询的最佳选择。

3、使用Geoapify API获取 OSM 数据

Geoapify Places API 可以轻松地将 OpenStreetMap (OSM) 数据获取到你的项目中。 例如,如果想要有关特定区域的餐馆的信息,你只需指定所需地点的类别以及搜索和运行 HTTP 请求的区域即可。

以下是获取巴黎餐厅的 URL(在 MyProjects Geoapify 上注册并获取 API 密钥):

https://api.geoapify.com/v2/places?categories=catering.restaurant&filter=rect:2.2792,48.8330,2.4140,48.8800&limit=100&apiKey=YOUR_API_KEY

你不需要使用 Places API 来操作节点、路径和关系。 我们已经为你做好了! 此外,Places API 包含经过处理和检查的数据,因此你不必处理在开放数据中可能发现的磨损情况或错误。

以下是如何在 JS 应用程序中运行查询的示例:

fetch('https://api.geoapify.com/v2/places?categories=catering.restaurant&filter=rect:2.2792,48.8330,2.4140,48.8800&limit=100&apiKey=YOUR_API_KEY')
.then(resp => resp.json())
.then((places) => {
	console.log(places);
});

Geoapify Places API 支持 500 多个类别 - 住宿、商业、餐厅和咖啡馆、休闲、娱乐、旅游等。

你可以在 Playground 页面上尝试 Places API,无需注册。

4、结束语

我们可以得出的结论是,OSM 是一个游戏规则改变者。 如果你想为不同平台开发开源应用程序,OSM 就是你应该开始寻找的源。 数据免费提供,更新速度快,并且有大量的工具可供使用。

现在你至少知道三种将 OSM 数据导入项目的方法。 工具的选择取决于你正在寻找什么类型的数据以及你拥有什么功能。


原文链接:3种获取OSM数据的方法 — BimAnt文章来源地址https://www.toymoban.com/news/detail-658940.html

到了这里,关于3种获取OpenStreetMap数据的方法【OSM】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL SERVER连接oracle数据库几种方法

    --1 方式  --查询oracle数据库中的表  举一反三:在查询分析器中输入: --在sqlserver中创建与oracle数据库中的表同名的表  --2、方式  --在master数据库中查看已经存在的链接服务器  --要在企业管理器内指定登录帐号 --备注:引用ORACLE服务器上的表时,用户名称与表名一定要大写

    2024年02月02日
    浏览(40)
  • 从MySQL迁移到Oracle数据库的详细步骤和方法

    在一些情况下,可能需要将现有的MySQL数据库迁移到Oracle数据库。本文将详细介绍如何进行这一迁移过程,涵盖了备份、转换和导入等关键步骤,以帮助你顺利完成数据库迁移。 在开始迁移之前,务必备份你的MySQL数据库,以便在出现问题时可以还原数据。 确保你已经安装了

    2024年02月08日
    浏览(40)
  • Oracle 数据库实现主键字段自增的方法

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 在 Oracle 数据库中,实现主键字段的自增功能对于确保数据的唯一性和简化数据插入操作非常重要。本文将介绍如

    2024年02月12日
    浏览(35)
  • Oracle 数据库全表扫描的4种优化方法(DB)

    全表扫描的工作是扫描高水位一下所有的数据块。 这里就有一个问题,什么是高水位线。高水位的标志存在表头。 该数据块以后都是崭新未格式化的数据块,高水位的目的有二。它是全表扫描的 终点,并行插入的起点! 优化全表扫描的办法有四,核心就是降低高水位! 一

    2024年04月18日
    浏览(38)
  • Oracle 数据库查看锁表的语句和解锁的方法

    死锁级别: 级别 描述 0 none 1 null 空 2 Row-S 行共享(RS):共享表锁 3 Row-X 行专用(RX):用于行的修改 4 Share 共享锁(S):阻止其他DML操作 5 S/Row-X 共享行专用(SRX):阻止其他事务操作 6 exclusive 专用(X):独立访问使用

    2024年02月16日
    浏览(40)
  • Oracle数据库ORA-01507: database not mounted解决方法

    连接上安装好的oracle后,执行SQL报ORA-01507: database not mounted错误,根据百度ORA-01507: database not mounted的解决办法,问题解决了,下面详细介绍一下这个方法: 执行sql命令: shutdown ,并退出sqlplus /oracle/SHP/11204/是本例的oracle的家目录,要根据自身安装目录做修改 语句为 fuser -u l

    2024年02月16日
    浏览(30)
  • 查询服务器tns文件路径,oracle数据库tns配置方法详解

    Oracle中TNS的完整定义:transparence Network Substrate透明网络底层, 监听服务是它重要的一部分,不是全部,不要把TNS当作只是监听器。 上图中的CGDB和STDCG就是对应的TNS,HOST是指向数据库服务器的IP,当然局域网内用计算机名称也是可以的。通过客户端Net Manager创建一个连接到数据

    2024年02月09日
    浏览(47)
  • Oracle ORA-01033: ORACLE initialization or shutdown in progress(误删了DBF数据库文件导致)解决方法

    先声明一下前期的一些手欠欠儿的操作导致oracl登录不进去了,起先是清理磁盘空间的时候误删除了orcle DBF数据文件后无法进入系统,plsql登录报错如下: 一般情况下,删除表空间的正确方法是: DROP TABLESPACE BDCDJ INCLUDING CONTENTS AND DATAFILES; 如果没有通过以上命令删除而直接删

    2024年02月02日
    浏览(45)
  • Flink-CDC——MySQL、SqlSqlServer、Oracle、达梦等数据库开启日志方法

    目录 1. 前言 2. 数据源安装与配置 2.1 MySQL 2.1.1 安装 2.1.2 CDC 配置 2.2 Postgresql 2.2.1 安装 2.2.2 CDC 配置 2.3 Oracle 2.3.1 安装 2.3.2 CDC 配置 2.4 SQLServer 2.4.1 安装 2.4.2 CDC 配置 2.5达梦 2.4.1安装 2.4.2CDC配置 3. 验证 3.1 Flink版本与CDC版本的对应关系 3.2 下载相关包 3.3 添加cdc jar 至lib目录 3.4 验

    2024年02月05日
    浏览(40)
  • Oracle数据库SQL*Plus命令行执行SQL语句时,中文乱码报错解决方法

    🎉欢迎来到Java学习路线专栏~Oracle数据库SQL*Plus命令行执行SQL语句时,中文乱码报错解决方法 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:Java学习路线 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹

    2024年01月22日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包