Imposm 是 OpenStreetMap 数据的导入器。它读取 PBF 文件并将数据导入 PostgreSQL/PostGIS。它还可以使用 OSM 的最新更改自动更新数据库。
它旨在创建针对渲染进行优化的数据库(即生成图块或用于 WMS 服务)。
Imposm >=3 是用 Go 编写的,它完全重写了之前的 Python 实现。配置/映射和缓存文件与 Imposm 2 不兼容,但它们共享相似的架构。
Imposm 的开发由 Omniscale 赞助。
Imposm 已被作者投入生产使用。它得到积极维护,重点是解决未来与 PostGIS 等依赖项的不兼容问题。然而,没有能力为最终用户提供支持,也不会开发超出其现有范围的新功能。
高性能
差异支持
自定义数据库模式
广义几何
高性能:从头开始并行。它将解析和处理分配给所有可用的 CPU 核心。
自定义数据库模式:为不同数据类型创建表。这使得在 WMS 或图块服务中渲染时可以更轻松地设置样式并提高性能。
统一值:例如,布尔值1
、 on
、 true
和yes
都变为TRUE
。
按标签和值过滤:仅导入要渲染/使用的数据。
高效的节点缓存:需要存储所有节点来构建方式和关系。 Imposm 使用基于文件的键值数据库来缓存此数据。
通用表格:自动创建具有较低空间分辨率的表格,非常适合以低分辨率渲染大型道路网络。
限制为多边形:对于城市/州/国家导入,将导入的几何图形限制为来自 GeoJSON 的多边形。
易于部署:单个二进制文件仅在运行时依赖于公共库(GEOS 和 LevelDB)。
自动 OSM 更新:包括自动下载和导入最新 OSM 更改的后台服务 ( imposm run
)。
路由关系:导入包括路由在内的所有关系类型。
支持表命名空间(PostgreSQL 架构)
Imposm 充分利用所有可用的 CPU 内核
Imposm 使用COPY FROM
批量插入到 PostgreSQL
Imposm 使用高效的中间缓存来减少方式和关系构建过程中的 IO 负载
在 Hetzner AX102 服务器(AMD Ryzen 9 7950X3D、256GB RAM 和 NVMe 存储)上以 diff 模式导入 78GB Planet PBF (2024-01-29)(具有通用表和空间索引等)大约需要 7:30 小时。这是为了准备进行细微更新的导入。非差异模式甚至更快。
建议服务器的内存大小大约是您要导入的 PBF 数据提取大小的两倍。例如:对于当前 (2024) 78GB 的行星文件,您应该有 192GB 或更多 RAM,对于 4GB 区域提取,您应该有 8GB 等。使用旋转磁盘导入将花费更长的时间,因此不建议这样做。
二进制版本可在 GitHub 上获取。
这些版本适用于 x86 64 位 Linux,不需要进一步的依赖项。下载、解压并启动imposm
。二进制文件与 Debian 10 以及 2022 年或更新版本的其他发行版兼容。如果您需要支持旧版本,您可以从源代码构建。
有一些依赖关系:
你需要去。建议使用 1.17 或更高版本。
其他依赖项包括 libleveldb 和 libgeos。 Imposm 已使用这些库的最新版本进行了测试,但使用旧版本也可能会成功。建议使用 GEOS >=3.2,因为它在处理无效几何图形时变得更加稳健。
安装 Imposm 的最快方法是调用:
go install github.com/omniscale/imposm3/cmd/imposm@latest
这将下载、编译 Imposm 并将其安装到~/go/bin/imposm
。您可以通过设置GOBIN
环境来更改位置。
推荐的安装方式是:
git clone https://github.com/omniscale/imposm3.git cd imposm3 make build
make build
会将 Imposm 构建到您的本地路径中,并将版本信息添加到您的二进制文件中。
您还可以直接使用 go 构建或通过go build ./cmd/imposm
安装 imposm 。但是,这不会设置版本信息。
Go 编译为静态二进制文件,因此 Imposm 对 Go 没有运行时依赖性。只需将imposm
二进制文件复制到您的服务器即可进行部署。但上面列出的 C/C++ 库仍然是必需的。
另请参阅packaging.sh
以获取有关如何为 Linux 构建二进制包的说明。
为了获得更好的性能,您应该使用 LevelDB >1.21。您仍然可以使用go build -tags="ldbpre121"
或LEVELDB_PRE_121=1 make build
来构建对 1.21 的支持。
imposm
有多个子命令。使用imposm import
进行基本导入。
对于简单的导入:
imposm import -connection postgis://user:password@host/database -mapping mapping.json -read /path/to/osm.pbf -write
您需要一个包含目标数据库映射的 JSON 文件。请参阅example-mapping.json
以了解映射的可能性。
Imposm 在import
表模式中创建所有新表。因此,您将拥有import.osm_roads
等。您可以将表更改为public
模式:
imposm import -connection postgis://user:passwd@host/database -mapping mapping.json -deployproduction
您可以将一些选项写入 JSON 配置文件:
{ "cachedir": "/var/local/imposm", "mapping": "mapping.json", "connection": "postgis://user:password@localhost:port/database" }
要使用该配置:
imposm import -config config.json [args...]
更多选项请参见:
imposm import -help
注意:由于 Go 的 TLS 实现中缺乏重新协商支持,因此默认情况下禁用 TLS/SSL 支持。您可以通过将PGSSLMODE
环境变量或sslmode
连接选项设置为require
或verify-full
来重新启用加密,例如: -connect postgis://host/dbname?sslmode=require
。您需要在服务器上禁用重新协商支持,以防止较大导入时出现连接错误。您可以通过在 PostgreSQL 服务器配置中将ssl_renegotiation_limit
设置为 0 来实现此目的。
最新文档可以在这里找到:http://imposm.org/docs/imposm3/latest/
Google 网上论坛上有一个邮件列表,可以解答所有问题。您可以通过发送电子邮件至以下地址进行订阅: [email protected]
如需商业支持,请联系 Omniscale。
源代码位于:https://github.com/omniscale/imposm3/
您可以在以下位置报告任何问题:https://github.com/omniscale/imposm3/issues
Imposm 在 Apache License 2.0 下作为开源发布。请参阅许可证。
作为源代码包含的所有依赖项均在 BSD-ish 许可证下发布。请参阅 LICENSE.dep。
除 GEOS 包外,二进制版本中包含的所有依赖项均在 BSD-ish 许可证下发布。 GEOS 包以 LGPL3 形式发布并动态链接。请参阅 LICENSE.bin。
运行所有单元测试:
make test-unit
有导入和更新OSM数据并验证数据库内容的系统测试。您需要osmosis
来创建测试 PBF 文件。有一个 Makefile 可以根据需要创建所有测试文件,然后运行测试本身。
make test
调用make test-system
跳过单元测试。
警告:它使用您的本地 PostgreSQL 数据库( imposm_test_import
、 imposm_test_production
和imposm_test_backup
架构)。使用标准PGDATABASE
、 PGHOST
等环境变量更改数据库。