Geospatial Data 101 จัดการ Location Data ยังไงดี?

Phiratath Nopratanawong
KBTG Life
Published in
2 min readApr 30, 2020
ตัวอย่างการแสดงผลของ Geospatial Data

หลายคนอาจจะเคยเห็น Geospatial Data หรือข้อมูลที่มีสถานที่เข้ามาเกี่ยวข้องไม่มากก็น้อย เช่น ข้อมูลสถานการณ์ COVID-19 และ รายได้ต่อครัวเรือนในแต่ละจังหวัด

ผมจะแบ่งบทความนี้ออกเป็น 3 ส่วนพื้นฐาน คือ

  1. การระบุตำแหน่งทำได้อย่างไร
  2. จัดการตารางที่มี Location ต้องใช้อะไร
  3. การ Visualization แบบไหนจึงจะดี

การระบุตำแหน่ง

ในส่วนนี้ ถ้าตัว Data มี Column ของละติจูด (Latitude) และลองจิจูด (Longitude) ซึ่งเป็นการบอกตำแหน่งแบบ Absolute หรือเป็นสากลเหมือนกันหมด ไม่ว่าจะอยู่ตรงไหนของโลกก็จะระบุได้ตรงกันทั้งสิ้น แต่ในบางครั้งเราไม่ได้อยากได้เป็นละติจูดและลองจิจูด แต่เราอยากได้เป็นแกน X และ Y ที่มีหน่วยเป็นเมตร เพื่อใช้ในการหาระยะห่างเป็นต้น เราจึงต้องทำความรู้จักกับ Coordinate Reference System (CRS) หรือระบบพิกัดที่ใช้อ้างอิงก่อน ซึ่งเราใช้หลักๆอยู่สองตัวคือ

  1. EPSG:4326 ระบบละติจูดและลองจิจูดที่ใช้เหมือนกันทั้งโลก
  2. EPSG:3857 ระบบ X และ Y ที่มีหน่วยเป็นเมตร เปลี่ยนไปตามเส้นละติจูดและลองจิจูด

ซึ่งทั้งสองตัวนี้สามารถสลับไปมาได้ด้วยการเปลี่ยนระบบ CRS นั้นเอง

ต่อมาถ้าเรามีชื่อสถานที่แต่เราอยากได้ตำแหน่งแบบละติจูดและลองจิจูด (Geocoding) ล่ะจะทำยังไง สิ่งนี้จะค่อนข้างยุ่งยากหน่อยเพราะเราต้องมี Database ที่เก็บข้อมูลสถานที่ ซึ่ง Google ก็มี API ตัวนี้อยู่ สามารถไปศึกษากันได้

ในกรณีที่เรามีข้อมูลละติจูดและลองจิจูดอยู่แต่อยากได้ชื่อสถานที่ แบบนี้จะเรียกว่า Reverse Geocoding ซึ่ง Google ก็มีบริการนี้อีกเช่นกัน แต่ถ้าใครชอบของฟรี แนะนำบริการจาก OpenStreetMap โดย Data ทั้งหมดจะเป็น Open Source ไม่เหมือน Google

การจัดการตารางที่มี Location

ถ้าผู้อ่านคุ้นชินกับ Pandas อยู่แล้ว การเล่นกับข้อมูลที่มี Location ก็จะเหมือนกับการที่เราใส่ Column ที่มีข้อมูลเกี่ยวกับ Location ไป ซึ่ง Library ที่จะเข้ามาจัดการคือ GeoPandas โดย Column ที่ผมว่านั้นชื่อ Geometry และตารางแบบด้านล่างนี้เรียกว่า GeoDataFrame

ตัวอย่างหน้าตา GeoDataFrame

ในส่วนของ Geometry จะอยู่ในรูปแบบ Shapely ซึ่งเป็นตัวบอกรูปร่างของ Location นั้นๆ

ตัวอย่างการแสดงผลของ Shapely https://geopandas.org/mapping.html

ถ้าเราเข้าใจ Shapely การจัดการกับ GeoDataFrame ก็ไม่ใช่เรื่องยาก เพราะหลักๆ เราจะเล่นกับ Location ด้วย sjoin ซึ่งคือการ Join GeoDataFrame เข้าด้วยกัน โดยหลักๆ วิธี Join จะเป็นการดูว่า Geometry ของทั้งสอง GeoDataFrame ทับกันหรือไม่ เช่น เรามีตารางจุดพิกัดอยู่แล้ว ถ้าเราอยากรู้ว่าจุดนี้อยู่ในเขตไหนในกรุงเทพ เราก็แค่นำตารางจุดพิกัดนี้มา sjoin กับ GeoDataFrame ของ เขตกรุงเทพ เพียงเท่านี้ก็จะรู้แล้วว่าจุดดังกล่าวนั้นอยู่ในเขตไหน

คำเตือน : การทำ sjoin ต้องเช็คเสมอว่า CRS ของทั้งสองตรงกันหรือไม่ ทำได้ด้วยการ .crs ข้างหลังตัวแปร GeoDataFrame ถ้าไม่ตรงกันสามารถเปลี่ยนด้วย .to_crs

การ Visualization

ถ้าเราเห็นตัวอย่างการแสดงผลของ Shapely แล้ว การทำ Visualization ก็จะเล่นกับสีของตัว Shapely ได้

ตัวอย่างการทำ Visualization (source)

ต่อมาคือการนำ Shapely ของเราไปวางซ้อนบนแผนที่หนึ่ง ซึ่งผมมี Library แนะนำเป็น Folium โดยตัว Folium จะทำการวาง Shapely ซ้อนไว้กับ Map ของ OpenStreetMap ทำให้เราเห็นว่ารอบๆจุดที่เราสนใจนั้นมีอะไรบ้าง

ตัวอย่าง Folium (Source: Pinterest)

แต่ถ้าใครเขียนโค้ดไม่คล่องก็มี Tool อีกตัวที่ชื่อว่า Kepler.gl ซึ่งเราสามารถ Export GeoPandas ไป Plot บน Web ได้ มีจุดเด่นคือการทำเป็นแบบ Interactive

ตัวอย่าง Kepler.gl แบบ Interactive

ทั้งหมดที่กล่าวมาเป็นแค่เพียงพื้นฐานสำหรับการทำ Geospatial Data ยังมีอีกหลายส่วนที่ยังไม่ได้กล่าวถึงในบทความนี้ ถ้าผู้อ่านสนใจแนะนำให้ศึกษาต่อที่วิดีโอนี้ ส่วน Keyword ที่ใช้ศึกษาเพิ่มเติมจะเป็น GIS Data (Geographic Information System) เพื่อใช้หาข้อมูลสถานที่ต่างๆในประเทศไทยครับ

--

--