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 สำหรับการนำเข้าเมือง/รัฐ/ประเทศ
การปรับใช้ที่ง่ายดาย: ไบนารีเดี่ยวที่มีการพึ่งพารันไทม์เฉพาะกับ libs ทั่วไป (GEOS และ LevelDB)
การอัปเดต OSM อัตโนมัติ: รวมบริการพื้นหลัง ( imposm run
) ที่ดาวน์โหลดและนำเข้าการเปลี่ยนแปลง OSM ล่าสุดโดยอัตโนมัติ
ความสัมพันธ์ของเส้นทาง: นำเข้าความสัมพันธ์ทุกประเภทรวมถึงเส้นทางด้วย
รองรับเนมสเปซตาราง (สคีมา PostgreSQL)
Imposm ใช้ประโยชน์จากคอร์ CPU ที่มีอยู่ทั้งหมดอย่างเต็มที่
Imposm ใช้การแทรกจำนวนมากใน PostgreSQL พร้อม COPY FROM
Imposm ใช้แคชระดับกลางที่มีประสิทธิภาพเพื่อลดภาระ IO ในระหว่างวิธีการและการสร้างความสัมพันธ์
การนำเข้าในโหมดต่างบนเซิร์ฟเวอร์ Hetzner AX102 (AMD Ryzen 9 7950X3D, RAM 256GB และพื้นที่เก็บข้อมูล NVMe) ของดาวเคราะห์ PBF ขนาด 78GB (29-01-2567-01-29) พร้อมด้วยตารางทั่วไปและดัชนีเชิงพื้นที่ ฯลฯ จะใช้เวลาประมาณ 7:30 ชม. นี่เป็นการนำเข้าที่พร้อมสำหรับการอัปเดตอย่างละเอียด โหมด non-diff จะเร็วขึ้นอีก
ขอแนะนำให้ขนาดหน่วยความจำของเซิร์ฟเวอร์มีขนาดประมาณสองเท่าของขนาดไฟล์แยก PBF ที่คุณกำลังนำเข้า ตัวอย่างเช่น: คุณควรมี RAM 192GB ขึ้นไปสำหรับไฟล์ Planet ขนาด 78GB ปัจจุบัน (ปี 2024) และ 8GB สำหรับสารสกัดระดับภูมิภาคขนาด 4GB เป็นต้น การนำเข้าด้วยดิสก์แบบหมุนจะใช้เวลานานกว่ามากและไม่แนะนำ
มีการเปิดตัวไบนารี่ที่ 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 เพื่อสร้างหรือติดตั้ง imposm ได้โดยตรงด้วย go build ./cmd/imposm
อย่างไรก็ตาม สิ่งนี้จะไม่ตั้งค่าข้อมูลเวอร์ชัน
Go คอมไพล์เป็นไบนารีแบบคงที่ ดังนั้น Imposm จึงไม่มีการพึ่งพารันไทม์สำหรับ Go เพียงคัดลอกไบนารี่ imposm
ไปยังเซิร์ฟเวอร์ของคุณเพื่อปรับใช้ ไลบรารี C/C++ ที่ระบุไว้ข้างต้นยังคงจำเป็นต้องใช้
ดูเพิ่มเติม packaging.sh
สำหรับคำแนะนำเกี่ยวกับวิธีสร้างแพ็คเกจไบนารีสำหรับ Linux
เพื่อประสิทธิภาพที่ดีขึ้น คุณควรใช้ LevelDB >1.21 คุณยังคงสามารถสร้างด้วยการสนับสนุน 1.21 ด้วย go build -tags="ldbpre121"
หรือ LEVELDB_PRE_121=1 make build
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
หมายเหตุ: การสนับสนุน TLS/SSL ถูกปิดใช้งานโดยค่าเริ่มต้น เนื่องจากไม่มีการสนับสนุนการเจรจาใหม่ในการใช้งาน TLS ของ Go คุณสามารถเปิดใช้งานการเข้ารหัสอีกครั้งได้โดยการตั้งค่าตัวแปรสภาพแวดล้อม PGSSLMODE
หรือตัวเลือกการเชื่อมต่อ sslmode
เพื่อ require
หรือ verify-full
เช่น: -connect postgis://host/dbname?sslmode=require
คุณจะต้องปิดการใช้งานการสนับสนุนการเจรจาต่อรองใหม่บนเซิร์ฟเวอร์ของคุณเพื่อป้องกันข้อผิดพลาดในการเชื่อมต่อในการนำเข้าที่มีขนาดใหญ่กว่า คุณสามารถทำได้โดยตั้ง ssl_renegotiation_limit
เป็น 0 ในการกำหนดค่าเซิร์ฟเวอร์ PostgreSQL ของคุณ
สามารถดูเอกสารล่าสุดได้ที่นี่: http://imposm.org/docs/imposm3/latest/
มีรายชื่ออีเมลที่ Google Groups สำหรับคำถามทั้งหมด คุณสามารถสมัครสมาชิกได้โดยส่งอีเมลไปที่: [email protected]
สำหรับการสนับสนุนเชิงพาณิชย์ โปรดติดต่อ Omniscale
มีซอร์สโค้ดอยู่ที่: https://github.com/omniscale/imposm3/
คุณสามารถรายงานปัญหาใดๆ ได้ที่: https://github.com/omniscale/imposm3/issues
Imposm เปิดตัวเป็นโอเพ่นซอร์สภายใต้ Apache License 2.0 ดูใบอนุญาต
การขึ้นต่อกันทั้งหมดที่รวมอยู่ในซอร์สโค้ดนั้นได้รับการเผยแพร่ภายใต้ใบอนุญาต BSD-ish ดู LICENSE.dep
การขึ้นต่อกันทั้งหมดที่รวมอยู่ในการเผยแพร่ไบนารี่ได้รับการเผยแพร่ภายใต้ใบอนุญาต BSD-ish ยกเว้นแพ็คเกจ GEOS แพ็คเกจ 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
schema) เปลี่ยนฐานข้อมูลด้วยตัวแปรสภาพแวดล้อมมาตรฐาน PGDATABASE
, PGHOST
ฯลฯ