Imposm adalah importir data OpenStreetMap. Ia membaca file PBF dan mengimpor data ke PostgreSQL/PostGIS. Itu juga dapat secara otomatis memperbarui database dengan perubahan terbaru dari OSM.
Hal ini dirancang untuk membuat database yang dioptimalkan untuk rendering (yaitu menghasilkan ubin atau untuk layanan WMS).
Imposm >=3 ditulis di Go dan merupakan penulisan ulang lengkap dari implementasi Python sebelumnya. Konfigurasi/pemetaan dan file cache tidak kompatibel dengan Imposm 2, tetapi keduanya memiliki arsitektur yang serupa.
Pengembangan Imposm disponsori oleh Omniscale.
Imposm sedang digunakan dalam produksi oleh penulis. Ini dipelihara secara aktif, dengan fokus pada penyelesaian ketidakcocokan di masa depan dengan dependensi seperti PostGIS. Namun, tidak ada kapasitas untuk dukungan pengguna akhir, dan tidak ada fitur baru yang akan dikembangkan di luar cakupan yang sudah ada.
Kinerja tinggi: Paralel dari bawah ke atas. Ini mendistribusikan penguraian dan pemrosesan ke semua inti CPU yang tersedia.
Skema database khusus: Membuat tabel untuk tipe data berbeda. Hal ini memungkinkan penataan gaya yang lebih mudah dan kinerja yang lebih baik untuk rendering di WMS atau layanan ubin.
Menyatukan nilai: Misalnya, nilai boolean 1
, on
, true
dan yes
semuanya menjadi TRUE
.
Filter berdasarkan tag dan nilai: Hanya impor data yang akan Anda render/gunakan.
Cache node yang efisien: Penting untuk menyimpan semua node untuk membangun cara dan hubungan. Imposm menggunakan database nilai kunci berbasis file untuk menyimpan data ini dalam cache.
Tabel yang digeneralisasi: Secara otomatis membuat tabel dengan resolusi spasial lebih rendah, cocok untuk merender jaringan jalan besar dalam resolusi rendah.
Batasan pada poligon: Batasi geometri yang diimpor ke poligon dari GeoJSON, untuk impor kota/negara bagian/negara.
Penerapan yang mudah: Biner tunggal dengan hanya ketergantungan runtime ke lib umum (GEOS dan LevelDB).
Pembaruan OSM otomatis: Termasuk layanan latar belakang ( imposm run
) yang secara otomatis mengunduh dan mengimpor perubahan OSM terbaru.
Relasi rute: Impor semua tipe relasi termasuk rute.
Dukungan untuk namespace tabel (skema PostgreSQL)
COPY FROM
Impor dalam mode diff pada server Hetzner AX102 (AMD Ryzen 9 7950X3D, RAM 256 GB, dan penyimpanan NVMe) dari planet PBF 78 GB (29-01-2024) dengan tabel umum dan indeks spasial, dll. membutuhkan waktu sekitar 7:30 jam. Ini untuk impor yang siap untuk diperbarui secara cermat. Mode non-diff bahkan lebih cepat.
Disarankan agar ukuran memori server kira-kira dua kali ukuran ekstrak PBF yang Anda impor. Misalnya: Anda harus memiliki RAM 192GB atau lebih untuk file planet 78GB saat ini (2024), 8GB untuk ekstrak regional 4GB, dll. Impor dengan disk yang berputar akan memakan waktu jauh lebih lama dan tidak disarankan.
Rilis biner tersedia di GitHub.
Versi ini ditujukan untuk Linux x86 64bit dan tidak memerlukan ketergantungan lebih lanjut. Unduh, hapus tar, dan mulai imposm
. Biner kompatibel dengan Debian 10 dan distribusi lain mulai tahun 2022 atau lebih baru. Anda dapat membangun dari sumber jika Anda perlu mendukung distribusi lama.
Ada beberapa ketergantungan:
Anda perlu Pergi. Disarankan 1,17 atau lebih tinggi.
Dependensi lainnya adalah libleveldb dan libgeos. Imposm telah diuji dengan versi terbaru perpustakaan ini, namun Anda mungkin berhasil dengan versi yang lebih lama. GEOS >=3.2 direkomendasikan karena menjadi jauh lebih kuat ketika menangani geometri yang tidak valid.
Cara tercepat untuk menginstal Imposm adalah dengan menelepon:
go install github.com/omniscale/imposm3/cmd/imposm@latest
Ini akan mengunduh, mengkompilasi dan menginstal Imposm ke ~/go/bin/imposm
. Anda dapat mengubah lokasi dengan mengatur lingkungan GOBIN
.
Cara instalasi yang disarankan adalah:
git clone https://github.com/omniscale/imposm3.git
cd imposm3
make build
make build
akan membangun Imposm ke jalur lokal Anda dan itu akan menambahkan informasi versi ke biner Anda.
Anda juga dapat langsung menggunakan go to build atau install imposm dengan go build ./cmd/imposm
. Namun, ini tidak akan mengatur informasi versi.
Go dikompilasi ke biner statis sehingga Imposm tidak memiliki ketergantungan runtime pada Go. Cukup salin biner imposm
ke server Anda untuk diterapkan. Pustaka C/C++ yang tercantum di atas masih diperlukan.
Lihat juga packaging.sh
untuk petunjuk tentang cara membuat paket biner untuk Linux.
Untuk kinerja yang lebih baik Anda harus menggunakan LevelDB >1.21. Anda masih dapat membangun dengan dukungan untuk 1.21 dengan go build -tags="ldbpre121"
atau LEVELDB_PRE_121=1 make build
.
imposm
memiliki banyak sub-perintah. Gunakan imposm import
untuk impor dasar.
Untuk impor sederhana:
imposm import -connection postgis://user:password@host/database
-mapping mapping.json -read /path/to/osm.pbf -write
Anda memerlukan file JSON dengan pemetaan database target. Lihat example-mapping.json
untuk mendapatkan gambaran tentang apa yang mungkin dilakukan dengan pemetaan.
Imposm membuat semua tabel baru di dalam skema tabel import
. Jadi Anda akan memiliki import.osm_roads
dll. Anda dapat mengubah tabel ke skema public
:
imposm import -connection postgis://user:passwd@host/database
-mapping mapping.json -deployproduction
Anda dapat menulis beberapa opsi ke dalam file konfigurasi JSON:
{
"cachedir": "/var/local/imposm",
"mapping": "mapping.json",
"connection": "postgis://user:password@localhost:port/database"
}
Untuk menggunakan konfigurasi itu:
imposm import -config config.json [args...]
Untuk opsi lebih lanjut, lihat:
imposm import -help
Catatan: Dukungan TLS/SSL dinonaktifkan secara default karena kurangnya dukungan negosiasi ulang dalam implementasi TLS Go. Anda dapat mengaktifkan kembali enkripsi dengan mengatur variabel lingkungan PGSSLMODE
atau opsi koneksi sslmode
ke require
atau verify-full
, misalnya: -connect postgis://host/dbname?sslmode=require
. Anda perlu menonaktifkan dukungan negosiasi ulang di server Anda untuk mencegah kesalahan koneksi pada impor yang lebih besar. Anda dapat melakukan ini dengan menyetel ssl_renegotiation_limit
ke 0 di konfigurasi server PostgreSQL Anda.
Dokumentasi terbaru dapat ditemukan di sini: http://imposm.org/docs/imposm3/latest/
Ada milis di Google Grup untuk semua pertanyaan. Anda dapat berlangganan dengan mengirimkan email ke: [email protected]
Untuk dukungan komersial, hubungi Omniscale.
Kode sumber tersedia di: https://github.com/omniscale/imposm3/
Anda dapat melaporkan masalah apa pun di: https://github.com/omniscale/imposm3/issues
Imposm dirilis sebagai open source di bawah Lisensi Apache 2.0. Lihat LISENSI.
Semua dependensi yang disertakan sebagai kode sumber dirilis di bawah lisensi BSD-ish. Lihat LISENSI.dep.
Semua dependensi yang termasuk dalam rilis biner dirilis di bawah lisensi BSD kecuali paket GEOS. Paket GEOS dirilis sebagai LGPL3 dan dihubungkan secara dinamis. Lihat LISENSI.bin.
Untuk menjalankan semua pengujian unit:
make test-unit
Ada pengujian sistem yang mengimpor dan memperbarui data OSM dan memverifikasi konten database. Anda memerlukan osmosis
untuk membuat file uji PBF. Ada Makefile yang membuat semua file pengujian jika perlu dan kemudian menjalankan pengujian itu sendiri.
make test
Panggil make test-system
untuk melewati pengujian unit.
PERINGATAN: Ini menggunakan database PostgreSQL lokal Anda ( skema imposm_test_import
, imposm_test_production
dan imposm_test_backup
). Ubah database dengan variabel lingkungan PGDATABASE
, PGHOST
, dll.