将OpenStreetMap数据(OSM文件)导入到MySQL数据库/SQL文件

5

介绍

我下载并提取了OpenStreetMap源文件 (请看这里)。现在我有一个400GB的XML源文件,我想要 (1) 将数据插入到 MySQL 数据库表中 或者 (2) 导出为 SQL 文件,无论哪种方式都可以。

我已经做过/尝试过的事情

  1. 我已经拥有 XML 文件^^ 和 MySQL 服务器 (5.6.14)
  2. 我发现了工具 Osmosis,用于转换 OSM 数据,并已安装
  3. 我阅读了这篇文章: Read cities and streets into a database without api
  4. 我也阅读了这篇文章: Is this config is capable to import complete osm planet file? (它是可以的.)
  5. 我尝试使用 osmosis 来插入数据,但是它会在几秒钟后抛出一个错误,或者在没有插入一行数据的情况下运行数小时。我也不明白这应该如何工作,因为我没有 MySQL 中的 OSM 表结构。

问题

一般来说,在数据库 / SQL 文件中导入整个文件是可能的吗?如果是,如何操作?在哪里可以找到表格/数据库结构?有人已经尝试过了吗?

非常感谢!


在2019年,我开发了一个命令行工具,名为“osm-to-sql”,用于将任何OSM XML文件转换为单独的SQL文件。转换完成后,您可以将这些SQL文件导入到您的MSSql/SQLite/MySQL等服务器中。https://github.com/whizsid/osm-to-sql - Ramesh Kithsiri HettiArachchi
2个回答

4
我认为这个问题的答案现在已经改变了。从MySQL 5.6开始,MySQL中有一个完整的OpenGIS地理空间特性集(甚至不是扩展;它是内置的)。因此,从纯理论上讲,没有理由不能使用标准的、受支持的数据库架构(当然需要更改语法)将OSM数据导入到MySQL中。实际上,这个演示(仍然提到旧版本的MySQL OpenGIS支持)表明,在正确索引的情况下,一些MySQL地理空间操作可能比PostgreSQL PostGIS执行得更好,尽管我相信这还有待讨论。因此,剩下的问题是工具的导入...

目前还没有官方的osm2mysqlosm2pgsql相当。虽然有一些名为osm2mysql的项目,但我看到人们只能在使用这些项目时获得中等或没有成功。然而,GDAL的开源ogr2ogr似乎是一个非常可行的解决方案。

我下载、编译和安装了ogr2ogr,并能够将一个shapefile导入到MySQL的地理空间模式中,并成功(并显然准确地)查询数据,如使用ST_Contains(...)等。我还没有尝试过OSM(那是我的下一步),但ogr2ogr声称对OSM(XML和二进制)有完全支持,所以考虑到我的shapefile成功经验,我想我会在OSM上取得类似的成功。

我最开始遇到了一些问题,其中一个可能与我在configure尝试之间没有使用make clean有关,其他问题与涉及的大查询(一些插入> 1MB)和需要调整的一些MySQL设置有关。您可以在此邮件列表线程中查看我的解决方案的详细信息。


3

确实可以:http://wiki.openstreetmap.org/wiki/MySQL
但请注意,这是一个不太受支持的解决方案:

  • 没有地理空间扩展
  • 自定义DB模式
  • OSM工具链中的主要工具不支持

我强烈建议切换到带有PostGIS扩展的postgreSQL,这是GIS世界中的半标准。

最终取决于您的用例(原型制作...高可用性的DB服务器,具有实时OSM数据更新)。 您将在http://switch2osm.org找到更多信息。


首先,非常感谢您的回答!不幸的是,我之前从未使用过PostgreSQL,所以我会查看这个链接,谢谢。 - user2896540
我不想再翻这个老账了,但我认为答案现在已经改变了。这部分“没有地理空间扩展”已经不正确了(MySQL现在有一个地理空间扩展与PostgreSQL功能相同),应该在这个答案和OpenStreet Map维基上进行更新(我会单独与他们联系)。所以,鉴于此,现在的答案应该是不同的(但我不知道是否正确)。有没有办法将这些地理空间数据导入到MySQL的地理空间扩展中?来源:https://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html - Nick Williams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接