PostGIS คืออะไร: ฐานข้อมูล Spatial สำหรับงาน GIS และสำรวจ
ถ้าคุณเคยทำงาน GIS มาสักพัก คงเคยเจอปัญหาแบบนี้: ข้อมูล Shapefile กระจายอยู่หลายโฟลเดอร์ แชร์กันทำงานยาก ค้นหาข้อมูลซับซ้อนช้า หรืออยากวิเคราะห์ข้อมูล Spatial ร่วมกับข้อมูลตารางอื่นในระบบฐานข้อมูลเดียวกัน — PostGIS คือคำตอบที่นักวิเคราะห์ GIS และวิศวกรสำรวจมืออาชีพทั่วโลกเลือกใช้ครับ
PostGIS คืออะไร?

PostGIS คือ Extension (ส่วนขยาย) ของระบบจัดการฐานข้อมูล PostgreSQL ที่เพิ่มความสามารถในการจัดเก็บ จัดการ และวิเคราะห์ ข้อมูลเชิงพื้นที่ (Spatial Data) เข้าไปในฐานข้อมูลเชิงสัมพันธ์ (Relational Database) ปกติ
พูดง่ายๆ คือ ถ้า PostgreSQL เป็นกล่องเก็บข้อมูลทั่วไป — PostGIS คือการเพิ่มตู้แผนที่และเครื่องมือวัดระยะเข้าไปในกล่องเดียวกันนั้นครับ
PostGIS รองรับข้อมูลประเภทใดบ้าง?
PostGIS รองรับ Geometry Types มาตรฐาน OGC (Open Geospatial Consortium) ครบทุกประเภท:
- Point — จุดพิกัด เช่น ตำแหน่งหมุดสำรวจ, จุดเก็บข้อมูล GPS
- LineString — เส้น เช่น ถนน, แนวท่อ, เส้นทางสำรวจ
- Polygon — รูปปิด เช่น แปลงที่ดิน, ขอบเขตโครงการ, เขตชุมชน
- MultiPoint / MultiLineString / MultiPolygon — ชุดของ Geometry ข้างต้น
- GeometryCollection — การรวมกันของหลาย Geometry Type
- Geography — เหมือน Geometry แต่คำนวณบนทรงกลม (Ellipsoid) ให้ความถูกต้องสูงกว่าสำหรับพื้นที่ขนาดใหญ่
นอกจากนี้ PostGIS ยังรองรับ Raster สำหรับเก็บข้อมูลภาพแผนที่ (GeoTIFF, DEM) และ 3D Geometry (Z coordinate) สำหรับงาน LiDAR และ 3D Modeling
ประวัติย่อ
PostGIS เริ่มพัฒนาโดยบริษัท Refractions Research ในแคนาดาตั้งแต่ปี 2001 ปัจจุบันอยู่ภายใต้การพัฒนาของ OSGeo (Open Source Geospatial Foundation) ซึ่งเป็นองค์กรเดียวกับที่ดูแล QGIS, GDAL และเครื่องมือ GIS โอเพ่นซอร์สชั้นนำอื่นๆ
ทำไมต้องใช้ PostGIS แทน Shapefile หรือ GeoJSON?

ก่อนตัดสินใจใช้ PostGIS หลายคนตั้งคำถามว่า "Shapefile ก็ใช้ได้อยู่แล้ว จะเปลี่ยนทำไม?" ลองมาเปรียบเทียบให้เห็นชัดขึ้นครับ
ข้อดีของ PostGIS เมื่อเทียบกับไฟล์ GIS ทั่วไป
| หัวข้อ | Shapefile / GeoJSON | PostGIS |
|---|---|---|
| **ขนาดข้อมูล** | ช้าลงเมื่อข้อมูลใหญ่ | รองรับ Billion rows |
| **การค้นหา** | อ่านทั้งไฟล์ | Index เชิงพื้นที่ (Spatial Index) |
| **หลายผู้ใช้** | ไฟล์ติด lock | รองรับ Concurrent Users |
| **Join ข้อมูล** | ยุ่งยาก | SQL JOIN ได้ทันที |
| **Backup** | Copy file เอง | pg_dump / Point-in-Time Recovery |
| **Version Control** | ไม่มี | Transaction-safe |
| **API Integration** | ต้องอ่านไฟล์ก่อน | Connect ตรงจาก App/API |
สรุปคือ ถ้าข้อมูลมีขนาดใหญ่ มีหลาย User ใช้งานพร้อมกัน หรือต้องการ Query ที่ซับซ้อน — PostGIS เหนือกว่า Shapefile อย่างเห็นได้ชัดครับ
การติดตั้ง PostgreSQL + PostGIS

บน Ubuntu / Debian
# ติดตั้ง PostgreSQL
sudo apt update
sudo apt install postgresql postgresql-contrib
# ติดตั้ง PostGIS extension
sudo apt install postgis postgresql-16-postgis-3
# เริ่ม Service
sudo systemctl start postgresql
sudo systemctl enable postgresql
บน macOS (ด้วย Homebrew)
brew install postgresql@16
brew install postgis
# เริ่ม Service
brew services start postgresql@16
บน Windows
วิธีที่ง่ายที่สุดคือใช้ EnterpriseDB PostgreSQL Installer จาก postgresql.org ซึ่งมี Stack Builder ให้เลือกติดตั้ง PostGIS ได้ทันทีหลัง PostgreSQL
เปิดใช้งาน PostGIS ใน Database
หลังติดตั้งแล้ว ต้องเปิดใช้งาน Extension ใน Database ที่ต้องการ:
-- สร้าง Database ใหม่
CREATE DATABASE gis_db;
-- เชื่อมต่อเข้า Database
\c gis_db
-- เปิดใช้งาน PostGIS
CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology; -- optional: สำหรับงาน Topology
-- ตรวจสอบว่าติดตั้งสำเร็จ
SELECT PostGIS_Version();
-- ผลลัพธ์: 3.4.0 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
คำสั่ง SQL เชิงพื้นที่ที่ใช้บ่อยในงาน GIS

PostGIS มีฟังก์ชัน Spatial SQL มากกว่า 1,000 ฟังก์ชัน แต่ในงานจริงมักใช้ฟังก์ชันหลักๆ ดังนี้:
การสร้างตารางข้อมูล Spatial
-- สร้างตารางเก็บข้อมูลหมุดสำรวจ
CREATE TABLE survey_points (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
survey_date DATE,
geom GEOMETRY(Point, 4326) -- WGS84
);
-- เพิ่ม Spatial Index เพื่อเพิ่มความเร็วการค้นหา
CREATE INDEX idx_survey_points_geom ON survey_points USING GIST(geom);
-- เพิ่มข้อมูลตัวอย่าง (ละติจูด/ลองจิจูด)
INSERT INTO survey_points (name, survey_date, geom)
VALUES (
'หมุด BM-001',
'2026-01-15',
ST_SetSRID(ST_MakePoint(100.5018, 13.7563), 4326)
);
ฟังก์ชัน Spatial ที่ใช้บ่อย
-- คำนวณระยะทางระหว่างสองจุด (เมตร)
SELECT ST_Distance(
ST_Transform(geom, 32647), -- แปลงเป็น UTM Zone 47N
ST_Transform(
ST_SetSRID(ST_MakePoint(100.5200, 13.7800), 4326),
32647
)
) AS distance_m
FROM survey_points
WHERE name = 'หมุด BM-001';
-- หาจุดทั้งหมดที่อยู่ในรัศมี 500 เมตรจากจุดกลาง
SELECT name, ST_Distance(
ST_Transform(geom, 32647),
ST_Transform(ST_SetSRID(ST_MakePoint(100.5018, 13.7563), 4326), 32647)
) AS dist_m
FROM survey_points
WHERE ST_DWithin(
ST_Transform(geom, 32647),
ST_Transform(ST_SetSRID(ST_MakePoint(100.5018, 13.7563), 4326), 32647),
500 -- 500 เมตร
)
ORDER BY dist_m;
-- คำนวณพื้นที่ของ Polygon (ตารางเมตร)
SELECT name, ST_Area(ST_Transform(geom, 32647)) AS area_sqm
FROM land_parcels;
-- ตรวจสอบว่า Point อยู่ใน Polygon หรือไม่ (ST_Within)
SELECT p.name AS point_name, z.zone_name
FROM survey_points p
JOIN project_zones z ON ST_Within(p.geom, z.geom);
-- สร้าง Buffer รอบ Polygon
SELECT name, ST_Buffer(ST_Transform(geom, 32647), 50) AS buffer_50m
FROM land_parcels;
-- Union รวม Polygon หลายชิ้นเข้าด้วยกัน
SELECT ST_Union(geom) AS merged_area
FROM land_parcels
WHERE project_id = 1;
นำเข้า Shapefile ด้วย shp2pgsql
# แปลง Shapefile เป็น SQL แล้วนำเข้า PostgreSQL
shp2pgsql -I -s 4326 land_parcels.shp public.land_parcels | psql -U postgres -d gis_db
# หรือใช้ GUI ใน QGIS: Database > DB Manager > Import Layer
ตัวอย่างการใช้งาน PostGIS ในงานสำรวจและ GIS จริง

Use Case 1: ระบบจัดการหมุดควบคุม (Control Point Management)
วิศวกรสำรวจสามารถเก็บข้อมูลหมุดควบคุมทั้งหมดในโครงการไว้ใน PostGIS แทนการจัดการด้วย Excel หรือ Shapefile แยกไฟล์ ทำให้ทุกคนในทีมเข้าถึงข้อมูลล่าสุดได้พร้อมกัน และสามารถ Query หาหมุดที่ใกล้จุดงานได้ทันที
-- หาหมุดควบคุมที่ใกล้จุดงานมากที่สุด 3 จุด
SELECT
name,
point_class,
ST_Distance(
ST_Transform(geom, 32647),
ST_Transform(ST_SetSRID(ST_MakePoint(100.65, 14.80), 4326), 32647)
) AS dist_m
FROM control_points
ORDER BY dist_m
LIMIT 3;
Use Case 2: วิเคราะห์แปลงที่ดินที่อยู่ในเขตน้ำท่วม
การซ้อนทับข้อมูล (Overlay Analysis) เป็นงานที่ PostGIS ทำได้รวดเร็วมากเมื่อข้อมูลมีขนาดใหญ่:
-- หาแปลงที่ดินที่ตัดกับเขตน้ำท่วม
SELECT
p.parcel_id,
p.owner_name,
ST_Area(ST_Intersection(p.geom, f.geom)) / ST_Area(p.geom) * 100 AS flood_pct
FROM land_parcels p
JOIN flood_zones f ON ST_Intersects(p.geom, f.geom)
WHERE f.return_period = 100 -- น้ำท่วม 100 ปี
ORDER BY flood_pct DESC;
Use Case 3: สร้าง WebGIS API ด้วย Python
PostGIS ทำงานร่วมกับ Python ได้ดีมาก ผ่าน Library อย่าง psycopg2, SQLAlchemy, หรือ GeoPandas:
import geopandas as gpd
from sqlalchemy import create_engine
# เชื่อมต่อ PostGIS
engine = create_engine("postgresql://user:password@localhost/gis_db")
# อ่านข้อมูลจาก PostGIS เป็น GeoDataFrame
gdf = gpd.read_postgis(
"SELECT id, name, geom FROM survey_points",
con=engine,
geom_col="geom"
)
# วิเคราะห์ด้วย GeoPandas
print(gdf.crs) # ระบบพิกัด
print(gdf.geometry.area) # พื้นที่
# บันทึกกลับ PostGIS
gdf.to_postgis("survey_results", engine, if_exists="replace")
Use Case 4: เชื่อมต่อ QGIS กับ PostGIS
QGIS รองรับการเชื่อมต่อ PostGIS โดยตรงผ่าน DB Manager หรือ Add PostGIS Layer ทำให้เปิดและแก้ไขข้อมูลจากฐานข้อมูลได้เลยโดยไม่ต้อง Export เป็นไฟล์ก่อน เหมาะสำหรับทีมที่ทำงานร่วมกันหลายคน
ดูบทความเพิ่มเติม: QGIS คืออะไร และ GIS คืออะไร
ข้อควรระวังและเทคนิคเพิ่มเติม

เรื่องระบบพิกัด (SRID) — PostGIS ใช้ EPSG Code ในการระบุ Coordinate System เช่น EPSG:4326 คือ WGS84 Lat/Lon, EPSG:32647 คือ UTM Zone 47N ที่ใช้ในประเทศไทย การแปลงพิกัดต้องทำด้วยฟังก์ชัน ST_Transform() เสมอก่อนคำนวณระยะทางหรือพื้นที่
Spatial Index — ต้องสร้าง GIST Index บน Column Geometry เสมอหลังนำเข้าข้อมูล มิฉะนั้น Query จะช้ามากเมื่อข้อมูลมีจำนวนมาก
CREATE INDEX idx_geom ON ชื่อตาราง USING GIST(geom);
Geometry vs Geography — ใช้ GEOMETRY สำหรับข้อมูลในพื้นที่เล็กที่ต้องการความเร็ว และใช้ GEOGRAPHY สำหรับข้อมูลครอบคลุมพื้นที่ขนาดใหญ่ข้ามโซน UTM ที่ต้องการความแม่นยำสูงกว่า
สรุป

PostGIS คือหัวใจของ Spatial Database Stack ที่นักพัฒนา GIS และวิศวกรสำรวจมืออาชีพทั่วโลกไว้วางใจ ด้วยความสามารถในการจัดเก็บข้อมูล Geometry ทุกประเภท วิเคราะห์เชิงพื้นที่ด้วย SQL และทำงานร่วมกับ QGIS, Python, และ Web Application ได้อย่างราบรื่น — PostGIS จึงเป็นทักษะที่คุ้มค่าลงทุนเรียนรู้สำหรับใครก็ตามที่ทำงานด้าน GIS หรือวิศวกรรมสำรวจในยุคดิจิทัลครับ
ถ้าคุณกำลังมองหาระบบจัดการข้อมูล GIS สำหรับองค์กร หรือต้องการพัฒนา WebGIS Platform ที่มีประสิทธิภาพ ทีมงาน WAIPIA Development พร้อมให้คำปรึกษาและพัฒนาระบบให้ตามความต้องการของคุณครับ
บทความโดย ทีม WAIPIA Development — บริการสำรวจและแผนที่ครบวงจร ติดต่อ: 095-7243421 | Line: @info_wd | เว็บไซต์: waipia.com