ในกรณีที่ต้องการค่าความสูงจีออยด์จากจุดที่มีจำนวนมากตัวอย่างเช่นเป็นสิบจุดขึ้นไป การมานั่งคำนวณทีละจุดคงไม่ใช่เรื่องที่สะดวกนัก ผมปรับปรุงโปรแกรมให้สามารถอ่านไฟล์ค่าพิกัดภูมิศาสตร์ (ละติจูดและลองจิจูด) ในรูปแบบ CSV ที่ใช้ตัวแบ่งด้วยเครื่องหมายคอมมา “,” ค่าพิกัดละติจูดและลองจิจูด ต้องเป็นรูปแบบทศนิยม (degree) เท่านั้น การจัดเรียงค่าพิกัดของให้ขึ้นต้นด้วยค่าลองจิจูดตามด้วยเครื่องหมายคอมม่าและค่าละติจูด
ไฟล์ทดสอบ
ไฟล์ที่จะมาทดสอบโปรแกรม ผมสร้างจากโค้ดภาษาไพทอน ให้สุ่มจำนวนจุดค่าพิกัดขึ้นมา 10000 จุด โดยให้ค่าพิกัดที่สุ่มอยู่ในกรอบสี่เหลี่ยมนี้คือ ละติจูด เริ่มที่ 3 องศา ไปสุดที่ 22.9833333333333 องศา ค่าลองจิจูดเริ่มที่ 95 องศา ไปสิ้นสุดที่ 107.9833333333 องศา
ดาวน์โหลดและติดตั้ง
ผมปรับรุ่นโปรแกรมใหม่ในขณะนี้เป็นเวอร์ชั่น 1.03 build 651 ก็สามารถไปดาวน์โหลดได้ที่ลิ๊งค์นี้ เมื่อดาวน์โหลดแล้ว ก็ติดตั้ง ในกรณีมีรุ่นเดิมอยู่ให้ถอนออกเสียก่อน เมื่อเปิดโปรแกรมมาจะเห็นหน้าตาดังนี้
เมื่อเปิดโปรแกรมมาแล้ว ลองไปดูว่าไฟล์ทดสอบอยู่ตรงไหน ที่เมนูหลักให้เปิด “Example folder”
จะเป็นการเปิด Windows Explorer คลิกเข้าไปใน “example data” จะเห็นไฟล์ทดสอบชื่อ “tgm2017_test_points.csv” ดังรูปด้านล่าง
ผมลองเปิดไฟล์นี้ดูด้วย Notepad ++ เลื่อนไปที่บรรทัดสุดท้าย จะเห็นว่ามีค่าพิกัดสุ่มทั้งหมด 10000 จุด
ทดสอบคำนวณความสูงจีออยด์จากไฟล์แบบลากแล้ววาง
ที่เมนูหลักเปิดทูลส์ “Geoid Height” และเปิด Windows Explorer เพื่อจะลากไฟล์ทดสอบไปวางบนทูลส์ และไม่ลืมในการทดสอบนี้ผมต้องการลอง “TGM2017” ดังนั้นที่ทูลส์อย่าลืมเลือก EGM Model เป็น “TGM2017“
โปรแกรมจะอ่านไฟล์ ถ้ารูปแบบตรงกับที่โปรแกรมต้องการ จะทำการคำนวณและเขียนไฟล์ผลลัพธ์ให้ทันที โดยจะเขียนที่โฟลเดอร์ของไฟล์ทดสอบ โดยชื่อจะเติมคำว่า “_out” ตามหลังให้ จะเห็นไฟล์เพิ่มที่โฟลเดอร์
ทดสอบการคำนวณจากการเปิดไฟล์
อีกวิธีถ้าไม่ใช้การลากแล้ววางสามารถคลิกที่ไอคอนของทูลส์ได้เพื่อเปิดไฟล์ทดสอบ
จะเห็นไดอะล็อกดังรูปด้านล่าง
คลิกที่ปุ่ม “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,000 | 1 |
1,000,000 | 6 |
10,000,000 | 84 |
จะเห็นว่าเวลาประมวลผล สิบล้านจุด ใช้เวลา 1 นาที 24 วินาที ผมดูว่าใช้เวลามากไปนิด ทั้งที่ก่อนหน้านี้ สิบล้านจุด ใช้เวลาสิบนาทีกว่าๆ ผมต้องกลับมาออปติไมซ์โค้ดอีกครั้งจนได้เวลาหนึ่งนาทีกว่าๆ อย่างที่เห็น ถ้าจะเอาเร็วกว่านี้คงต้องใช้ภาษา C/C++ แล้วครับ
เนื่องจากโปรแกรมที่ปรับปรุงในตอนนี้ยังไม่ได้ดักจับเรื่อง error มากนักโดยเฉพาะรูปแบบไฟล์ค่าพิกัดละติจูดและลองจิจูด ดังนั้นก่อนจะเปิดไฟล์มาทำการคำนวณให้พิจารณาดูให้ดีว่ารูปแบบได้ตามที่โปรแกรมต้องการไหม ครับตอนนี้ก็พอหอมปากหอมคอ ติดตามกันตอนหน้าต่อไปครับ
สุดยอดครับนายช่างประจวบ
ขอบคุณครับคุณ @นีโอ
ขอบคุณมากครับ
ขอบคุณอีกครั้งครับคุณปฐมพงศ์
ผมทดลองใช้แล้วไม่สำเร็จครับ โปรแกรมแจ้งว่า cannot convert latitude or longitute to float ครับ
สวัสดีครับ 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
ตรงอยู่นะครับ ผมสลับทั้ง lat lon / lon lat
รบกวนอัพโหลดขึ้น google drive หรือ dropbox ส่งลิ๊งค์ให้ผมเทสต์หน่อยครับ ขอบคุณครับ
https://drive.google.com/file/d/1ktisq1hgICy6dmX1d481QyxoUPoCdNku/view?usp=sharing
ขอบคุณมากครับ
เจอแล้วครับ ไฟล์ encode ด้วย “utf-8 + Bom” ที่คาดหวังคือ “utf-8” เดี๋ยวผมจะแก้ไขให้ครับในโปรแกรม ณ ตอนนี้คุณปฐมพงศ์ใช้ Notepad เปิดไฟล์นี้แล้ว Save As แล้วตั้งค่า Encoding เป็น “Ansi” หรือ “UTF-8” จะแก้ปัญหาได้ครับ
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 มาจากตัวโปรแกรมหลังจากโหลดพิกัดเข้ามาแล้วครับ
ขอบคุณมากครับ
รายงานผลครับ บันทึกเป็น UTF-8 ไม่ได้ผลครับ เป็น ANSI ใช้ได้ครับ
ส่วนผลการคำนวณ ให้ผลลัพธ์แตกต่างจากโปรแกรมของแผนที่ทหาร ในทศนิยมลำดับที่ 4 ครับ 2-3 มม.
ยินดีด้วยครับ ฝาก Build 653 ตัวใหม่ไปทดสอบด้วยครับ
ขออภัย ไม่ถึงมิลลิเมตรสิ ทศนิยมลำดับที่ 4
OK ครับ