Update : โปรแกรม Surveyor Pocket Tools คำนวณความสูงจีออยด์ จากไฟล์ค่าพิกัดภูมิศาสตร์

ในกรณีที่ต้องการค่าความสูงจีออยด์จากจุดที่มีจำนวนมากตัวอย่างเช่นเป็นสิบจุดขึ้นไป การมานั่งคำนวณทีละจุดคงไม่ใช่เรื่องที่สะดวกนัก ผมปรับปรุงโปรแกรมให้สามารถอ่านไฟล์ค่าพิกัดภูมิศาสตร์ (ละติจูดและลองจิจูด) ในรูปแบบ CSV ที่ใช้ตัวแบ่งด้วยเครื่องหมายคอมมา “,” ค่าพิกัดละติจูดและลองจิจูด ต้องเป็นรูปแบบทศนิยม (degree) เท่านั้น การจัดเรียงค่าพิกัดของให้ขึ้นต้นด้วยค่าลองจิจูดตามด้วยเครื่องหมายคอมม่าและค่าละติจูด

ไฟล์ทดสอบ

ไฟล์ที่จะมาทดสอบโปรแกรม ผมสร้างจากโค้ดภาษาไพทอน ให้สุ่มจำนวนจุดค่าพิกัดขึ้นมา 10000 จุด โดยให้ค่าพิกัดที่สุ่มอยู่ในกรอบสี่เหลี่ยมนี้คือ ละติจูด เริ่มที่ 3 องศา ไปสุดที่ 22.9833333333333 องศา ค่าลองจิจูดเริ่มที่ 95 องศา ไปสิ้นสุดที่ 107.9833333333 องศา

ดาวน์โหลดและติดตั้ง

ผมปรับรุ่นโปรแกรมใหม่ในขณะนี้เป็นเวอร์ชั่น 1.03 build 651 ก็สามารถไปดาวน์โหลดได้ที่ลิ๊งค์นี้ เมื่อดาวน์โหลดแล้ว ก็ติดตั้ง ในกรณีมีรุ่นเดิมอยู่ให้ถอนออกเสียก่อน เมื่อเปิดโปรแกรมมาจะเห็นหน้าตาดังนี้

Surveyor Pocket Tools V1.03 build 651

เมื่อเปิดโปรแกรมมาแล้ว ลองไปดูว่าไฟล์ทดสอบอยู่ตรงไหน ที่เมนูหลักให้เปิด “Example folder”

เปิดโฟลเดอร์ตัวอย่างไฟล์

จะเป็นการเปิด Windows Explorer คลิกเข้าไปใน “example data” จะเห็นไฟล์ทดสอบชื่อ “tgm2017_test_points.csv” ดังรูปด้านล่าง

ไฟล์ทดสอบ tgm2017_test_points.csv

ผมลองเปิดไฟล์นี้ดูด้วย Notepad ++ เลื่อนไปที่บรรทัดสุดท้าย จะเห็นว่ามีค่าพิกัดสุ่มทั้งหมด 10000 จุด

ไฟล์ทดสอบมีจำนวนจุด 10000 จุด

ทดสอบคำนวณความสูงจีออยด์จากไฟล์แบบลากแล้ววาง

ที่เมนูหลักเปิดทูลส์ “Geoid Height” และเปิด Windows Explorer เพื่อจะลากไฟล์ทดสอบไปวางบนทูลส์ และไม่ลืมในการทดสอบนี้ผมต้องการลอง “TGM2017” ดังนั้นที่ทูลส์อย่าลืมเลือก EGM Model เป็น “TGM2017

ลากไฟล์ทดสอบไปวางบนทูลส์ “Geoid Height”
เปิด EGM Model เป็น “TGM2017” แล้วลากไฟล์ทดสอบมาวาง

โปรแกรมจะอ่านไฟล์ ถ้ารูปแบบตรงกับที่โปรแกรมต้องการ จะทำการคำนวณและเขียนไฟล์ผลลัพธ์ให้ทันที โดยจะเขียนที่โฟลเดอร์ของไฟล์ทดสอบ โดยชื่อจะเติมคำว่า “_out” ตามหลังให้ จะเห็นไฟล์เพิ่มที่โฟลเดอร์

ไฟล์ผลลัพธ์ชื่อ ” tgm2017_test_points_out.csv

ทดสอบการคำนวณจากการเปิดไฟล์

อีกวิธีถ้าไม่ใช้การลากแล้ววางสามารถคลิกที่ไอคอนของทูลส์ได้เพื่อเปิดไฟล์ทดสอบ

จะเห็นไดอะล็อกดังรูปด้านล่าง

คลิกที่ปุ่ม “Browse…” เพื่อเปิดไฟล์ CSV เปิดไฟล์ทดสอบชื่อ “tgm2017_test_points.csv”

คลิกชื่อไฟล์แล้วคลิกที่ปุ่ม “Open” จะเห็นเนื้อในไฟล์

คลิกที่ปุ่ม “Calculate” เพื่อทำการคำนวณหาความสูงจีออยด์ สุดท้ายทูลส์ “Geoid Height” จะสร้างไฟล์ชื่อ “tgm2017_test_points_out.csv” เมื่อเปิดไฟล์มาดูจะเห็นว่ามีคอลัมน์ ความสูงจีออยด์เพิ่มมาอีกคอลัมน์

ทดสอบกับไฟล์ขนาดใหญ่

สำหรับไลบรารี Proj4 ที่ผมนำมาใช้งานอยู่นี้ การคำนวณหาความสูงจีออยด์หรือจาก Vertical Datum ตัวหนึ่งไปอีก Vertical Datum แบบในอเมริกาที่มี Vertical Datum อยู่หลายตัวหลายรุ่น ไลบรารีนี้จึงถูกพัฒนาเพื่อให้คำนวณในเรื่องนี้ โดยเฉพาะการคำนวณจากไฟล์ไลดาร์ (Point cloud) ที่มีขนาดใหญ่ หลายสิบล้านจุด จากความสูงทรงรีมาเป็น Orthometric height (หรือระดับน้ำทะเลปานกลางในประเทศไทยเรา) ผมลองทดสอบกับไฟล์ขนาดที่มีจำนวนจุด หนึ่งแสนจุด, หนึ่งล้านจุดและสิบล้านจุดตามลำดับ และผมจับเวลาไว้ (เครื่องผม CPU Xeon E-2176M) ไฟล์ทดสอบนี้ผมสร้างจากไฟล์สุ่มเช่นเดียวกัน

จำนวนจุดเวลาประมวลผล (วินาที)
100,0001
1,000,0006
10,000,00084

จะเห็นว่าเวลาประมวลผล สิบล้านจุด ใช้เวลา 1 นาที 24 วินาที ผมดูว่าใช้เวลามากไปนิด ทั้งที่ก่อนหน้านี้ สิบล้านจุด ใช้เวลาสิบนาทีกว่าๆ ผมต้องกลับมาออปติไมซ์โค้ดอีกครั้งจนได้เวลาหนึ่งนาทีกว่าๆ อย่างที่เห็น ถ้าจะเอาเร็วกว่านี้คงต้องใช้ภาษา C/C++ แล้วครับ

เนื่องจากโปรแกรมที่ปรับปรุงในตอนนี้ยังไม่ได้ดักจับเรื่อง error มากนักโดยเฉพาะรูปแบบไฟล์ค่าพิกัดละติจูดและลองจิจูด ดังนั้นก่อนจะเปิดไฟล์มาทำการคำนวณให้พิจารณาดูให้ดีว่ารูปแบบได้ตามที่โปรแกรมต้องการไหม ครับตอนนี้ก็พอหอมปากหอมคอ ติดตามกันตอนหน้าต่อไปครับ

15 thoughts on “Update : โปรแกรม Surveyor Pocket Tools คำนวณความสูงจีออยด์ จากไฟล์ค่าพิกัดภูมิศาสตร์”

  1. ผมทดลองใช้แล้วไม่สำเร็จครับ โปรแกรมแจ้งว่า cannot convert latitude or longitute to float ครับ

    1. สวัสดีครับ error ในกรณีนี้คือ format ของไฟล์ไม่ตรงกับที่โปรแกรมต้องการ เช็คดูอีกทีครับฟอร์แม็ตต้อง longitude,latitude หน่วยเป็นดีกรี ประมาณนี้ครับ
      102.71430172358215,3.574277082102867
      102.872177653934,18.419013460244997
      95.47618119737324,4.38415966393926
      100.46851193586654,11.941703279916124
      105.74451210996054,12.733109827716767
      101.62979238472067,16.886605090607667

      1. ตรงอยู่นะครับ ผมสลับทั้ง lat lon / lon lat

        1. รบกวนอัพโหลดขึ้น google drive หรือ dropbox ส่งลิ๊งค์ให้ผมเทสต์หน่อยครับ ขอบคุณครับ

          1. เจอแล้วครับ ไฟล์ encode ด้วย “utf-8 + Bom” ที่คาดหวังคือ “utf-8” encode utf-8-Bom เดี๋ยวผมจะแก้ไขให้ครับในโปรแกรม ณ ตอนนี้คุณปฐมพงศ์ใช้ Notepad เปิดไฟล์นี้แล้ว Save As แล้วตั้งค่า Encoding เป็น “Ansi” หรือ “UTF-8” จะแก้ปัญหาได้ครับ

          2. 104.8992182,15.11981977
            104.8989433,15.11989942
            104.8996292,15.11786458
            104.8993745,15.11789202
            104.8996226,15.11737217
            104.8998257,15.11696806
            104.9000582,15.11581751
            104.8998193,15.11570244
            104.9000323,15.1147051
            104.9002477,15.11469235
            104.9006041,15.11304544
            104.9004005,15.11301985
            104.900517,15.11185228
            104.9007029,15.11189255

            อันนี้ copy มาจากตัวโปรแกรมหลังจากโหลดพิกัดเข้ามาแล้วครับ

          3. ขอบคุณมากครับ
            รายงานผลครับ บันทึกเป็น UTF-8 ไม่ได้ผลครับ เป็น ANSI ใช้ได้ครับ
            ส่วนผลการคำนวณ ให้ผลลัพธ์แตกต่างจากโปรแกรมของแผนที่ทหาร ในทศนิยมลำดับที่ 4 ครับ 2-3 มม.

          4. ยินดีด้วยครับ ฝาก Build 653 ตัวใหม่ไปทดสอบด้วยครับ

          5. ขออภัย ไม่ถึงมิลลิเมตรสิ ทศนิยมลำดับที่ 4

Leave a Reply to นีโอ Cancel reply

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