Update: โปรแกรม Surveyor Pocket Tools เพื่อเตรียมพร้อมสำหรับไลบรารี PROJ รุ่น 7 (PROJ.7)

เนื่องจากในเดิมที Surveyor Pocket Tools โปรแกรมเครื่องมือสำหรับช่างสำรวจฉบับกระเป๋าได้ใช้ไลบรารี PROJ รุ่น 4 หรือเรียกสั้นๆว่า PROJ.4 มาโดยตลอด ในช่วงที่ผ่านมาปีที่แล้ว ปี 2018 ทางโครงการ PROJ ได้รปรับปรุงขนานใหญ่จาก PROJ.5 มาเป็น PROJ.6 ทำให้โค้ดบางส่วนมีอันต้องแตกคือใช้ไม่ได้ เรียกว่าไม่ compatible ย้อนหลัง ผมใช้เวลามานั่งแก้โค้ดใหม่พอสมควร แต่ปัญหาไม่ได้จบแค่นี้ เมื่อ PROJ.7 มาถึงในปีหน้าหรือ 2020 ความเข้ากันได้ของโค้ดจะยิ่งแตกต่างกับ PROJ.4 หนักเข้าไปอีกเพราะจะมีการใช้ API คนละตัว เพื่อเตรียมความพร้อมผมก็เลยศึกษาดูลู่ทางล่วงหน้า ก็ถือว่าเอาสิ่งที่อ่านประมวลมาเรียงร้อยเรื่องเล่าสู่กันฟังนะครับ

ประวัติและเส้นทางกาลเวลา (Timeline)

ผมว่าตอนนี้ไลบรารีที่เกี่ยวข้องกับการแปลงระบบพิกัด PROJ น่าจะเป็นไลบรารีที่ดีที่สุด ถูกใช้งานในเบื้องหลังโปรแกรมและทูลส์ที่มีชื่อเสียงโดยเฉพาะพวก open-source เช่น GDAL, QGIS, PostGIS ตลอดจน Spatialite น้อยคนนักที่จะรู้ว่าอายุของ PROJ นั้นร่วมๆ 40 ปีแล้ว ลองมาดูประวัติและเส้นทางกาลเวลาของ PROJ คร่าวๆ บางส่วนผมเรียบเรียงมาจากวิกิ PROJ

  • ปี 1980 (40 กว่าปีที่แล้ว) Gerald Evenden เริ่มโครงการนี้ครั้งแรก เขาใช้ภาษา Ratfo (Rational Fortran) หมายเหตุ Gerald Evenden เสียชีวิตในวัย 81 ปี เมื่อปี 2016
  • ปี 1985 โค้ดทั้งหมดถูกเขียนใหม่ด้วยภาษาซี เพื่อใช้ในระบบยูนิกซ์ และเรียกว่า PROJ.2
  • ปี 1990 ปรับปรุงและออกรุ่น PROJ.3
  • ปี 1994 ปรับปรุงให้ทันสมัยและก้าวหน้าเรียกว่า PROJ.4
  • ปี 1995 Gerald Evenden หยุดการพัฒนาและไม่มีความเคลื่อนไหวหลายปี
  • ปี 2000 Frank Warmerdam เป็นผู้นำใหม่ในการพัฒนาพร้อมออกรุ่น 4.4
  • ต่อจากนั้นเกือบ 20 ปี มีการปรับปรุงกันธรรมดา ไม่มีการนำเสนออะไรที่เป็นความก้าวหน้าหรือรุดหน้า ทำให้คนทั่วไปแม้กระทั่งผมยังเข้าใจว่าไลบรารีนี้ชื่อเต็มๆคือ PROJ.4
  • ปี 2018 Kristian Evers, Even Rouault และผู้พัฒนาท่านอื่นร่วมกันเริ่มพัฒนาโครงการที่ถือว่าเป็นเปลี่ยนแปลงระดับการปฏิวัตินวัติกรรม โดยเริ่มจาก PROJ.5 ก่อน
  • มีนาคม ปี 2019 ออกรุ่น PROJ.6 ที่ถือว่าเป็นรุ่นที่มีความสมบูรณ์ในระดับหนึ่ง
  • ปีหน้า 2020 ออกรุ่น PROJ.7 ที่คาดหวังจะเป็นรุ่นสมบูรณ์ในระดับที่เปลี่ยนสถาปัตยกรรมใหม่เลยทีเดียว

ลงขันเพื่อหาทุนสนันสนุน (Barn Rising)

ผมขอพูดถึงเรื่องลงขัน (Barn Rising) กันสักหน่อย ซึ่งการลงขันเป็นการลงเงิน คล้ายๆกับการลงแขกที่เป็นการลงแรง เมื่อปีที่แล้ว ปี 2018 ทางโครงการ GDAL และ Proj.4 และ libgeotiff ต้องการปรับปรุง 3 อย่างหลักๆ

  • เปลี่ยนจากการใช้ข้อมูล CSV มาเป็นฐานข้อมูล SQLite เป็นที่ทราบกันดีว่าข้อมูล CSV ที่ใช้ใน GDAL กับ Proj.4 นั้นค่อนข้างจะกระจายใช้งานยาก ทำให้สับสนกันมาก (ใน survey pocket tools ผมเอาไฟล์ข้อมูล CSV ที่มีกว่า 10 ไฟล์ มาทำเป็น SQLite database เพื่อให้สะดวกในการ query เรียกใช้งาน)
  • สนับสนุน OGC WKT2 ที่อรรถถาธิบายการแปลงพิกัดออกมาเป็นประโยคสตริง สนับสนุนการแปลงพิกัดที่ขึ้นอยู่กับระยะเวลา (Time independent) ใช้ในกรณีที่เปลือกโลกเคลื่อนที่ทำให้พิกัดเคลื่อนไปทุกๆปี หมายเหตุ ระบบพิกัดที่ขึ้นกับเวลาของ Australia จะเปลี่ยนมาใช้แบบนี้ในปี 2020 และอเมริกาจะปรับมาใช้ในปี 2022
  • ยกเลิกการใช้งานพื้นหลักฐาน WGS84 เป็นจุดศูนย์กลาง (Pivot) ในการแปลงพิกัด ที่อาจจะมี error ถึง 2 เมตร หันมาปรับปรุงระบบการแปลงพิกัดแบบใหม่ที่แปลงได้โดยตรงจากระบบพิกัดหนึ่งไปยังอีกระบบพิกัด

การเลยมีการลงขันเพื่อหาเงินทุนสนับสนุนดังกล่าว ซึ่งก็ได้เงินมาก้อนหนึ่งทำให้สามารถปรับปรุงโครงการเดินหน้าปรับเปลี่ยนดังที่เล่ามาข้างต้นจนกลายเป็น PROJ.5 นับว่าได้ผ่านอุปสรรคด่านมหาหินสามประการไปในที่สุด

การเตรียมพร้อมของ Surveyor Pocket Tools

  • เริ่มนำการคำนวณแบบ pipe-line ที่ออกแบบใน PROJ.6 มาใช้งาน โดยเฉพาะงานคำนวณความสูง geoid ตัวอย่างเช่น
+proj=pipeline
+step +proj=unitconvert +xy_in=deg +xy_out=rad
+step +proj=longlat +ellps=GRS80 +datum=NAD83 +step +proj=vgridshift +grids=g2012bu0.gtx +inv
  • ลดการใช้งาน proj_string ในอนาคตคาดว่า PROJ จะมีการยกเลิกการใช้งานแบบนี้ โดยเฉพาะ +towgs84 ที่จะยกเลิกใช้งานแน่นอนเพราะจะไม่ใช้พื้นหลักฐาน WGS84 เป็นจุด pivot อีกต่อไป ในปัจจุบันนี้ผมยังใช้งานอยู่ ตัวอย่าง proj_string
+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024  +towgs84=204.4789,837.8940,294.7765,0,0,0,0 +units=m +no_defs
  • ปรับมาใช้ SQLite database ของ PROJ ถ้าใช้ PROJ.6 จะเห็นมีไฟล์ proj.db ติดมาด้วย ตัวนี้ย้ายมาจาก PosgresSQL ของ EPSG และดัดแปลงตัดแต่งบางส่วนที่ไม่ต้องการใช้โดย GDAL และ PROJ ออกไป ก่อนหน้านี้ผมใช้ SQLite database ในลักษณะเดียวกันที่ผมสร้างจาก CSV ตอนนี้จะยกเลิกและหันมาใช้ proj.db แทนที่ ข้อดีคือในระยะยาวเมื่อมีการเปลี่ยนแปลง โปรแกรม Surveyor Pocket Tools สามารถใช้ได้เลยทันที เช่นในกรณีมีพื้นหลักฐานเพิ่มขึ้น
proj.db เปิดด้วย SQLiteStudio

Surveyor Pocket Tools รุ่นปรับปรุง

ตอนนี้ใช้ไลบรารี PROJ.6 เต็มตัว ผมแก้บั๊กหลายจุดและปรับปรุงไปพอสมควร ปรับรุ่นใหม่เป็น 1.21 build 711 ก็ดาวน์โหลดไปทดสอบกันได้ครับ ยังไม่มีฟีเจอร์อะไรเพิ่มนะครับมุ่งแก้บั๊กอย่างเดียว

โปรดติดตามกันตอนต่อไปครับ

4 thoughts on “Update: โปรแกรม Surveyor Pocket Tools เพื่อเตรียมพร้อมสำหรับไลบรารี PROJ รุ่น 7 (PROJ.7)”

  1. ตอนนี้เป็นโปรแกรมสามัญประจำเครื่องไปแล้วครับ ขอบคุณมากครับ

  2. ขออนุญาติแจ้งค่ะ ใช้ Transform Cooridinates แปลงแล้ว พอจะให้ pin to google map โปรแกรมเด้งออกเองค่ะ

    1. สวัสดีครับ รบกวนจับภาพหน้าจอโปรแกรม แนบมาให้ด้วย ผมแนะนำให้ดาวน์โหลดรุ่นใหม่มาใช้ตอนนี้รุ่นล่าสุด version 1.28 build 736 ครับ

Leave a Reply

Your email address will not be published. Required fields are marked *