PlusMagi's Blog By Pitt Phunsanit Database,Technology Google Maps: หาจุดศูนย์กลาง

Google Maps: หาจุดศูนย์กลาง

ในงานระบบที่ต้องจัดการข้อมูลเชิงพื้นที่ (Geospatial Data) เช่น การหาจุดศูนย์กลางของพื้นที่ก่อเหตุ การวางแผนเส้นทาง หรือการวิเคราะห์การกระจายตัวของสาขา การคำนวณหาจุดศูนย์กลาง (Centroid) ของชุดพิกัดหลายจุดจึงเป็นสิ่งจำเป็นอย่างยิ่ง

หากในอดีตเราอาจต้องใช้ JavaScript หรือ API ภายนอกในการคำนวณ แต่สำหรับสถาปนิกและนักพัฒนาระบบที่ใช้ฐานข้อมูลระดับ Enterprise อย่าง PostgreSQL การใช้ส่วนขยาย PostGIS จะช่วยให้เราสามารถคำนวณหาจุดศูนย์กลางพิกัดได้อย่างแม่นยำ รวดเร็ว และมีประสิทธิภาพสูงสุดภายใน Database Engine เอง

หลักการหาจุดศูนย์กลางพิกัดด้วย PostGIS

PostGIS คือส่วนขยาย (Extension) ที่เปลี่ยน PostgreSQL ให้เป็นระบบจัดการข้อมูลเชิงพื้นที่ (GIS) ที่ทรงพลังที่สุด หน้าที่หลักในการหาจุดศูนย์กลางคือการใช้ฟังก์ชัน ST_Centroid() ซึ่งจะคำนวณค่าจุดกึ่งกลางทางเรขาคณิตของชุดพิกัดที่กำหนดให้ โดยไม่จำเป็นต้องคำนวณทางคณิตศาสตร์ที่ซับซ้อนเหมือนการหาค่าเฉลี่ย (Average) แบบปกติ

เราจะสาธิตการหาจุดศูนย์กลางของพิกัด 3 จุด (สมมติว่าเป็นจุดเกิดเหตุ) โดยการสร้างตารางจำลองและใช้คำสั่ง SQL เพื่อเรียกใช้ฟังก์ชันดังกล่าว

ตัวอย่างโค้ด PostgreSQL (PostGIS)

SQL

-- 1. เปิดใช้งาน PostGIS Extension ก่อนเสมอ 2. สร้างตารางสำหรับเก็บจุดพิกัด (Points) CREATE TABLE IF NOT EXISTS crime_points (id SERIAL PRIMARY KEY, point_data GEOMETRY(Point, 4326)); -- 3. ใส่ข้อมูลพิกัด 3 จุด (สมมติเป็นจุด A, B, C) INSERT INTO crime_points (point_data) VALUES (ST_SetSRID(ST_MakePoint(100.58, 13.74), 4326)); -- จุด A: อนุสาวรีย์ชัยฯ INSERT INTO crime_points (point_data) VALUES (ST_SetSRID(ST_MakePoint(100.50, 13.75), 4326)); -- จุด B: โรงพยาบาล INSERT INTO crime_points (point_data) VALUES (ST_SetSRID(ST_MakePoint(100.55, 13.70), 4326)); -- จุด C: จุดอื่น SELECT ST_AsText(ST_Centroid(ST_Collect(point_data))) AS centroid_point FROM crime_points;

คำอธิบายโค้ด:

  • ST_MakePoint(longitude, latitude): สร้างจุดพิกัด
  • ST_SetSRID(..., 4326): กำหนดระบบพิกัดให้เป็น WGS 84 (มาตรฐานสากล)
  • ST_Collect(point_data): รวบรวมจุดพิกัดทั้งหมดให้อยู่ใน Geometry Collection เดียว
  • ST_Centroid(...): คำนวณหาจุดศูนย์กลางของชุดพิกัดที่รวบรวมมา

ข้อได้เปรียบในการใช้ PostGIS

การใช้ PostGIS ในการคำนวณจุดศูนย์กลางมีข้อได้เปรียบเหนือการคำนวณทางคณิตศาสตร์ทั่วไปอย่างชัดเจน:

  • ความแม่นยำทางภูมิศาสตร์: การคำนวณเป็นไปตามหลักเรขาคณิตของโลกจริง ทำให้ได้จุดศูนย์กลางที่ถูกต้องตามหลัก GIS
  • ประสิทธิภาพสูง: การประมวลผลเกิดขึ้นที่ระดับฐานข้อมูล ทำให้ลดภาระการส่งข้อมูลและคำนวณไปยัง Application Layer
  • Scalability: สามารถขยายการใช้งานไปยังการคำนวณระยะทาง (Distance), การหาพื้นที่ (Area), หรือการหาจุดที่ใกล้ที่สุด (Nearest Neighbor) ได้อย่างง่ายดาย

บทสรุป

สำหรับนักพัฒนาระบบที่ต้องจัดการข้อมูลเชิงพื้นที่ การใช้ PostgreSQL ร่วมกับ PostGIS คือมาตรฐานที่แนะนำอย่างยิ่ง การใช้ฟังก์ชัน ST_Centroid() ไม่เพียงแต่ช่วยให้เราหาจุดศูนย์กลางของพิกัดได้เท่านั้น แต่ยังเป็นรากฐานสำคัญในการสร้างแอปพลิเคชันที่ต้องมีการวิเคราะห์ทางภูมิศาสตร์ที่ซับซ้อนได้อย่างมีประสิทธิภาพและเชื่อถือได้