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
表模式中建立所有新表。 public
,您將擁有import.osm_roads
等。
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
等環境變數變更資料庫。