Imposm ist ein Importer für OpenStreetMap-Daten. Es liest PBF-Dateien und importiert die Daten in PostgreSQL/PostGIS. Es kann die Datenbank auch automatisch mit den neuesten Änderungen von OSM aktualisieren.
Es dient zum Erstellen von Datenbanken, die für das Rendern optimiert sind (z. B. das Generieren von Kacheln oder für WMS-Dienste).
Imposm >=3 ist in Go geschrieben und eine vollständige Neufassung der vorherigen Python-Implementierung. Konfigurationen/Zuordnungen und Cache-Dateien sind nicht mit Imposm 2 kompatibel, aber sie haben eine ähnliche Architektur.
Die Entwicklung von Imposm wird von Omniscale gesponsert.
Imposm wird von den Autoren in der Produktion eingesetzt. Es wird aktiv gepflegt, wobei der Schwerpunkt auf der Lösung künftiger Inkompatibilitäten mit Abhängigkeiten wie PostGIS liegt. Allerdings gibt es keine Kapazitäten für den Endbenutzer-Support und es werden keine neuen Funktionen über den bestehenden Umfang hinaus entwickelt.
Hohe Leistung: Parallel von Grund auf. Es verteilt Parsing und Verarbeitung auf alle verfügbaren CPU-Kerne.
Benutzerdefinierte Datenbankschemata: Erstellt Tabellen für verschiedene Datentypen. Dies ermöglicht ein einfacheres Styling und eine bessere Leistung beim Rendern in WMS- oder Kacheldiensten.
Werte vereinheitlichen: Beispielsweise werden die booleschen Werte 1
, on
, true
und yes
alle zu TRUE
.
Nach Tags und Werten filtern: Importieren Sie nur Daten, die Sie rendern/verwenden möchten.
Effizienter Knoten-Cache: Es ist notwendig, alle Knoten zu speichern, um Wege und Beziehungen aufzubauen. Imposm verwendet eine dateibasierte Schlüsselwertdatenbank, um diese Daten zwischenzuspeichern.
Verallgemeinerte Tabellen: Erstellt automatisch Tabellen mit niedrigeren räumlichen Auflösungen, ideal für die Darstellung großer Straßennetze in niedrigen Auflösungen.
Auf Polygone beschränken: Beschränken Sie importierte Geometrien auf Polygone aus GeoJSON für Stadt-/Bundesstaat-/Landimporte.
Einfache Bereitstellung: Einzelne Binärdatei mit nur Laufzeitabhängigkeiten zu allgemeinen Bibliotheken (GEOS und LevelDB).
Automatische OSM-Updates: Beinhaltet einen Hintergrunddienst ( imposm run
), der automatisch die neuesten OSM-Änderungen herunterlädt und importiert.
Routenbeziehungen: Importieren Sie alle Beziehungstypen einschließlich Routen.
Unterstützung für Tabellen-Namespace (PostgreSQL-Schema)
COPY FROM
Ein Import im Diff-Modus auf einem Hetzner AX102-Server (AMD Ryzen 9 7950X3D, 256 GB RAM und NVMe-Speicher) eines 78 GB großen Planeten-PBF (29.01.2024) mit generalisierten Tabellen und räumlichen Indizes usw. dauert etwa 7:30 Stunden. Dies ist für einen Import gedacht, der für minutiöse Aktualisierungen bereit ist. Der Non-Diff-Modus ist noch schneller.
Es wird empfohlen, dass die Speichergröße des Servers etwa doppelt so groß ist wie die Größe des PBF-Extrakts, den Sie importieren. Zum Beispiel: Sie sollten über 192 GB RAM oder mehr für eine aktuelle (2024) 78 GB große Planetendatei, 8 GB für einen 4 GB großen regionalen Extrakt usw. verfügen. Importe mit rotierenden Festplatten dauern deutlich länger und werden nicht empfohlen.
Binärversionen sind auf GitHub verfügbar.
Diese Builds sind für x86 64bit Linux und erfordern keine weiteren Abhängigkeiten. imposm
herunterladen, entpacken und starten. Binärdateien sind mit Debian 10 und anderen Distributionen ab 2022 oder neuer kompatibel. Sie können aus dem Quellcode erstellen, wenn Sie ältere Distributionen unterstützen müssen.
Es gibt einige Abhängigkeiten:
Du brauchst Los. 1,17 oder höher wird empfohlen.
Weitere Abhängigkeiten sind libleveldb und libgeos. Imposm wurde mit neueren Versionen dieser Bibliotheken getestet, mit älteren Versionen könnten Sie jedoch erfolgreich sein. GEOS >=3.2 wird empfohlen, da es bei der Verarbeitung ungültiger Geometrien wesentlich robuster geworden ist.
Der schnellste Weg, Imposm zu installieren, ist folgender Aufruf:
go install github.com/omniscale/imposm3/cmd/imposm@latest
Dadurch wird Imposm heruntergeladen, kompiliert und in ~/go/bin/imposm
installiert. Sie können den Speicherort ändern, indem Sie die GOBIN
Umgebung festlegen.
Die empfohlene Art der Installation ist:
git clone https://github.com/omniscale/imposm3.git
cd imposm3
make build
make build
baut Imposm in Ihren lokalen Pfad ein und fügt Versionsinformationen zu Ihrer Binärdatei hinzu.
Sie können go to build auch direkt verwenden oder imposm mit go build ./cmd/imposm
installieren. Dadurch werden jedoch nicht die Versionsinformationen festgelegt.
Go kompiliert zu statischen Binärdateien, sodass Imposm keine Laufzeitabhängigkeiten von Go hat. Kopieren Sie einfach die imposm
Binärdatei zur Bereitstellung auf Ihren Server. Die oben aufgeführten C/C++-Bibliotheken sind jedoch weiterhin erforderlich.
Siehe auch packaging.sh
für Anweisungen zum Erstellen von Binärpaketen für Linux.
Für eine bessere Leistung sollten Sie LevelDB >1.21 verwenden. Sie können mit go build -tags="ldbpre121"
oder LEVELDB_PRE_121=1 make build
weiterhin mit Unterstützung für 1.21 erstellen.
imposm
hat mehrere Unterbefehle. Verwenden Sie imposm import
für einfache Importe.
Für einen einfachen Import:
imposm import -connection postgis://user:password@host/database
-mapping mapping.json -read /path/to/osm.pbf -write
Sie benötigen eine JSON-Datei mit der Zieldatenbankzuordnung. Sehen Sie sich example-mapping.json
an, um eine Vorstellung davon zu bekommen, was mit dem Mapping möglich ist.
Imposm erstellt alle neuen Tabellen innerhalb des import
. Sie haben also import.osm_roads
usw. Sie können die Tabellen in das public
Schema ändern:
imposm import -connection postgis://user:passwd@host/database
-mapping mapping.json -deployproduction
Sie können einige Optionen in eine JSON-Konfigurationsdatei schreiben:
{
"cachedir": "/var/local/imposm",
"mapping": "mapping.json",
"connection": "postgis://user:password@localhost:port/database"
}
So verwenden Sie diese Konfiguration:
imposm import -config config.json [args...]
Weitere Optionen finden Sie unter:
imposm import -help
Hinweis: Die TLS/SSL-Unterstützung ist aufgrund der fehlenden Neuverhandlungsunterstützung in der TLS-Implementierung von Go standardmäßig deaktiviert. Sie können die Verschlüsselung wieder aktivieren, indem Sie die Umgebungsvariable PGSSLMODE
oder die Verbindungsoption sslmode
auf require
oder verify-full
setzen, z. B.: -connect postgis://host/dbname?sslmode=require
. Sie müssen die Neuverhandlungsunterstützung auf Ihrem Server deaktivieren, um Verbindungsfehler bei größeren Importen zu verhindern. Sie können dies tun, indem Sie ssl_renegotiation_limit
in Ihrer PostgreSQL-Serverkonfiguration auf 0 setzen.
Die neueste Dokumentation finden Sie hier: http://imposm.org/docs/imposm3/latest/
Für alle Fragen gibt es bei Google Groups eine Mailingliste. Sie können sich anmelden, indem Sie eine E-Mail an [email protected]
senden
Für kommerziellen Support wenden Sie sich an Omniscale.
Der Quellcode ist verfügbar unter: https://github.com/omniscale/imposm3/
Sie können etwaige Probleme unter https://github.com/omniscale/imposm3/issues melden
Imposm wird als Open Source unter der Apache-Lizenz 2.0 veröffentlicht. Siehe LIZENZ.
Alle als Quellcode enthaltenen Abhängigkeiten werden unter einer BSD-ähnlichen Lizenz veröffentlicht. Siehe LICENSE.dep.
Alle in Binärversionen enthaltenen Abhängigkeiten werden unter einer BSD-ähnlichen Lizenz veröffentlicht, mit Ausnahme des GEOS-Pakets. Das GEOS-Paket ist als LGPL3 veröffentlicht und dynamisch verknüpft. Siehe LICENSE.bin.
So führen Sie alle Komponententests aus:
make test-unit
Es gibt Systemtests, die OSM-Daten importieren und aktualisieren und den Datenbankinhalt überprüfen. Sie benötigen osmosis
um die Test-PBF-Dateien zu erstellen. Es gibt ein Makefile, das bei Bedarf alle Testdateien erstellt und dann den Test selbst ausführt.
make test
Rufen Sie make test-system
auf, um die Unit-Tests zu überspringen.
WARNUNG: Es verwendet Ihre lokale PostgreSQL-Datenbank (Schema imposm_test_import
, imposm_test_production
und imposm_test_backup
). Ändern Sie die Datenbank mit den Standardumgebungsvariablen PGDATABASE
, PGHOST
usw.