PostGIS เป็นส่วนขยายของฐานข้อมูล PostgreSQL ที่เพิ่มการรองรับออบเจ็กต์ข้อมูลทางภูมิศาสตร์ ซึ่งช่วยให้เราใช้ฐานข้อมูล PostgreSQL เพื่อจัดเก็บและสืบค้นข้อมูลเชิงพื้นที่ ดังที่คุณเดาได้ การรวม PostGIS และ Docker เข้าด้วยกันจะทำให้มีวิธีการจัดการข้อมูลเชิงพื้นที่ที่มีประสิทธิภาพและกว้างขวาง
ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีตั้งค่าอินสแตนซ์ PostGIS อย่างรวดเร็วภายในคอนเทนเนอร์ Docker นอกจากนี้ เราจะกล่าวถึงพื้นฐานบางอย่างของ PostGIS และเรียนรู้วิธีโหลดข้อมูลเชิงพื้นที่และดำเนินการสืบค้นพื้นฐานบางอย่างโดยใช้คอนเทนเนอร์
ความต้องการ:
หากต้องการปฏิบัติตามบทช่วยสอนนี้ ตรวจสอบให้แน่ใจว่าคุณมีสิ่งต่อไปนี้:
- ติดตั้ง Docker Engine บนระบบของคุณ คุณสามารถตรวจสอบบทช่วยสอนของเราเกี่ยวกับวิธีติดตั้ง Docker บนระบบเป้าหมายของคุณ
- ความรู้พื้นฐานเกี่ยวกับ PostgreSQL และข้อมูลเชิงพื้นที่
เมื่อมีคุณสมบัติตรงตามข้อกำหนดแล้ว เราก็สามารถดำเนินการสอนต่อได้
เรียกใช้ PostGIS ใน Docker
ให้เราดำเนินการตั้งค่าคอนเทนเนอร์ PostGIS ต่อไป เราเริ่มต้นด้วยการดึงคอนเทนเนอร์ PostGIS จาก Docker Hub ด้วยคำสั่งต่อไปนี้:
$ นักเทียบท่าดึง postgis/postgis
เมื่อเราดาวน์โหลดอิมเมจแล้ว เราก็สามารถรันคอนเทนเนอร์โดยใช้อิมเมจดังที่แสดงในคำสั่งต่อไปนี้:
$ docker run --name postgis-server -e POSTGRES_PASSWORD =password -d -p 5432:5432 postgis/postgis
ในคำสั่งที่กำหนด เราระบุพารามิเตอร์ต่อไปนี้:
- –ชื่อ – ช่วยให้เราสามารถระบุชื่อของคอนเทนเนอร์ได้
- -e – ช่วยให้เราสามารถตั้งรหัสผ่าน PostgreSQL เป็นตัวแปรสภาพแวดล้อมได้ นี่คือรหัสผ่านที่ใช้สำหรับผู้ใช้ postgres
- -d – สิ่งนี้จะบอก Docker ให้เรียกใช้คอนเทนเนอร์ในพื้นหลังหรือโหมดแยกออก
- -p 5432:5432 – สิ่งนี้ช่วยให้เราสามารถแมปพอร์ต 5432 ภายในคอนเทนเนอร์กับโฮสต์บนพอร์ต 5432
เพื่อตรวจสอบว่าคอนเทนเนอร์กำลังทำงานอยู่ ให้ใช้คำสั่งต่อไปนี้:
$ นักเทียบท่า ปลคุณควรเห็นคอนเทนเนอร์ PostGIS อยู่ในรายการ
โหลดข้อมูลเชิงพื้นที่ใน PostGIS
ตอนนี้เมื่อเราใช้งานคอนเทนเนอร์ PostGIS แล้ว เราก็สามารถโหลดข้อมูลเชิงพื้นที่โดยใช้เครื่องมือและรูปแบบต่างๆ เช่น GeoJSON, CSV เป็นต้น
ในกรณีนี้ เราใช้ Shapefile ดังแสดงในคำสั่งต่อไปนี้:
$ mkdir -p ~/data$cd ~/data
รับ https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_countries.zip
$ คลายซิป ne_110m_admin_0_countries.zip
ในคำสั่งที่กำหนด เราเริ่มต้นด้วยการสร้างไดเร็กทอรีเพื่อเก็บข้อมูลที่เราต้องการโหลด จากนั้นเราจะดาวน์โหลดข้อมูลทางภูมิศาสตร์จากลิงก์ที่ระบุและแยกลงในไดเร็กทอรี
ขั้นตอนต่อไปคือการโหลดข้อมูลลงในฐานข้อมูล เราเริ่มต้นด้วยการเชื่อมต่อกับฐานข้อมูล PostgreSQL โดยใช้คำสั่งต่อไปนี้:
$ นักเทียบท่า exec -it postgis-เซิร์ฟเวอร์ psql -U postgres -d postgresหากได้รับแจ้งให้ใส่รหัสผ่าน ให้ระบุรหัสผ่านที่คุณกำหนดค่าไว้เมื่อเรียกใช้คอนเทนเนอร์ สิ่งนี้ควรตรวจสอบสิทธิ์คุณและวางคุณลงในเชลล์ PostgreSQL
เมื่อเชื่อมต่อกับฐานข้อมูลแล้ว เราสามารถใช้ยูทิลิตี “shp2pgsql” เพื่อนำเข้าข้อมูลจาก Shapefiles ที่เราแตกออกมาในขั้นตอนก่อนหน้านี้
postgres=# shp2pgsql -I -s 4326 ne_110m_admin_0_ประเทศ | psql -U postgres -d postgresในคำสั่งก่อนหน้านี้ เราใช้ตัวเลือก -I เพื่อสร้างดัชนีเชิงพื้นที่เพื่อการสืบค้นข้อมูลเชิงพื้นที่ที่รวดเร็วยิ่งขึ้น นอกจากนี้เรายังระบุระบบพิกัดเป็น 4326 โดยใช้พารามิเตอร์ -s EPSG:4326 เป็นระบบสถานะพิกัดมาตรฐานสำหรับ WGS 84
ข้อมูลแบบสอบถาม PostGIS
เมื่อเราโหลดข้อมูลแล้ว เราสามารถออกจากยูทิลิตี้ PSQL ได้โดยการรันคำสั่ง “\q” หรือออก
ต่อไป เพื่อตรวจสอบว่าเราได้โหลดข้อมูลแล้ว เราสามารถเชื่อมต่อกับฐานข้อมูลอีกครั้งได้โดยการรันคำสั่งต่อไปนี้:
$ นักเทียบท่า exec -it postgis-container psql -U postgres -d postgresจากนั้น คุณสามารถเรียกใช้การสืบค้นเชิงพื้นที่พื้นฐานเพื่อยืนยันว่าคุณมีข้อมูลที่เก็บไว้
บทสรุป
ในบทช่วยสอนนี้ คุณได้เรียนรู้วิธีเรียกใช้เซิร์ฟเวอร์ PostGIS เป็นคอนเทนเนอร์ Docker และโหลดข้อมูลลงในฐานข้อมูล