Tag: surveyor

Update: โปรแกรมแปลงค่าพิกัดภูมิศาสตร์ Geographic Calculator (GeoCalc) บนเครื่องคิดเลข Casio fx-9860G II SD

Geographic Calculator

สืบเนื่องจากตอนก่อนหน้านี้ผมได้นำเสนอโปรแกรมแปลงพิกัด Geographic Calculator แบบไม่ได้ใช้ไลบรารีช่วยเรื่อง User Interface โปรแกรมมีลักษณะง่ายๆ เปิดมาเจอเมนูเลือกลักษณะที่จะคำนวณ จากนั้นโปรแกรมจะถามค่าพิกัดที่ต้องการแปลงแล้วคำนวณให้ ข้อดีคือใช้ง่าย ข้อเสียถ้าป้อนข้อมูลผิดพลาด จะย้อนกลับไม่ได้ ต้องเดินหน้าผิดไปจนจบ แล้วค่อยย้อนกลับมาอีกที

เปลี่ยนรูปแบบการติดต่อกับผู้ใช้ด้วยไลบรารี MyLib

ไลบรารี MyLib เป็นไลบรารีภาษาซีเล็กๆที่ผู้พัฒนาใช้นาม hayzel ได้เขียนไว้เพื่อใช้บนเครื่องคิดเลข Casio fx-9860G II SD ผมนำมาใช้และชอบ ทำให้มีแรงใจที่จะเขียนโปรแกรมบนเครื่องคิดเลขรุ่นเทพรุ่นนี้ได้มาหลายโปรแกรม และก็เหมือนเดิมครับว่าโปรแกรมที่ผมเขียนนั้นใช้งานได้ฟรี (Freely Usability) เพื่อใช้ในแวดวงงานสำรวจทำแผนที่ตลอดจนงานสำรวจเพื่อการก่อสร้างก็ตาม

ก็ขอตั้งชื่อโปรแกรมเล็กๆสำหรับแปลงพิกัดบนพื้นหลักฐาน WGS84 นี้ว่า “GeoCalc Extra” ก่อนอื่นสูตรที่ใช้ในการคำนวณผมใช้ไลบรารีชื่อ mgrs สามารถคำนวณแปลงพิกัดในระบบพิกัด UTM, geographic, UPS และ MGRS ได้ ขนาดไม่ใหญ่มากนัก สามารถคอมไพล์และบิวท์มาใส่เครื่องคิดเลขรุ่นนี้ได้ ทั้ง MyLib และ mgrs เป็นโปรแกรมเปิดโค้ด ฟรีทั้งคู่

ดาวน์โหลดโปรแกรม (Download)

ไปที่หน้าดาวน์โหลด (Download) มองหาโปรแกรมบนเครื่องคิดเลข Casio fx-9860G II SD  ชื่อโปรแกรม GeoCalc Extra จากนั้นทำการดาวน์โหลดมาจะได้ไฟล์ชื่อ “GEOCALC.G1A” แล้วทำการ copy ไฟล์ตัวนี้ไปยังเครื่องคิดเลขด้วยโปรแกรม Casio FA-124  หรือ copy ผ่านทางตัว SD Card ที่มากับเครื่องคิดเลข

เริ่มใช้โปรแกรม

ที่ “Main Menu” ของเครื่องคิดเลขเลื่อนไปหาไอคอนของโปรแกรมดังรูปด้านล่าง เมื่อกดคีย์ “EXE” แล้วจะเข้าเมนูของโปรแกรม ดังนี้

F1 – Set เลือกรายการคำนวณแปลงพิกัดระหว่าง UTM, Geographic หรือ MGRS

F2 – Src (Source) ป้อนค่าพิกัดที่ต้องการแปลงพิกัด

F3 – Calc คำนวณแปลงพิกัดพร้อมแสดงผลลัพธ์

F5 – Info แสดงเครดิตไลบรารีที่โปรแกรมใช้งาน

F6 – Exit ออกจากโปรแกรม

เลือกรายการคำนวณ (Menu)

ที่เมนูหลักกดคีย์ F1 – Set เพื่อเข้าไปเลือกรายการคำนวณ จะเห็น ระบบพิกัดเริ่มต้น (Source)   และระบบพิกัดปลายทาง (Target) ส่วนด้านล่าง MGRS Precision จะเป็นความละเอียดของระบบพิกัด MGRS (Military Grid Reference System) เลือกได้ 6 ระดับคือ 0, 2, 4, 6, 8, 10

ตัวอย่างที่ 1 แปลงค่าพิกัดจากค่าพิกัดภูมิศาสตร์ไปยังค่าพิกัดยูทีเอ็ม (Geographic to UTM)

ตั้งค่าระบบพิกัดเริ่มต้นและปลายทาง

ตั้งค่าระบบพิกัดต้นทางและปลายทางดังรูป จากนั้นกดคีย์ F6 – OK เพื่อออก

ป้อนค่าพิกัด

กลับมาที่เมนูหลักของโปรแกรมอีกครั้ง กดคีย์ F2 – Src เพื่อป้อนค่าพิกัดภูมิศาสตร์

ป้อนค่าพิกัดละติจูด Latitude 39°57’9.34803″N โดยการป้อน 39-57-9.34803N ค่าลองจิจูด 75°9’54.75490″W ป้อนค่า 75-9-54.75490W เสร็จแล้วกดคีย์ F6 – OK เพื่อออกไปคำนวณ

คำนวณแปลงพิกัด

กลับมาที่เมนูหลักของโปรแกรม กดคีย์ F3 – Calc เพื่อคำนวณจะได้ผลลัพธ์ดังรูปด้านล่าง โปรแกรม

จะแสดงค่าพิกัดเริ่มต้นให้และค่าพิกัดปลายทางคือยูทีเอ็มให้ พร้อมทั้งบอกโซนของยูทีเอ็มให้ กดคีย์ F6 – Done เพื่อออก

ตัวอย่างที่ 2 แปลงค่าพิกัดจากค่าพิกัดยูทีเอ็มไปยังค่าพิกัด MGRS (UTM to MGRS)

กำหนดค่าพิกัดยูทีเอ็ม (UTM) ดังนี้ N: 2642783.110, E: 232030.949 UTM Zone No: 46N กลับมาที่เมนูหลักของโปรแกรม กดคีย์ F1 – Set เพื่อเปลี่ยนรายการคำนวณ ตั้งค่าตามรูปด้านล่าง 

เสร็จแล้วกดคีย์ F6 – OK เพื่อออก

กลับมาเมนูหลักของโปรแกรมกดีย์ F2 – Src เพื่อออกป้อนค่าพิกัดยูทีเอ็มดังนี้ จากนั้นกดคีย์ F6 – OK เพื่อออก

กลับมาที่เมนูหลักของโปรแกรม กดคีย์ F3 – Calc เพื่อคำนวณ จะได้ผลลัพธ์ดังรูปด้านล่าง

ตัวอย่างที่ 3 แปลงค่าพิกัดจากค่าพิกัด MGRS ไปยังค่าพิกัดภูมิศาสตร์ (MGRS to Geographic)

กำหนดค่าพิกัด MGRS: 46QCK0907425049 ส่วนขั้นตอนจะขอรวบรัดแสดงด้วยรูปภาพ

ก็ตามที่สัญญาไว้ว่าจะไล่รื้อโปรแกรมเก่าๆ ที่ลงมาหลายๆตอนหน้านี้ด้วยระบบติดต่อผู้ใช้ตามไลบรารี mylib ที่ผมใช้อยู่ ติดตามกันตอนต่อไปครับ

ติดปีกเครื่องคิดเลขเทพ Casio fx 9860G II SD ด้วยโปรแกรมภาษาซีบน AddIn ตอนที่ 8 โปรแกรมคำนวณสเกลแฟคเตอร์ (Scale Factor)

ติดปีกเครื่องคิดเลขเทพ Casio fx 9860G II SD ด้วยโปรแกรมภาษาซีบน AddIn ตอนที่ 8 โปรแกรมคำนวณสเกลแฟคเตอร์ (Scale Factor)

โปรแกรมคำนวณสเกลแฟคเตอร์ (Scale Factor) สำหรับเครื่องคิดเลข Casio fx-9860 G

ช่วงนี้อยู่ในชุดซีรี่ย์โปรแกรมเครื่องคิดเลข Casio fx-9860G  ต่อไปขอนำเสนอโปรแกรมคำนวณสเกลแฟคเตอร์ (Scale Factor) ตัวโปรแกรมพัฒนาด้วยภาษาซี  ใช้เป็นโปรแกรม AddIn ดังรูปด้านล่าง

ปัญหาการคำนวณสเกลแฟคเตอร์

สเกลแฟคเตอร์ในที่นี้ผมจะขอหมายถึง Elevation Scale Factor (ESF), Grid Scale Factor (GSF) ตลอดจน Combined Scale Factor (CSF) สามารถอ่านได้จาก blog ก่อนหน้านี้ของผมได้ที่ใช้โปรแกรม Surveyor Pocket Tools มาช่วยคำนวณ ผู้อ่านอาจจะเคยสังเกตว่าจะไม่เคยเห็นโปรแกรมคำนวณสเกลแฟคเตอร์ในเครื่องคิดเลขเท่าใดนัก ในกรณีนี้คือพวกเราใช้ค่าระดับที่อิงระดับน้ำทะเลปานกลาง (แทนด้วยสัญลักษณ์ตัว “H“) กันเป็นหลัก น้ำทะเลปานกลางนี้สามารถใช้พื้นผิวจีออยด์ (Geoid) แทนได้ แต่การคำนวณหา Elevation Scale Factor เราจะต้องทราบค่าระดับที่อ้างอิงกับ Ellipsoid (แทนด้วยสัญลักษณ์ตัว “h“) ไม่ใช่เทียบกับระดับน้ำทะเลปานกลาง ความต่างระหว่างพื้นผิวจีออยด์และพื้นผิวทรงรี เราเรียกว่า Geoid Separation (แทนด้วยสัญลักษณ์ตัว “N“) ความสัมพันธ์ระหว่างสามสิ่งนี้คือ h = H + N

การหา Geoid Separation (N) จะต้องใช้ Earth Gravity Model ซึ่งก่อนหน้านี้ใช้ EGM96 ปัจจุบันใช้ EGM2008 ที่มีความละเอียดถูกต้องมากกว่า ซึ่งโมเดลต่างๆเหล่านี้จะเป็นไฟล์ที่มีขนาดค่อนข้างใหญ่จนใหญ่มาก ทำให้ไม่สามารถนำมาใช้กับเครื่องคิดเลขในระดับนี้ได้ และถ้าเขียนโปรแกรมด้วย Casio Basic ก็คงหมดสิทธิ์ครับเพราะไม่มีคำสั่งในการอ่านเขียนไฟล์

ปัญหาและทางออก

ผมพยายามใช้โค้ดภาษาซีในการอ่านไฟล์โมเดล EGM96  ด้วย egm96-f477.c โปรแกรมสามารถคอมไพล์และบิวท์ผ่าน แต่ตอนประมวลผลอ่านไฟล์ เนื่องจากต้องใช้เมโมรีเครื่องคิดเลขมาอ่านไฟล์เข้าไปเก็บในหน่วยความจำพบว่า เมโมรีไม่พอ พยายาม optimize ด้วยตัวเองหลายๆทางแต่ไม่สำเร็จ จนมาพบโดยบังเอิญในเว็ปไซต์ ตามลิ๊งค์นี้ จุดประสงค์ทางผู้พัฒนาไลบรานี้เพื่อเขียนแอพลงบนโทรศัพท์มือถือแอนดรอยด์ วิธีการคือเขาได้ Normalize ค่า geoid separation จาก EGM2008 ขนาดเต็มลงมาเหลือขนาดแถวคอลัมน์ 181 x 91 ความถูกต้องจะถูกลดทอนลง ผมสนใจเลยเอามาคอมไพล์บน Casio SDK พบว่าทำงานได้ ใช้เมโมรีเครื่องคิดเลขที่มีอยู่เพียงพอ แต่ก็จวนเจียนจะใช้หมดเหมือนกัน เอาละความคิดที่เคยจะเขียนโปรแกรมคำนวณสเกลแฟคเตอร์บเครื่องคิดเลขก็มาเป็นจริง อาจจะได้ค่าสเกลแฟคเตอร์ที่ไม่ละเอียดเท่าคำนวณจากคอมพิวเตอร์แต่ในระดับทศนิยมหกตำแหน่ง ถือว่าได้ครับ

เครดิตผู้พัฒนาไลบรารี Geoid

ต้องขอบคุณผู้พัฒนาคือ Stefan Röttger (stefan@stereofx.org) มา ณ ที่นี้ ติดตามผลงานได้ที่เว็บไซต์ http://www.open-terrain.org/index.php ไลบรานี้ใช้สัญญาอนุญาตแบบ New BSD License

เตือนสติเรื่องสเกลแฟคเตอร์

ผมชอบวาทะของอ.ดีบุญ เมธากุลชาติ ก็ขออนุญาตเอาจากสไลด์มาแสดง ณ ที่นี้ด้วย อ.ดีบุญเรียก Grid Scale Factor ว่าตัวประกอบมาตราส่วน ส่วน Elevation Scale Factor เรียกว่าตัวประกอบความสูง ได้ใจความครบถ้วนดีครับ และก็เตือนสติคนใช้แผนที่ดังนี้

Grid Scale Factor เมื่อคูณกับ Elevation Scale Factor จะได้ Combined Scale Factor ตัวประกอบตัวนี้คือตัวสำคัญที่จะนำไปคูนกับระยะทางที่วัดบนพื้นผิวโลกเพื่อทอนลงมาบนระนาบราบของแผนที่ (Grid Distance)

ใช้ไลบรารีแปลงพิกัด MGRS

เนื่องจากโปรแกรมนี้ต้องแปลงค่าพิกัดจากระบบพิกัดฉาก  UTM  บนดาตั้ม WGS84 ไปยังค่าพิกัดภูมิศาสตร์ เพื่อส่งไปให้ฟังก์ชั่นคำนวณหาค่าสเกลแฟคเตอร์ที่ต้องการทราบค่าละติจูด ดังนั้นผมใช้ไลบรารี mrgs พัฒนาโดย Howard Butler ไลบรานี้ใช้สัญญาอนุญาตแบบ MIT License

สิ่งที่โปรแกรมต้องการ

โปรแกรมสามารถคำนวณได้ 2 แบบคือแบบ Point Scale Factor คือแบบจุดเดี่ยวๆ สามารถคำนวณมาใช้แทนพื้นที่เล็กๆประมาณ 1 กม. x 1 กม. ได้ดี และรูปแบบที่ 2 คือ Line Scale Factor ใช้สำหรับพื้นที่ที่ใหญ่ขึ้นมา ใช้ค่าพิกัด 2 จุดหัวและท้าย โปรแกรมจะต้องการทราบค่าดังนี้

  1. เลือกโซนของยูทีเอ็ม (UTM  Zone) ตั้งแต่โซน 1 ถึง 60 และเลือกซีกโลก (Hemisphere)  เลือกได้สองอย่างคือเหนือหรือใต้เส้นศูนย์สูตร
  2. ค่าพิกัดและค่าระดับของจุดที่ต้องการทราบค่าสเกลแฟคเตอร์ ต้องการค่าพิกัดเหนือใต้ในระบบยูทีเอ็มและค่าระดับที่อ้างอิงเหนือระดับน้ำทะเลปานกลาง (Orthometric Height above Meas sea level)

ในการคำนวณตัวประกอบความสูง (Elevation Scale Factor) โปรแกรมจะนำค่าความสูงเหนือระดับน้ำทะเลปานกลางมาคำนวณเป็นค่าระดับความสูงเทียบกับระดับทรงรี (Ellipsoid Height) ที่เราไม่สามารถนำค่าระดับความสูงเหนือระดับน้ำทะเลปานกลางมาใช้คำนวณเพราะว่า ตัวอย่างเข่นในประเทศไทย ค่าระดับน้ำทะเลปานกลางจะอยู่ใต้ทรงรีประมาณ 6-42 เมตร ถ้านำไปคำนวณจะได้ค่าตัวประกอบความสูงที่ไม่ถูกต้อง

ดาวน์โหลดโปรแกรม

ไปที่หน้าดาวน์โหลด Download มองหาโปรแกรมสำหรับเครื่องคิดเลข Casio fx-9860 G II SD ดาวน์โหลดไฟล์โปรแกรมชื่อ SFACTOR.G1A ติดตั้งลงเครื่องคิดเลข

เริ่มต้นใช้งาน

เมื่อเมนูหลัก (Main Menu) เมื่อเลื่อนลูกศรมาที่ไอคอนโปรแกรมกดคีย์ “EXE” จะเข้ามาในโปรแกรมดังรูปด้านล่าง จะเห็นเมนูด้านล่างเรียงรายกันไป ได้แก่

Sett- Setting (ตั้งค่าโซนยูทีเอ็มและเลือกซีกโลก)

PSF – Point Scale Factor ( คำนวณหาค่าสเกลแฟคเตอร์ของจุดเดี่ยว

LSF – Line Scale Factor (คำนวณหาค่าสเกลแฟคเตอร์เฉลี่ยจากจุดสองจุด)

Info – Information (แสดงไลบรารีที่ผมใช้งานอยู่ ให้เครดิตแก่พัฒนา)

Exit – Exit Program (ออกจากโปรแกรม)

ตั้งค่ายูทีเอ็ม (UTM Settings)

ทีเมนูหลักกดคีย์ F1 – Sett จะเห็นหน้าตาจอภาพเครื่องคิดเลขดังนี้

เนื่องจากโปรแกรมบนเครื่องคิดเลขมีข้อจำกัดมากๆ ผมไม่สามารถใส่ระบบพิกัดได้มากเหมือน Surveyor Pocket Tools จึงจำกัดแค่ datum “WGS84” เท่านั้น สำหรับประเทศไทยก็เลือกโซนได้สองโซนคือ 47 และ 48 ตัวอย่างที่จะแสดงต่อไปเลือกเป็นโซน 47 ส่วนซีกโลก (Hemisphere) เลือกเป็น “North” กดคีย์ F6 – OK

 

คำนวณ Point Scale Factor

ตัวอย่างที่คำนวณต่อไปจะยกมาจากตัวอย่างที่แสดงในบล็อกของ Surveyor Pocket Tools เพื่อเปรียบ

เทียบผลลัพธ์กันได้ กลับมาที่เมนูหลักกดคีย์ F1-Sett ป้อนค่าพิกัด N=1499662.173, E=683068.285, H=0.791 

เสร็จแล้วกดคีย์ F1 – Calc เพื่อคำนวณสเกลแฟคเตอร์ของจุดนี้

ผลลัพธ์จะแสดงออกมาดังรูปด้านล่าง โปรแกรมจะแสดงค่าพิกัดและค่าระดับมาให้ จากนั้นแสดงค่าละติจูดและลองจิจูด แสดงความสูงเทียบกับทรงรี = -29.598 m กดคีย์ F2-PgDn เพื่อเลื่อนไปดูหน้าต่อไป

จะเห็นค่า Geoid Separation หรือ Geoid Height = -30.389 m และได้ค่า Elevation Scale Factor = 1.00000465, Grid Scale Factor = 1.00001458 สุดท้ายค่า Combine Scale Factor = 1.00001924 ลองเทียบกับค่าที่คำนวณด้วย Surveyor Pocket Tools ดังนี้

ค่า Combined Scale Factor  = 1.0000192644 ต่างกันที่ทศนิยมแปด ผมถือว่าใช้ได้เพราะเราใช้แค่ทศนิยมที่หกก็เพียงพอแล้ว ความต่างที่แตกต่างจากที่ผมเคยบอกไปแล้วคือมาจากค่า Ellipsoid height ที่คำนวณจากโปรแกรมเครื่องคิดเลขได้ -29.598 เมตร ส่วนค่าความสูงทรงรีที่ได้จาก Surveyor Pocket Tools ได้ค่า -29.776 เมตร ต่างกันประมาณ 20 ซม.

คำนวณหาค่า Line Scale Factor

จะแสดงไดอะแกรมของการคำนวณค่าสเกลแฟคเตอร์เฉลี่ยดังรูปด้านล่าง

ที่โปรแกรมเครื่องคิดเลขกลับมาที่เมนูหลัก

กดคีย์ F3-LSF จะเห็นหน้าตาโปรแกรมดังรูปด้านล่าง ป้อนค่าพิกัดจุดที่ 1 และกดคีย์ F2-Next เพื่อไปป้อนจุดที่ 2

พร้อมแล้วกดคีย์ F1-Calc ต่อไปจะได้ผลลัพธ์ดังนี้ เลื่อนลงไปดูหน้าต่อไปก็กดคีย์ F2-PgDn

สรุปแล้วจะได้ค่าเฉลี่ย Combined Scale Factor = 1.00082320

เปรียบเทียบกับค่าที่ได้จาก Surveyor Pocket Tools เท่ากับ 1.0008232302 เช่นเคยค่าต่างกันที่ทศนิยมแปด สามารถนำไปใช้งานได้

เครดิตไลบรารี

ที่เมนูหลักกดคีย์ F5-Info จะเห็นเครดิตดังรูปด้านล่าง

โปรแกรมนี้มีขนาดใหญ่กว่าโปรแกรมอื่นๆก่อนเกือบสองเท่าเพราะว่าใช้ไลบรารีอื่นๆสามไลบรารีด้วยกัน ก็ติดตามชุดโปรแกรมเครื่องคิดเลข Casio fx-9860 G กันต่อไปครับ

การตั้งค่า (Settings) ของ Surveyor Pocket Tools

Surveyor Pocket Tools ออกมาตั้งนานแล้วเพิ่งจะเปิดโอกาสให้ผู้ใช้ได้ตั้งค่าต่างๆเช่นจำนวนทศนิยมของค่าพิกัด จำนวนทศนิยมของระยะทาง ความสูง หรือแม้แต่ของมุม เมื่อเปิดโปรแกรม Surveyor Pocket Tools จะเห็นมีไอคอน Settings รูปเกียร์เพิ่มดังรูป

python_2017-07-15_09-19-59

เมื่อดับเบิ้ลคลิกเข้าไปจะเห็นไดอะล็อก

python_2017-07-15_09-24-21

จะมีแท็บ Unit, Linear Precision, Angular Precision, Google Maps และ Google Earth เรียงรายกันตามลำดับ เริ่มต้นที่ Unit ออกแบบเพื่ออนาคตสำหรับหน่วยอื่นที่ไม่ใช่หน่วย metric แต่ตอนนี้สนับสนุนหน่วยเมตริกอย่างเดียวครับ

Linear Precision

มาดูที่ Linear Precision คือตั้งความละเอียดหรือจำนวนทศนิยมให้กับหน่วยที่เป็นเชิงเส้นทั้งหลายเช่นระยะทาง ความสูง พื้นที่หรือแม้กระทั่งจำนวนทศนิยมค่าพิกัดของระบบพิกัดฉาก และจำนวนทศนิยมของสเกลแฟคเตอร์

python_2017-07-15_10-47-21

ลองคำนวณการแปลงพิกัดด้วยทูลส์ Transform Coordinates ตรวจสอบจำนวนทศนิยม

python_2017-07-15_10-45-24

Angular Precision

สำหรับ Angular Precision ตั้งความละเอียดหรือจำนวนทศนิยมของมุมทั้งหลายเช่นค่าพิกัดในระบบภูมิศาสตร์หรือมุม convergence ดังรูปด้านล่าง

python_2017-07-15_11-19-19

การใช้งานลองดู UTM-Geo Converter 

python_2017-07-15_11-22-39

python_2017-07-15_11-25-01

ตั้งค่าสำหรับ Google Maps

ตั้งค่าสำหรับปักหมุดบน Google Maps ได้แก่รูปแบบของหมุด สี ดังรูปด้านล่าง

python_2017-07-15_11-27-06

ตัวอย่างการใช้งานโดยใช้ทูลส์ Geodesic Distance 

python_2017-07-15_11-36-42

ลองปักหมุดจะเห็นรูปแบบหมุด สี และสีของเส้นที่เราตั้งค่าไว้ดังรูปด้านล่าง

firefox_2017-07-15_11-36-59

ตัวอย่างการใช้งานคำนวณหาพื้นที่ Compute Area 

python_2017-07-15_14-26-57

ปักหมุดพื้นที่ลงไป

firefox_2017-07-15_14-32-18

บางสถานการณ์ไม่ต้องการรูปหมุด ต้องการแค่วงรอบพื้นที่ ตั้งคาใหม่ด้วยการไม่ติ๊กที่ Draw Pin ดังรูปด้านลาง

python_2017-07-15_14-33-21

จะได้ผลลัพธ์บน Google Maps ดังนี้

firefox_2017-07-15_14-36-03

การตั้งค่าสำหรับ Google Earth

คล้ายๆ ตั้งค่าให้ Google Maps ที่ผ่านมา ดูรูปด้านล่าง

python_2017-07-15_14-40-42

ตัวอย่างการใช้งานขอใช้ทูลส์ Line Scale Factor 

python_2017-07-15_14-43-03

ปักหมุดลง Google Earth ป้อนชื่อไฟล์ก่อนแล้วจะสวิชท์เข้า Google Earth

googleearth_2017-07-15_14-47-59

การตั้งค่า (settings) จะเก็บไว้ที่ไฟล์ settings.xml ไฟล์นี้อยู่ที่โฟลเดอร์ “Appdata” ถ้าเป็นเครื่องผมเมื่อเปิดด้วยไอคอน “Example Data”

explorer_2017-07-15_14-52-19

ความจริงในงานสำรวจต้องการค่าพิกัดฉากที่ทศนิยมหลักที่ 3 ซึ่งเป็นหลักมิลลิเมตรและเพียงพอ ส่วนค่าพิกัดภูมิศาสตร์เช่นแล็ตติจูดและลองจิจูดจะละเอียดเทียบเท่าระดับมิลลิเมตร ต้องการทศนิยมมากกว่าตำแหน่งที่ 5 ขึ้นไปเช่น 23°48’23.78768″N อย่างไรก็ตาม Surveyor Pocket Tools เปิดโอกาสให้ตั้งได้ตามความต้องการของผู้ใช้ พบใหม่ในตอนต่อไปครับ

แนะนำการใช้เส้นโครงแผนที่ความเพี้ยนต่ำ (Low Distortion Projection)

 Low Distortion Projection คืออะไร

เส้นโครงแผนที่ทุกอันจะมีความเพี้ยน (distortion) เป็นความจริงที่ไม่สามารถหลีกเลี่ยงได้ ความเพี้ยนนี้ก็คือระยะทางที่ต่างกันระหว่างวัดจริงๆของจุดสองจุดบนพื้นผิวภูมิประเทศของโลกกับระยะทางที่ได้จากแผนที่ ความเพื้ยนนี้จะมีความสลักสำคัญอย่างมาก ดังตัวอย่างเช่นที่ผมได้กล่าวไปแล้วใน ตอนก่อนหน้านี้ ที่ค่าความเพื้ยนมากถึง ±823 ppm (ระยะทาง 1 กม. จะมีความเพี้ยนถึง 823 มม. หรือ 82.3 ซม.)

ความเพี้ยนนี้อาจนำไปสู่ความคิดที่ว่าระยะทางตัวไหนกันแน่ที่เป็นค่าที่ถูกต้อง ค่าความเพี้ยนนี้ไม่สามารถกำจัดออกไปได้ แต่สามารถทำให้น้อยลงได้ ด้วยวิธีการที่ผมจะนำเสนอต่อไปคือ Low distortion projection (LDP) ถ้าแปลอนุมานได้วา เส้นโครงแผนที่ความเพี้ยนต่ำ ต่อไปผมจะเรียกสั้นๆว่า LDP

LDP คือเส้นโครงแผนที่รักษามุม (Conformal Projection) และนำมาประยุกต์ใช้ในพื้นที่กว้างใหญ่ โดยที่ค่าความเพี้ยนนั้นน้อยจนสามารถที่จะยอมรับได้

ความเป็นมา

แรกเริ่มเดิมทีในอเมริกา ตั้งแต่ทางการได้ประกาศใช้ระบบพิกัด State Place Coordinate System (SPC) มาตั้งแต่ NAD27 จนกระทั่ง NAD83 และตัว NAD83 เองก็มีการปรับแบบ realizationเป็นระยะๆ ปัญหาเรื่องสเกลแฟคเตอร์ ที่บางรัฐมีค่าความเพี้ยนมาก ทำให้ยุ่งยากต่อการปฏิบัติงานในสนามของช่างสำรวจ ในช่วง 20 ปีที่ผ่านมา ได้มีคนนำ LDP มาใช้ ทำให้มีการถกเถียงกันในวงกว้างพอสมควร ว่าอาจจะนำไปสู่่ความไม่มีมาตรฐาน แต่สุดท้ายทางการ National Geodetic Survey (NGS) ได้ออกประกาศแนวทางการนำไปใช้ ทำให้การถกเถียงสิ้นสุดลง มีการนำไปใช้อย่างกว้างขวาง ในการออกแบบสิ่งก่อสร้างโครงการต่างๆ ทำให้งานสำรวจในภาคสนามได้รับความสะดวกมากขึ้น เช่นงานสำรวจเก็บพื้นที่ภูมิประเทศ งานสำรวจวางผัง ที่ไม่ต้องกังวลกับค่าสเกลแฟคเตอร์ และสุดท้ายสามารถแปลงค่าพิกัดบน LDP เหล่านี้ไปหาระบบพิกัดฉากของรัฐ (SPC) ได้ทำให้ไม่มีปญหาสำหรับการแปลงข้อมูลในงาน GIS

ชนิดของความเพี้ยน

ความเพี้ยน (distortion) เป็นผลจากการที่นำลักษณะของวัตถุบนพื้นโลกที่โค้งไปแสดงผลบนระนาบราบบนกระดาษ ไม่สามารถกำจัดได้ แต่ทำให้มันน้อยลงได้ ความเพี้ยนมี 2 ประเภทคือ

  1. ความเพี้ยนเชิงเส้น (Linear distortion)  คือระยะทางที่ต่างกันระหว่างวัดจริงๆของค่าพิกัดของจุดสองจุดบนพื้นผิวภูมิประเทศของโลกกับระยะทางที่ได้จากคำนวณจากค่าพิกัดบนระบบพิกัดฉาก ใช้สัญลักษณ์ δ
    • การแสดงความเพี้ยนจะนิยมใช้อัตราส่วน ppm – part per million คือหนึ่งล้านต่อล้านส่วน ลองมาดูที่ไปที่มา ระยะทาง 1 กม. ถ้าทำเป็นหน่วยมิลลิเมตร จะได้ 1 กม. = 1000 ม. = 1000 x 1000 = 1000000 มิลลิเมตร ดังนั้นถ้า 20 ppm จะหมายถึง 20 มม.ต่อ 1 กม. (ต่อหนึ่งล้านมิลลิเมตร)
    • เครื่องหมาย δ สามารถเป็นได้ทั้งบวกและลบ ถ้าเป็นลบจะหมายถึงว่าระยะทางบนระบบพิกัดฉากจะสั้นกว่าระยะทางจริงบนพื้นโลก ถ้าเครื่องหมายเป็นบวกแสดงว่า ระยะทางบนระบบพิกัดฉากจะยาวกว่าระยะทางจริงๆที่วัดบนพืนโลก
  2. ความเพี้ยนเชิงมุม (Angular distortion) ความเพี้ยนของมุมทิศเหนือของระบบพิกัดฉาก (grid north) กับทิศเหนือจริง (geodetic north) เรียกความต่างของมุมนี้อีกชื่อหนึ่งว่า convergence แทนด้วยสัญลักษณ์ γ
    • มุม convergence จะเป็นศูนย์ถ้าจุดนั้นอยู่บนเส้น central meridian (CM) ของ TM หรือ standard parallel ของ LCC และค่ามุมนี้จะมากขึ้นเรื่อยๆตามระยะทางที่ไกลออกมาจาก CM ความสำคัญของความเพี้ยนเชิงมุมนี้จะไม่สำคัญมากเท่ากับ ความเพี้ยนเชิงเส้น ความเพี้ยนเชิงมุมสามารถจำกัดมันได้ ด้วยจำกัดพื้นที่ของโครงการไม่ให้ใหญ่มากเกินไป (ระยะทางจาก CM ไม่มากเกินไป)

การเลือกเส้นโครงแผนที่

การเลือกเส้นโครงแผนที่สำหรับการทำแผนที่สเกลใหญ่ๆ สำหรับ LDP เท่าที่นิยมกันมากจะมีอยู่ 3 ประเภทเท่านั้นคือ

  1. Transverse Mercator (TM) ใชักันมากเส้นโครงนี้ได้จากการใช้ทรงกระบอกในแนวนอนราบมาครอบทรงรี ที่เราคุ้นกันดีก็คือ UTM พื้นที่ที่เหมาะสมคือประเทศที่มีพื้นที่มีความยาวจากเหนือไปใต้ เช่นประเทศไทยก็เหมาะสมกับแบบนี้
  2. Lambert Conformal Conic (LCC) ใช้กันมากพอสมควรในหลายๆประเทศ โดยเฉพาะอเมริกาและยุโรป ได้จากการใช้ทรงกรวยมาครอบทรงรีในแนวตั้ง เหมาะสมสำหรับประเทศที่มีพื้นที่ที่ยาวจากตะวันตกไปตะวันออก (ระบบพิกัดของเมียนมาร์ก็เคยใช้เส้นโครงนี้ก่อนจะเปลี่ยนมาใช้ UTM ในระบบพิกัด Myanmar Datum 2000 ในปัจจุบัน  ซึ้งพื้นที่ของเมียนมาร์จะยาวจากเหนือลงมาใต้คล้ายของประเทศไทย)
  3. Oblique Mercator (OM) เป็นเส้นโครงแผนที่ที่ได้จากการใช้ทรงกระบอกแบบเอียงเป็นมุม มาครอบทรงรีให้แนวตัดพาดผ่านไปตามพื้นที่ พื้นที่ที่จะเลือกมาใช้เส้นโครงแบบนี้จะเป็นลักษณะยาวเฉียงๆจากตะวันออกเฉียงเหนือลงมาทิศตะวันตกเฉียงใต้ หรือตะวันตกเฉียงเหนือลงมาทิศตะวันออกเฉียงใต้

AcroRd32_2017-03-21_12-54-07

สำหรับ OM ถ้าจินตนาการลำบาก ลองดูรัฐอลาสก้า โซน 1 (Alaska zone 1) ของอเมริกาที่ใช้เส้นโครงแผนที่ OM ลองดูจากรูปด้านล่างเข้าใจได้ง่าย

mappro choice

จะเห็นรอยประ รอยนี้คือที่ทรงกระบอกสัมผัสกับทรงกลม (aposphere) ย้ำว่าทรงกลมไม่ใช่ทรงรี จากนั้นถึง project จากทรงกลมนี้ลงบนทรงรีอีกที สำหรับ OM นั้นซับซ้อนกว่าเส้นโครงแผนที่อื่นเล็กน้อย รอยประ (initial line) นี้ในพารามิเตอร์การแปลงพิกัดจะกำหนดเป็นค่าอะซิมัทเรียกว่า azimuth of initial line และเส้นรอยประนี้จะไปตัดกับศูนย์สูตรของทรงกลม aposphere ที่ natural origin เส้นรอยประนี้จะกำหนดสเกลให้เรียกสเกลนี้ว่า scale factor of initial line  และจะกำหนดจุดใดจุดหนึ่งที่อยู่บนเส้นประนี้เรียกว่า center of projection

มิตรประเทศแถวๆบ้านเรา ก็มีมาเลเซียที่ใช้เส้นโครงแผนที่นี้อยู่ เรียกว่า Malaysia Rectified Skew Orthometric (Malaysia RSO) ประเทศอื่นที่ใช้ได้แก่ สวิตเซอร์แลนด์, มาดากัสการ์, ฮังการี

AcroRd32_2017-03-22_15-44-02

พฤติกรรมความเพี้ยนเชิงเส้นของเส้นโครงแผนที่

ก่อนจะไปถึงการออกแบบและประยุกต์ใช้เส้นโครงความเพี้ยนต่ำ ลองมาศึกษาพฤติกรรมของความเพี้ยนเชิงเส้นว่าขึ้นอยู่กับอะไรบ้าง เมื่อรู้พฤติกรรมนี้แล้วสามารถนำไปประยุกต์ใช้ได้อย่างเหมาะสม

ความเพี้ยนเชิงเส้นเกิดจากตัวแปรสองตัวแปรคือความโค้งของผิวโลกและความสูงเหนือทรงรี มาลองพิจารณาความเพี้ยนที่เกิดจากตัวแปรแรกคือความโค้งของผิวโลก ตารางด้านล่างแสดงความเพี้ยนเชิงเส้นในแนวราบเทียบกับความกว้างของแต่ละโซนของเส้นโครงแผนที่

EXCEL_2017-05-16_15-24-46

จะเห็นว่าถ้าความกว้างของโซนเส้นโครงแผนที่ไม่กว้างมากจะมีค่าความเพี้ยนที่ต่ำ ส่วนความกว้างของโซน UTM ผมคิดที่ latitude 13° พาดผ่านกรุงเทพฯ ความกว้างประมาณ 650 กม. โซน UTM จะกว้างมากที่สุดที่เส้นศูนย์สูตร จากนั้นจะค่อยๆสอบเล็กลงตาม latitude ที่เพิ่มมากขึ้น ตัวอย่างเช่นรัฐทางเหนือของอเมริกาที่ latitude 40° จะมีความกว้างประมาณ 410 กม.

ความเพี้ยนเชิงเส้นอีกตัวแปรหนึ่งจะขี้นอยู่กับค่าระดับความสูงเมื่อเทียบกับทรงรี (Ellipsoidal height) โดยประมาณแล้ว ความสูงที่เปลี่ยนจากเดิม 30 เมตร ค่าความเพี้ยนเชิงเส้นจะเปลี่ยนไปประมาณ ± 4.7 ppm คงที่ พิจารณาจากตารางด้านล่าง

EXCEL_2017-05-16_16-25-07

การประยุกต์และนำไปใช้

สองตัวแปรนี้เวลาคิดความเพี้ยนเชิงเส้นรวมจะเอามาคูนกัน สมมติว่าต้องการออกแบบความกว้างของโซนของเส้นโครงแผนที่ Transverse Mercator กว้าง 81 กิโลเมตร มีค่าความเพี้ยนทางราบ ±10 ppm ยาวขึ้นไปทางเหนือ 100 กม. ถ้าใช้เส้นโครงแผนที่ TM หมายเหตุเหนือ-ใต้ที่ longitude เดียวกันจะมีค่า grid scale factor เท่ากัน ดังนั้นจะยาวมากกว่านี้ก็ได้

ผมกำลังสมมติเล่นๆว่าถ้าต้องการออกแบบและสร้างเส้นโครงแผนที่ สำหรับกรุงเทพมหานคร รวมปริมณฑลเช่นสมุทรปราการ. นนทบุรี, ปทุมธานี จะสามารถทำได้ไหม ค่าระดับบนพื้นดินของกรุงเทพและปริมณฑล ผมไม่มีตัวเลขเป๊ะ แต่ค่าเฉลี่ยสูงต่ำน่าจะไม่เกิน 10 เมตร ซึ่งผมคำนวณค่าความเพี้ยนที่เกิดจากความสูงได้ ±1.6 ppm เมื่อนำความเพื้ยนทั้งสองตัวแปรมาคูนกันจะได้ ±16 ppm ซึ่งไม่เกินตัวเลขในฝันคือไม่ควรเกิน ±20 ppm

สำหรับหนึ่งกม.ระยะทางบนระบบพิกัดฉากกับระยะทางบนพื้นดิน ต่างกันแค่ 16 มม. ถือว่าน้อยมากครับ สมมติว่ามีหมุด GPS หนึ่งคู่ คำนวณระยะทางบนระบบพิกัดฉาก LDP ห่างกัน 100.0 เมตรพอดี  จากนั้นเอากล้อง  total station มาทดสอบวัดระยะทางซึ่งควรจะได้ 100.0016 เมตร ถ้าตัวเลขค่าความเพี้ยนเป็นบวก หรือวัดได้ 99.9984 เมตร ถ้าค่าความเพี้ยนเป็นลบ ต่างกัน 1.6 มม. ผมก็ยังถือว่าน้อยนะครับ

เช่นเดียวกันถ้าเอากล้อง total station มาวางผัง ก็ยังรับกันได้สบายๆ การสำรวจภูมิประเทศก็สามารถทำได้ตามปกติ การเก็บขอบเขตที่ดินก็สามารถทำได้เช่นเดียวกัน และที่สำคัญที่สุดคือระบบพิกัดบน LDP สามารถแปลงไปหาระบบพิกัดฉาก UTM หรือ Geographic ได้ตลอดเวลาที่ต้องการ ส่วนใหญ่ซอฟแวร์ด้าน GIS หรือด้าน CAD ทั้งหลายก็สนับสนุนการใช้ LDP ได้อยู่แล้วในขณะนี้ เพียงแต่ค่าพารามิเตอร์ของ LDP  ต้องไปกำหนดให้ซอฟแวร์เหล่านี้ได้รู้จัก

ตัวอย่างการใช้งาน

ตัวอย่างการใช้งานผมเข้าไปศึกษารัฐโอเรกอนของอเมริกาครับ เข้าไปดูได้ตามลิ๊งค์นี้ Oregon Coordinate Reference System และมีคู่มือกล่าวถึงที่มา การศึกษาออกแบบอ่านได้ตามลิ๊งค์นี้ OCRS Handbook & User Guide ซึ่งรัฐโอเรกอนพื้นที่เล็กกว่าประเทศไทยครึ่งหนึ่ง จำนวน LDP ทั้งหมดในรัฐนี้ 39 เส้นโครงแผนที่ มีครบหมดไม่ว่าจะเป็น Transverse Mercator, Lambert Conformal Conic และ Oblique Mercator ดูตามรูปด้านล่าง

chrome_2017-05-16_20-10-55

เครื่องมือตัวใหม่

Init Design LDP เป็นเครื่องมือตัวใหม่ที่กำลังพัฒนาครับ เนื่องจากการออกแบบ LDP ค่อนข้างจะมีการลองแล้วทดสอบหาค่าความเพี้ยนเปรียบเทียบกัน โดยมีการขยับย้ายแกน central meridian  และสลับกับการเปลี่ยนค่า scale factor (k0) ที่แกน central meridian ด้วย ทำให้โปรแกรมไม่สามารถเขียนได้ลึกซึ้งขนาดนั้น จึงเป็นเครื่องมือที่มาช่วยออกแบบในเบื้องต้น

Create LDP เป็นเครื่องมืออีกตัวที่กำลังพัฒนาเช่นเดียวกัน เมื่อได้พารามิเตอร์ของเส้นโครงแผนที่ต่ำแล้วสามารถนำมาป้อนและจัดเก็บเข้าฐานข้อมูล นอกจากนี้ยังสามารถคำนวณหาค่าความเพี้ยน แปลงพิกัดจากระบบพิกัดมาตรฐานทั่วๆไป มายัง LDP ได้โดยที่ LDP สามารถออกแบบและเก็บไว้ในฐานข้อมูลได้ อนาคตจะนำ LDP นี้ไปรวมกับการแปลงพิกัดทั่วๆไปเช่น Transform Coordinates, File Transform Coordinates หรือ Area

 

ถ้าโปรแกรมทูลส์สองตัวนี้เสร็จก็น่าจะได้นำจะมาลองออกแบบ LDP ดูกันเป็นกรณีศึกษา เริ่มตั้งแต่หาค่าความสูงจาก ellipsoid ซึ่งเป็นตัวแทน (h0) ที่จะว่าง LDP บนระนาบนี้ จากนั้นจะหาจุดศูนย์กลางของพื้นที่เพื่อวาง Central meridian จากนั้นกำหนดค่า scale factor (K0) และที่สำคัญคือการคำนวณหาค่าความเพี้ยนเพื่อเปรียบเทียบ จากนั้นจะมีการปรุงและกลั่น ปรับค่าโดยการขยับ Central Meridian หรือปรับค่า K0 จนความเพี้ยนเฉลี่ยในพื้นที่โครงการมีค่าน้อยที่สุด

แนวทางการออกแบบนี้ผมเดินตามทาง Michael L. Dennis ที่ตัวผมเองนับถือและคิดว่าเขาเป็นเจ้าพ่อในด้านนี้ มีงานเขียนออกมามากมายเพราะเป็นที่ปรึกษาและรับงานออกแบบ LDP ในหลายๆรัฐของอเมริกา ลองค้นชื่อนี้กับคำว่า LDP  ดูจะเห็นลิ๊งค์มากมาย

ส่วนจะมีใครนำ LDP ไปใช้ที่ไหน อย่างไร ก็เป็นเรื่องอนาคตที่ดี ถ้ามีหน่วยงานคล้ายๆของรัฐโอเรกอน มาออกแบบและตั้งเป็นมาตรฐานก็น่าจะดี นอกจากจะสะดวกสำหรับช่างสำรวจทำแผนที่หน้างานหรืองานสำรวจสำหรับวางผัง ไม่ว่าจะเป็นโครงการเล็กๆจนถึงโครงการใหญ่ๆและยาวๆเช่นทางด่วน ถนนมอเตอร์เวย์ ก็ยังสามารถประยุกต์ใช้งานกันได้ดี

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

 

 

ปลดพันธนาการ PyQt5 ด้วย PySide2

ตอนนี้ถือว่ามาเล่าสู่กันฟังจากประสบการณ์ เป็นเรื่องโปรแกรมมิ่ง ถ้าไม่สนใจเรื่องโปรแกรมมิ่งก็ผ่านไปได้ครับ

PyQt5 กับลิขสิทธิ์แบบ GPL v3

ผมเขียนไพทอนด้วยการใช้ PyQt5 มาได้สักระยะเวลาหนึ่ง น่าจะสองปีกว่าได้ ยอมรับว่าชอบมากๆ ก็ไม่ได้ระแวดระวังเรื่องกฎหมายลิขสิทธิ์เท่าไหร่นัก ลิขสิทธิ์ของ PyQt5 เป็นแบบ GPL v3 ซึ่งสาระโดยรวมๆสามารถเอาไปใช้ได้สองกรณีคือ พัฒนาโปรแกรมแบบเปิดโค๊ด (open source) และแจกจ่ายฟรีพร้อมโค๊ด กรณีนี้ไม่จำเป็นต้องเสียเงินค่าลิขสิทธิ์ แต่ถ้าเป็นกรณีที่สองคือการพัฒนาโปรแกรมเพื่อการค้าและปิดโค๊ด จะต้องเสียค่าลิขสิทธิ์ประมาณ 500US$ ต่อปี ซึ่งไม่น่าจะมากมายนัก ผมเองเอา PyQt5 มาใช้และแจกจ่ายโปรแกรมของผมให้ฟรีก็จริงแต่ปิดโค๊ด ยังไม่พร้อมที่จะเปิดโค๊ดและจ่ายค่าลิขสิทธิ์เนื่องจากไม่ได้หารายได้จากโปรแกรมที่แจกจ่ายไป

ทางสองแพร่ง

ผมลองมองหาเครื่องมือพัฒนาตัวอื่นๆที่มีลิขสิทธิ์เอื้อแบบปิดโค๊ดแต่ยังสามารถใช้ได้ฟรี ที่อ่านๆมาแล้วอยู่ในใจคือ Kivy Platform

  • Kivy framework Platform รองรับภาษาไพทอน ข้อดีหลายอย่างคือ  cross platform  เขียนโปรแกรมครั้งเดียวสามารถนำไปคอมไพล์ บิวด์ได้บน Linux, Mac OS หรือสามารถพอร์ตลงไปหามือถือ Android, IOS ก็ได้ ที่สำคัญคือเป็นโครงการเปิดโค๊ด มีลิขสิทธิ์แบบ MIT License ซึ่งนอกจากจะเปิดโค๊ดแล้ว ยังอิสระเสรีมาก ซอฟแวร์ที่ใช้ลิขสิทธิ์แบบนี้ ผู้ใช้สามารถเอาไปทำอะไรก็ได้ตั้งแต่ก๊อปปี้ แก้ไข รวม แจกจ่ายหรือกระทั่งนำไปขายก็ได้ สุดท้ายถ้าใช้ Kivy พัฒนาก็ยังสามารถนำโปรแกรมไปทำการค้าได้
  • แต่ปัญหาของผมคือ โปรแกรมที่เขียนมีขนาดค่อนข้างใหญ่แล้ว การพอร์ตจากโค๊ดของ PyQt5 ไปยัง Kivy ไม่ใช่่จะทำได้ง่ายๆ เนื่องจาก Kivy มีรูปแบบ GUI ของตัวเอง ไม่ง่ายครับต้องใช้เวลามาก

PySide2 ผู้มาช่วยชีวิต

ในขณะที่กำลังจะจมน้ำอยู่นั้น นึกถึง PySide รุ่นแรกซึ่งรองรับและใช้ได้แค่ Qt4 ไม่ใช่ Qt5 ที่ผมตกร่องปล่องชิ้นไปแล้ว การจะ downgrade กลับหลังหันไปใช้ Qt4 ผ่าน PySide รุ่นหนึ่งไม่ได้ง่ายต้องรื้อโค๊ดพอสมควร เผลอๆอาจจะยากกว่าการกลับไปขอคืนดีกับแฟนเก่า 🙂 ส่วนเรื่องลิขสิทธิ์เท่าที่ทราบมาคือ PySide ใช้ลิขสิทธิ์แบบ LGPL v2.1 คือสามารถนำไปใช้พัฒนาโปรแกรมสำหรับปิดหรือเปิดโค๊ดได้ ทั้งแจกจ่ายฟรีและขายได้ เพียงแต่ไปเอาไลบรารีตัวไหนที่เป็น LPGL มาใช้จะต้องคงความเป็น LGPL ไว้คือต้องเปิดโค๊ตไลบรารีตัวนั้นไปให้ผู้ใช้ด้วย  ข่าวร้ายของ PySide รุ่นหนึ่งคือโครงการตาย ไม่ขยับมาแล้วสามปีกว่า ผมลองค้นเข้าไปลึกๆ ปรากฎว่าโครงการนี้ตอนแรกๆ ได้มีนักพัฒนาอิสระ fork โครงการมาบน Github กลุ่มเล็กๆต่อมาได้ย้ายและไปพัฒนาต่อเป็นทางการจาก Qt Company เจ้าของ Qt framework ตัวจริงเสียงจริง เหมือนฟ้ามาโปรด แต่ยังไม่แน่ใจว่าโค๊ดเดิม PyQt5 ของผมจะ compatible กับ PySide2 แค่ไหน

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

PySide2 ใช้ลิขสิทธิ์แบบ LGPL v2 เหมือนกันกับ PySide รุ่นหนึ่ง เมื่อดาวนโหลดมาแล้วก็ติดตั้ง มาลองดูว่าพอไปได้ไหม ผมใช้เวลาว่างๆตอนเลิกงานลองไปหก เจ็ดวัน สำเร็จครับ ส่วนใหญ่ใช้ได้กับโค๊ดเดิม แค่ตอน import ไลบรารีเปลี่ยนแค่หัวจาก PyQt5 มาเป็น PySide2 มีส่วนนิดเดียวผมแก้ไขโค๊ดใหม่ให้เข้ากับ PySide2 แต่น้อยมาก และที่เจออีกหนักอีกหน่อยคือ ระบบรายงานผลการแสดงภาพบนจอมอนิเตอร์คือ Screen ยังไม่เสร็จ ทำให้ผมไม่สามารถตรวจได้ว่าผู้ใช้ใช้จอที่ resolution เท่าไหร่ มี dot pixel  ratio เท่าไหร่ อันนี้สำคัญเพราะว่าจอ HiDPI เช่นจอ 4K ทั้งหลาย ตอนนี้ใช้กันมากแล้ว เมื่อ PySide2 ไม่มีให้ ต้องไปหาโค๊ดมาช่วย ใช้ Windows API ไปพลางๆก่อน พอเสร็จเมื่อไหร่ ค่อยกลับมาใช้โค๊ดของ PySide2 ที่เสร็จแล้วต่อ

ผมพูดได้ว่าตอนนี้โปรแกรมของผม เกือบจะ 99.9% ใช้ของเดิม มาปรับแต่งเองเพียง 0.1% มันง่ายหรือเพราะโปรแกรมผมไม่ได้ใช้เขียนอะไรพิศดารหรือปล่าวเช่นระบบกราฟฟิคที่เลิศหรู แต่เอาละต้องขอบคุณทีมงาน PySide2 มา ณ ที่นี้ด้วยครับ

ข้อจำกัด PySide2 รุ่นพัฒนา

ข้อจำกัดของ PySide2 รุ่นพัฒนายังมีอยู่มากครับ บางครั้งผมรันโปรแกรมผ่านบรรทัดที่ผิด ไม่มีการนับแปดครับ โดนน๊อคกลางอากาศค้างไปดื้อๆ ก็น่าจะอีกสักพักครับ ที่ทีมงานของ Qt จะบิวท์มาให้ใช้กันใหม่ เพราะของเก่าผ่านมาหกเดือนกว่าแล้ว ตัวใหม่น่าจะเสถียรกว่า ดีกว่า

แปลงเป็นไฟล์ Execute ให้รันได้ นรกของโปรแกรมเมอร์ไพทอน

ปกติผมใช้ PyInstaller  สำหรับแปลงโค๊ดไพทอนเป็น execute file (exe) ที่สามารถนำไปรันได้ ทั้งที่ข้อดีของไพทอนคือเขียนง่าย อ่านง่าย ทรงพลัง และไลบรารีที่มีให้เลือกให้ใช้มากมายมหาศาล แต่เป็นที่รู้กันว่างานแปลงไฟล์จากโค๊ดไปเป็นไฟล์ exe ที่รันใช้งานได้ มันเป็นงานสุดหินสุดโหด ตอนผมเริ่มต้นใหม่ๆ ผมก็ไม่รู้ว่าไลบรารีตัวไหน ต้องการขนเอาไฟล์อะไรไปบ้างเพื่อให้สามารถรันได้ บางตัวขนกันไปเป็นโฟลเดอร์ คือแบบเรือพ่วงลากกันไปเป็นพวงๆ ตอนหลังมารู้ว่า มีไฟล์ hooks ที่ PyInstaller  อ่านมาเพื่อตัดสินใจว่าจะขนอะไรไปให้ โฟลเดอร์ไหน ก็ง่ายขึ้น ไฟล์ hooks ส่วนใหญ่มากับ PyInstaller  ถ้าไม่มีก็ไปค้นหาดาวน์โหลดมาได้

ตอนนี้ PySide2 ยังมีนักพัฒนาเอาไปใช้ในวงจำกัดอยู่ จึงไม่มีไฟล์ hooks ปล่อยมา นรกกลับมาเริ่มต้นกับผมอีกครั้ง ต้องลองทดสอบว่า PySide2 เอาอะไรไปใช้บ้าง ตอนนี้ขณะเขียนบทความนี้ ยังไม่สำเร็จครับ กำลังลองผิดลองถูก ไม่เป็นไรชีวิตย่อมมีหนทางเสมอ ผมใช้เวลาในวันอาทิตย์เกือบค่อนวันก็สำเร็จ สามารถนำไฟล์ exe ไปรันได้ตามปกติ สาเหตุที่ไม่ผ่านในตอนแรก ตัว PyInstaller มีปัญหากับโมดูลระบบชื่อ requests ต้องเอา requests รุ่นที่ไม่มีปัญหากันมาใส่แทน

เมื่อไฟล์ exe รันแล้วไม่ติดขัด ก็จะเป็นขั้นตอนต่อไปคือใช้โปรแกรมจำพวก installer มาใช้เช่น Inno Setup ขวัญใจมหาชนเจ้าประจำผมใช้อยู่ ขั้นตอนนี้ง่ายครับ เตรียมไฟล์ exe ให้พร้อม ไฟล์ไลบรารีทั้งหลาย โฟลเดอร์ที่จำเป็นต้องใช้ จากนั้นทำการ build ก็ได้โปรแกรมติดตั้ง ที่สามารถนำไปติดตั้งใช้งานได้

ดาวน์โหลด (Download)

ไปดาวน์โหลดโปรแกรมรุ่นที่บิวท์ด้วย PySide2  เป็นรุ่น V0.70 build 513 ได้แล้วที่หน้า Download ใครที่ใช้รุ่นก่อนหน้านี้ขอความกรุณาช่วย uninstall และมาดาวน์โหลดรุ่นใหม่ไปใช้ด้วย

python_2017-04-22_18-37-32
Surveyor Pocket Tools ในฉบับของ PySide2 เหมือนเดิมเพราะ engine คือตัว Qt framework เดียวกัน
python_2017-04-22_18-49-45

ตัวอย่างหน้าตาของ Transform Coordinates

ความเป็นมาของ Qt framework

เล่าเรื่อง PyQt5 vs. PySide2 ผู้อ่านบางท่านอาจจะงง ถีงที่มาที่ไป PyQt และ PySide คือเครื่องมือสำหรับพัฒนาโปรแกรมประยุกต์ ที่มีพื้นฐานมาจาก Qt framework ที่พัฒนาด้วย C++ ผู้สร้าง Qt คือบริษัท Trolltech บริษัทเล็กๆนอรเวย์ จากนั้นถูกซื้อไปในปี 2008 โดยโนเกีย (Nokia) ยักษ์ใหญ่ในตอนนั้นจากฟินแลนด์ (ย้อนหลังไป 15-25 ปีที่แล้ว คงไม่มีใครไม่รู้จักโนเกียเพราะเป็นเจ้าพ่อแห่งวงการมือถือ ยุคก่อน IPhone OS และ Android) ทำให้ลิขสิทธิ์ของ Qt ตกมาอยู่กับโนเกีย และโนเกียพยายามจะพัฒนาให้ Qt สามารถใช้กับมือถือได้ (แต่ก็ไม่ทัน ไอโอเอสและแอนดรอยด์ จนแพ้สงครามนี้ในที่สุด) ช่วงที่ Qt อยู่กับโนเกีย ในขณะนั้น Riverbank Computing บริษัทจากอังกฤษได้พัฒนา PyQt  แต่ตอนหลังมีปัญหากัน เพราะ Riverbank ไม่ยอมเปลี่่ยนลิขสิทธิ์ของ PyQt ที่ใช้แบบ GPL ส่วน Qt ใช้ลิขสิทธิ์แบบ LGPL ซึ่งยืดหยุ่นกว่า โนเกียก็ได้พัฒนา PySide ขึ้นมาเพื่อให้มีลิขสิทธิ์แบบเดียวกันกับ Qt แต่สถาณการณ์ของโนเกียตอนนั้นกำลังย่ำแย่มากๆ เพราะมือถือจากไอโอเอสของแอปเปิ้ลกับแอนด์ดรอยของกูเกิ้ลได้ครองตลาดเบ็ดเสร็จแล้ว

ในปี 2011 โนเกียขาย Qt ให้บริษัท Digia จากฟินแลนด์ หลังจากนั้นฉากสุดท้ายแล้วก็เป็นที่ทราบกันดีว่าโนเกียถูกซื้อเสนอซื้อโดยไมโครซอฟท์ในปี 2013 เฉพาะส่วนที่เกี่ยวกับมือถือสมาร์ทโฟนจบการดีลการซื้อขายในปี 2014 และจบตำนานโนเกียในที่สุด สะท้อนของสัจธรรมที่ว่าในโลกนี้ไม่มีอะไรเที่ยงแท้แน่นอน หลังจาก Digia ได้ Qt ไปในปี 2014 ได้ก่อตั้งบริษัท Qt Company และเป็นผู้พัฒนา Qt จนถึงปัจจุบัน และตามที่ผมกล่าวมาแล้ว Qt Company ได้ดึงโครงการ PySide มาสานต่อเป็นโครงการ PySide2 ซึ่งถ้าเปิดใช้เป็นทางการเมื่อไหร่ ผมก็เป็นคนหนึ่งที่ตั้งหน้าตั้งตารอคอย

โครงการในอนาคต

ก็เป็นโครงการที่วาดฝันครับ คือพอร์ตโปรแกรม Surveyor Pocket Tools ลงบนมือถือด้วย Kivy framework คงแยกแต่ละ tool ไปเป็นแต่ละ app ซึ่งก็มีฟรีบ้างขายบ้าง ก็เป็นเรื่องอนาคตไม่ได้ตั้งความหวังอะไรมากมาย ปัจจุบันคือพัฒนาและปรับปรุงโปรแกรมทั้งหลายบน Desktop ให้ใช้งานกันต่อไป และยังยืนยันว่าฟรีเหมือนเดิม และความคิดก็ยังเหมือนเดิมครับ “โลกนี้จะน่าอยู่ ถ้าทุกคนแบ่งปัน ถ้อยทีถ้อยอาศัยกัน

ทิ้งท้ายกันนิดหนึ่งจากหัวข้อ “ปลดพันธนาการ” ก็ดูจะโหดร้ายไป ตั้งให้น่าสนใจแค่นั้นครับ PyQt5 นั้นเป็นเครื่องมือพัฒนาโปรแกรมที่ดีมาก มี document ให้อ่านเยอะแยะ ติดขัดตรงไหน Stackoverflow ช่วยได้ สำหรับคนใช้เครื่องมือเพื่อการค้า ก็อุดหนุนซื้อกันไป แต่ถ้าพัฒนาโปรแกรมแบบเปิดโค๊ดก็ตัวนี้เลย ไม่ผิดหวัง สำหรับผมขอเลือก PySide2 ด้วยเหตุผลที่กล่าวมาข้างต้นทั้งหมด พบกันตอนต่อไปครับ

Surveyor Pocket Tools – ทดสอบโปรแกรมการแปลงพิกัดบน State Plane Coordinate System (SPC)

Surveyor Pocket Tools – ทดสอบโปรแกรมการแปลงพิกัดบน State Plane Coordinate System (SPC)

ในฐานะช่างสำรวจในย่าน AEC บ้านเรา ส่วนใหญ่จะคุ้นเคยกับระบบพิกัดที่ส่วนใหญ่ใช้เส้นโครงแผนที่ Transverse Mercator กันส่วนใหญ่ แต่มาเลเซียนั้นต่างออกไปเนื่องจากมีพื้นที่ที่ยาวเฉียงๆ ทั้งสองพื้นที่คั่นด้วยทะเลจีนใต้ พื้นที่แรกอยู่บนเกาะบอร์เนียวอีกพื้นที่หนึ่งติดกับประเทศไทย ทางมาเลเซียใช้เส้นโครงแผนที่ Oblique Mercator ซึ่งเป็นเส้นโครงแผนที่ค่อนข้างซับซ้อนกว่าอันอื่น

เรามาลองไปทัศนศึกษาที่หรัฐอเมริกาดูกัน สหรัฐอเมริกาเป็นประเทศใหญ่ มีระบบพิกัดและเส้นโครงแผนที่ที่หลากหลายมาก ในฐานะช่างสำรวจพอจะเป็นความรู้ประดับบ่ากันไว้นิดๆหน่อยๆ ไม่ถือว่าเหลือบ่ากว่าแรงจนต้องแบกหาม มาทัศนาผ่านทางโปรแกรมแปลงพิกัด Transform Coordinate ที่อยู่ในชุด Surveyor Pocket Tools

State Plane Coordinate System (SPC)

  • คือกลุ่มระบบพิกัดของสหรัฐอเมริกาที่รวบรวมระบบพิกัดที่ใช้ในแต่ละพื้นที่หรือรัฐทั้งหมด 124 โซน โดยที่รัฐที่มีพื้นที่ติดกันจำนวน 110 โซน และอื่นๆที่เหลือได้แกเช่นอลาสก้า ฮาวาย เปอร์โตริโก้และหมู่เกาะยูเอสเวอร์จิน
  • State Plane Coordinate System (SPC) ปัจจุบันคือ North America Datum 1983 (NAD83) ใช้ทรงรี GRS80 ต่างจากของเดิมคือ NAD27 ที่ใช้ทรงรี Clark 1866

AcroRd32_2017-03-22_08-20-10.jpg

  • เส้นโครงแผนที่ (Map projection) ใช้อยู่ 3 ประเภทคือ
    1. Transverse Mercator (TM) สามารถรักษา scale factor คงที่ได้ในแนวแกนเหนือ-ใต้ จึงนิยมใช้สำหรับพื้นที่ที่ยาวจากเหนือไปใต้
    2. Lambert Conformal Conic (LCC) เนื่องจากสามารถรักษา scale factor ให้คงที่ได้ในแนวแกนตะวันออก-ตะวันตก จึงนิยมใช้กับพื้นที่มีความยาวจากตะวันออกไปตะวันตก
    3. Oblique Mercator (OM) นิยมใช้กับพื้นที่ที่ยาวเฉียงแบบทะแยง ใช้อยู่รัฐเดียวคืออลาสก้า

โปรแกรมแปลงพิกัด Transform Coordinate

  • ถ้าจะดาวน์โหลดก็ดูที่ช่องยาวๆด้านขวาของ blog ในขณะที่เขียนบทความนี้ เป็นรุ่น 0.66 build 501 ดาวน์โหลดแล้วก็ติดตั้ง เมื่อคลิกโปรแกรมและรันจะเห็นไดอะล๊อกหน้าแรกรวมโปรแกรมชุดของ Surveyor Pocket Tools ตามรูปด้านล่างที่ไฮไลต์ไว้คือ “Transform Coordinates” 

Surveyor Pocket Tools_2017-03-21_20-45-41

  • มาดูหน้าโปรแกรม ผม update ข้างในไปมาก ทั้งๆที่ตอนแรกตั้งใจจะเขียนให้ใช้งานได้เฉพาะเส้นโครงแผนที่ Transverse Mercator ไปๆมาๆ ก็ไปไกลเกินกว่าที่ตั้งใจไว้ตอนแรก หน้าตาก็เรียบง่ายแต่เพิ่มเครื่องมือจัดเก็บค่าพิกัดและเรียกใช้ค่าพิกัด รวมถึงเครื่องมือปักหมุดบน google maps & google earth

ทดสอบการแปลงพิกัดบนเส้นโครงแผนที่ Oblique Mercator (OM)

  • จะทดสอบการแปลงพิกัดจากค่าแลตติจูดและลองจิจูด จากทรงรี GRS80 ไปยังระบบพิกัดฉาก NAD83 สำหรับ Alaska zone 1 นี้ใช้ Oblique Mercator ซึ่งพารามิเตอร์ของเส้นโครงแผนที่ OM ตามตารางด้านล่าง
    •  Alazka zone 1 – NAD83
    • Scale factor at the projection’s center = 0.9999
    • Longitude of the projection’s center = 133º 40′ W
    • Latitude of the projection’s center = 57º 0′ N
    • Azimuth at the projection’s center = 323º07’48.3685″
    • Angle from Rectified to Skew Grid =  323º07’48.3685″
    • False Easting (meters) = 5000000
    • False Northing (meters) = -5000000

AcroRd32_2017-03-22_15-44-02

ข้อมูลทดสอบโปรแกรม

  • ข้อมูลทดสอบผมจะใช้หมุดของทางการ ที่สะดวกมากสามารถจะดูหมุดที่ไหนก็ได้ ข้อมูลแต่ละหมุดจะเรียกว่า data sheet เข้าไปดูได้ที่เว็บไซต์ของ NGS ตาม ลิ๊งค์ นี้ครับ
  • อันดับแรกเลือกรัฐก่อน เลือก “Alaska” ต่อจากนั้นเลือก county ให้เลือก “AK|103|KETCHIKAN GATEWAY BOROUGH” จากนั้นคลิกที่ปุ่ม “submit” แล้วจะเห็นหมุดถูกลิสต์ออกมามากพอสมควร ลองเรียงหมุดดูตาม latitude ผมคลิกเลือก “Latitude” แล้วคลิกที่ปุ่ม “Re-Sort-By” ตอนนี้จะเลือกหมุดที่มีหมายเลข PID = UV5754 เลือกแล้วคลิกที่ปุ่ม “Get data sheets” จะได้ data sheet ออกมา
  • ลองดู data sheet  ของหมุด  UV5754 ด้านล่าง

chrome_2017-03-22_08-52-04

  • ที่ผมลากสี่เหลี่ยมไว้ด้านบนคือค่าพิกัดในระบบ geographic ของ NAD83 จะใช้ค่านี้มาทดสอบ เลือกระบบพิกัดและป้อนข้อมูลเข้าไปดังรูป Latitude = 55° 6′ 45.20173″N Longitude = 131° 43′ 58.97516″W

Surveyor Pocket Tools_2017-03-22_09-02-26

  • ด้านขวาปลายทางเลือก Group = “Projected Coordinate System” เลือก Datum = “NAD83 (National Spatial Reference System 2007)” จากนั้นเลือก System = “NAD83(NSRS2007) / Alaska zone 1” พร้อมแล้วคลิกลูกศรขวาเพื่อทำคำนวณ

Surveyor Pocket Tools_2017-03-22_09-07-59

  • จะได้ค่า North = 366701.8435, East = 942069.8596, Grid scale factor = 0.9999085667,  Convergence = 1°36’31.76352″ ซึ่งผลลัพธ์ตรงกันกับ data sheet

ทดสอบการแปลงพิกัดบน Lambert Conformal Conic (LCC)

  • สำหรับเส้นโครงแผนที่ Lambert Conformal Conic (LCC) ส่วนใหญ่จะเป็นแบบรอยตัดสองรอย (secant) บนทรงรี มากกว่าจะเป็นแบบสัมผัส ดังนั้นจะมี Latitude of parallel อยู่ตรงสองรอยตัดด้านบนและด้านล่าง สำหรับข้อมูลทดสอบจะเลือกรัฐ “Oregon” โซนด้านเหนือ พารามิเตอร์สำหรับการแปลงพิกัดมีดังนี้
    • Oregon North Zone (Designation 3601)
      • Oregon State Plane North – NAD 1983
      • Lambert Conformal Conic Two Standard Parallel Projection (Secant)
      • Central Meridian: -120° 30′ W
      • Latitude of Origin: 43° 40′ N
      • Standard Parallel (South): 44° 20′ N
      • Standard Parallel (North): 46° N
      • False Northing: 0.000 m
      • False Easting: 2 500 000.000 m

ข้อมูลทดสอบ

  • ข้อมูลทดสอบจะเข้าไปที่เว็บไซต์ของ NGS แต่ครั้งนี้จะเข้าไปใช้ interactive map แล้วค้นหาชื่อหมุด ตาม ลิ๊งค์ นี้ ด้านซ้ายมือจะมีระบบค้นหาเลือกค้นหาด้วย “PID” ป้อนชื่อหมุด “AJ8179” เมื่อเจอแล้วคลิกที่หมุดในแผนที่แล้ว แล้วคลิก “data sheet” จะได้รายละเอียดมาดังรูป

chrome_2017-03-22_17-16-10

  • ป้อนค่าพิกัดฉากของหมุด AJ8179 เข้าไปดังรูป คลิกที่รูปลูกศรขวา เพื่อจะแปลงพิกัดจาก LCC ไป geographic แต่ในขณะเดียวกันโปรแกรมจะคำนวณค่า grid scale factor และ convergence มาให้ด้วย

Surveyor Pocket Tools_2017-03-22_17-15-44

  • ได้ผลลัพธ์ดังนี้ ตรวจดูกับ data sheet จะได้ค่า grid scale factor และ convergence ตรงกัน ส่วนค่าพิกัดค่าลองจิจูดตรงกัน แต่ค่าแลตติจูดต่างกันเล็กน้อยมากที่ทศนิยมที่ 5

Surveyor Pocket Tools_2017-03-22_17-29-22

ข้อจำกัดของโปรแกรม

  • ในตอนนี้ยังไม่สนับสนุนหน่วยฟุต
  • สนับสนุนการคำนวณ grid scale factor และ convergence ให้เฉพาะเส้นโครงแผนที่ Transverse Mercator, Lambert Conformal และ Oblique Mercator ส่วนเส้นโครงแผนที่อื่นๆคำนวณให้เฉพาะการแปลงค่าพิกัดเท่านั้น เนื่องจากระบบพิกัดในโลกนี้หลากหลายมากมาย ทำให้การทดสอบข้อมูลต้องทยอยทำไปเรื่อยๆ
  • ยังไม่ได้ทดสอบข้อมูลระบบพิกัดของยุโรป European Terrestrial Reference System (ETRS)
  • มาถึงตอนนี้คงพอหอมปากหอมคอ สังเกตว่าผมไม่ได้ทดสอบเส้นโครงแผนที่ TM เนื่องจากบ้านเราใช้กันอยู่และคุ้นเคยกันดีอยู่แล้ว พบกันตอนต่อไปครับ
Surveyor Pocket Tools – Update เพิ่มโปรแกรมคำนวณสเกลแฟคเตอร์ (Line Scale Factor)

Surveyor Pocket Tools – Update เพิ่มโปรแกรมคำนวณสเกลแฟคเตอร์ (Line Scale Factor)

Today, GPS has thrust surveyors into the thick of geodesy, which is no longer the exclusive realm of distant experts. Thankfully, in the age of the microcomputer, the computational drudgery can be handled with software packages. Nevertheless, it is unwise to venture into GPS believing that knowledge of the basics of geodesy is, therefore, unnecessary. It is true that GPS would be impossible without computers, but blind reliance on the data they generate eventually leads to disaster.” วาทะของ  Jan Van Sickle (หนังสือ “GPS and GNSS for Geospatial Professionals, ปี 2001, หน้า 126) ผมถอดความคร่าวๆได้ว่า “ปัจจุบัน GPS ได้ผลักดันให้ช่างสำรวจเข้าไปอยู่ในความหนาแน่นของเรื่องจีโอเดซี ซึ่งไม่ใช่่เรื่องสำหรับผู้เชี่ยวชาญแต่เพียงผู้เดียวอีกต่อไป ต้องขอบคุณสำหรับยุคคอมพิวเตอร์ขนาดเล็ก งานคำนวณหนักสามารถจัดการได้ด้วยโปรแกรมประยุกต์ แต่อย่างไรก็ตาม เป็นการไม่ฉลาดที่จะคิดว่าการศึกษาพื้นฐานด้าน GPS จะไม่จำเป็น และก็เป็นจริงที่ว่าการคำนวณของอุปกรณ์ GPS เป็นไปไม่ได้เลยที่จะไม่ใช้คอมพิวเตอร์ แต่ความเชื่อมั่นอย่างมืดบอดในข้อมูลที่ (GPS) สร้างขึ้นมาจะนำไปสู่ความหายนะได้

โปรแกรม Line Scale Factor

  • เราทราบกันมาดีว่าแผนที่ในระบบพิกัดฉากเราไม่สามารถจะหลีกเลี่ยงความเพื้ยน (distortion) ไปได้ เนื่องจากที่เราพยายามแสดงลักษณะทางกายภาพของสิ่งของที่อยู่บนผิวโค้งบนทรงรีไปยังแผ่นระนาบแบบกระดาษ จำต้องใช้สเกลแฟคเตอร์ที่ไม่คงที่และแปรผันเป็นระบบมาช่วยในการแปลงเหล่านี้ ดังนั้นเราต้องมีวิธีการจัดการและใช้งานที่เหมาะสม โดยที่ไม่ทำให้ค่า error เกินกว่าที่จะยอมรับได้
  • Line Scale Factor คือโปรแกรมที่คำนวณค่าสเกลแฟคเตอร์เฉลี่ยโดยใช้ค่าระดับและค่าพิกัดของจุดเริ่มต้นและจุดปลาย กระบวนการคำนวณจะประกอบไปด้วยสองขั้นตอน
    1. ค่าเฉลี่ยของ Elevation scale factor (ESF) – จะคำนวณ ESF  ที่จุดเริ่มต้นและจุดปลาย รวมถึงคำนวณ ESF ที่จุดกึ่งกลางเส้นด้วย โดยใช้ค่าระดับเฉลี่ย การคำนวณหาค่าเฉลี่ยของ ESF จะเป็นการคำนวณในลักษณะเชิงเส้น (linear)
    2. ค่าเฉลี่ยของ Grid scale factor (GSF) – หลักการพิจารณาว่าจะใช้ค่าเฉลี่ยแบบใดให้ถือหลักการดังนี้
      • ถ้าเส้นยาวน้อยกว่า 1 กม. ใช้ Point scale factor ได้เลย (ใช้โปรแกรม “Point Scale Factor” ของผมที่ลงบทความมาก่อนหน้านั้นนี้ อ่านได้ที่ ลิ๊งค์ นี้)
      • ถ้าเส้นยาวมากกว่า 1 กม. แต่น้อยกว่า 4 กม. แนะนำให้หาค่าเฉลี่ย(หารสอง)จาก Point scale factor ที่จุดต้นทางและปลายทาง
      • ถ้าเส้นยาวมากกว่าหรือเท่ากับ 4 กม. แนะนำให้ใช้สูตรของ Simpson 1/6 มาช่วยหาค่าเฉลี่ย เพราะว่าไม่เป็นเชิงเส้น คือเส้นตรงระหว่างจุดสองจุดบนระนาบพิกัดฉาก เมื่อย้อนเอาไปเขียนลงบนทรงรีจะเป็นเส้นโค้งจีโอเดสิค (geodesic) ดังนั้นการคำนวณค่าเฉลี่ยจะให้น้ำหนักตรงกลางเส้นมากที่สุด (เพราะโค้งมากที่สุด) ลองดูสูตรด้านล่างจะเห็นว่าจุดต้นและจุดปลายให้น้ำหนักแค่หนึ่งส่วนในหกส่วน ส่วนตรงกลางให้ถึงสี่ส่วนในหกส่วน

average_scale_factor.png

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

  • จะทำการดาวน์โหลดให้มองที่ด้านขวาดูตรงส่วน “ดาวน์โหลด (Download)” มองหา “Surveyor Pocket Tools” แนะนำให้ดาวน์โหลด build 480 ขึ้นไปเนื่องจากมีการแก้ไขบั๊กไปหลายจุด เมื่อดาวน์โหลดมาแล้วจะได้ไฟล์ zip แล้ว unzip ออกมาจะได้ไฟล์ setup นำไปติดตั้งได้ง่ายๆไม่กี่คลิก
  • หลังจากติดตั้งแล้วก็ให้เปิดโปรแกรม “Surveyor Pocket Tools” มองหาไอคอน “Line Scale Factor” แล้วดับเบิ้ลคลิกเพื่อเรียกโปรแกรมมารัน

python_2017-02-25_10-01-27

Surveyor Pocket Tools_2017-02-25_15-26-52.png

  • จุดมุ่งหมายของโปรแกรมนี้ เพื่อให้หาสเกลแฟคเตอร์ของเส้นตรงทำได้ง่าย แค่ป้อนค่าพิกัดและค่าระดับของจุดที่ 1 และจุดที่ 2 โปรแกรมจะคำนวณมาให้ทันที การประยุกต์ใช้สามารถนำตัวเลขนี้ไปใช้ในงานสนามได้ในกรณีที่งานอยู่บนระบบพิกัดฉาก UTM
  • หน้าตาของโปรแกรมถอดแบบมาจาก “Point Scale Factor” แต่ในที่นี้มีสองจุดคือจุดต้นทางและจุดปลายทาง ให้ป้อนค่าพิกัดและค่าความสูงของจุด ความสูงเลือกได้ว่าเทียบกับจีออยด์ (รทก.) หรือความสูงเมื่อเทียบกับทรงรี

โครงสร้างและส่วนประกอบ

  • ถ้ามองเผินๆเหมือนรกหูรกตา แต่จริงๆแล้วก็ไม่มีอะไร เริ่มจากตั้งระบบพิกัดให้ตรงก่อน แล้วกรอกข้อมูลจุดที่ 1 เข้าไปและตามด้วยจุดที่ 2 จากนั้นทำการคำนวณ อาจจะปักหมุดดูที่ google maps หรือไม่ก็ที่ google earth หรือถ้าต้องการเก็บค่าพิกัดก็คลิกได้ที่ไอคอนรูปหมุดเครื่องหมายบวกสีแดง

introduction_lsf.png

วิธีการใช้งาน

  • จุดพิกัดที่ยกมาเป็นตัวอย่างถือว่าเป็นกรณีศึกษา พื้นที่เป็นงานก่อสร้างมอเตอร์เวย์ช่วงใกล้ถนนบายพาสของนครราชสีมา เนื่องจากสเกลแฟคเตอร์มีค่าสูงมาก (มากขนาดกล้อง Total Station ยี่ห้อหนึ่งที่อั้นตัวเลข scale factor ไว้ที่ช่วง 0.9996 – 1.000400  คือไม่ยอมให้ป้อนเกินค่านี้ ก็ไม่ทราบว่าเหตุผลว่าทำไมต้องจำกัดตัวเลขไว้แค่นี้ )
  • จุดที่ 1 ชื่อ “MTW-01” N=1657451.026, E = 808709.698, Elevation = 222.461 m. (รทก.) จุดที่ 2 ชื่อ “MTW-02” N=1658811.819, E=828396.322, Elevation=247.844 m. (รทก.) ป้อนเข้าโปรแกรมดังรูปด้านล่าง เนื่องจาก Vertical Reference เป็นความสูง Orthometric height จึงไม่จำเป็นต้องเปลี่ยน

Surveyor Pocket Tools_2017-02-25_16-03-14.png

  • คลิกคำนวณที่ไอคอนรูปลูกศรชี้ลง ได้ผลลัพธ์ดังนี้

  • ตัวเลขสามชุดที่เขียนวงด้วยสี่เหลี่ยมด้านล่างๆคือ
    • ค่าสเกลแฟคเตอร์ที่จุดที่ 1 ESF = 0.9999695936, GSF = 1.0007788866
    • จุดกึ่งกลาง ESF = 0.9999675791, GSF = 1.0008552790 จุดกึ่งกลางนี้ ESF ใช้ค่าระดับเฉลี่ยของจุด 1 และจุดที่ 2 มคำนวณ ส่วนค่า GSF ได้จากพิกัดกึ่งกลาง N = (1657451.026 + 1658811.819) / 2 = 1658131.423, E = (808709.698 + 828396.322) / 2 = 818553.010
    • และจุดที่ 2 ESF = 0.9999655645, GSF = 1.0009340710

  • ค่าเฉลี่ย ESF หาได้ง่ายๆเพราะมัน linear จับบวกกันแล้วหารด้วยสาม = (0.9999695936 + 0.9999675791 +0.9999655645) / 3 = 0.9999675791
  • ค่าเฉลี่ย GSF ต้องใช้สูตร Simpsons มาช่วยหาค่าเฉลี่ย = (1.0007788866 + 4*1.0008552790 + 1.0009340710) / 6 = 1.0008556789
  • ค่าเฉลี่ย Combined Scale Factor (CSF) = 0.9999675791 *  1.0008556789 = 1.0008232302 เราต้องการนั่นเอง สังเกตว่าค่าสูงมากๆ 1 กม. ระยะทางบนแผนที่จะเพื้ยนจากระยะทางราบบนพื้นโลก 0.823 เมตรหรือ 82.3 ซม.

 

ปักหมุดลงบน Google Earth

  • ลองปักหมุดดูกัน

 

  • เรื่องสเกลแฟคเตอร์ในงานสำรวจขนาดใหญ่ ที่แบบ drawing ออกแบบบนระบบพิกัดฉาก UTM เป็นเรื่องที่หลีกเลี่ยงไม่ใช่ไม่ได้ เพราะจะทำให้ตำแหน่งสิ่งปลูกสร้างผิดเพี้ยนไปจากแบบ drawing การใช้สเกลแฟคเตอร์ถึงจะยุ่งยากไปบ้าง แต่ถ้าเข้าใจก็สามารถประยุกต์ใช้ได้อย่างเหมาะสมกับครื่องมือสมัยใหม่เช่น GPS และเครื่องมือรุ่นเดิมๆเช่นกล้อง Total station

Low Distortion Projection

  • ถ้าไม่ใช่สเกลแฟคเตอร์ละ มีทางออกไหม มีครับ ซึ่งวิธีการจะเรียกว่า Low Distortion Projection (LDP) คือสร้างระบบพิกัดฉากขึ้นมาเฉพาะสำหรับพื้นที่ แล้วพยายามคุมให้ความเพี้ยนไม่เกินค่าที่กำหนด เช่น ±20 ppm  แต่ถ้าพื้นที่โครงการไม่ใหญ่มากเช่น 56 กม. x 56 กม. พอจะคุมให้ไม่ให้ความเพี้ยนเกิน ±5 ppm คือระยะทาง 1000 ม. ความเพี้ยนของระยะทางไม่ให้เกิน 5 mm ถ้าระยะทาง 100 เมตร ก็เพื้ยนได้ 0.5 มม. ซึ่งถ้าตั้งกล้อง total station สำหรับให้ตำแหน่งเสาเข็ม ในระยะทางไม่เกิน 100 เมตร สามารถให้ได้เลยเพราะความเพี้ยนครึ่งมิลมิเมตร ถือว่าน้อยมาก จนไม่ต้องนำมาคิด (บางครั้งตอนตั้งเป้าให้ตำแหน่งเสาเข็ม เป้าปริซึมยังโยกไปไม่ตั้งฉาก ยังมากกว่านี้) ทำให้หน้างานสนาม ทำงานได้สะดวก ไม่ต้องตั้งสเกลแฟคเตอร์ให้กล้อง สามารถวางผังได้เลย สำรวจเก็บรายละเอียดก็ทำได้ทันที
  • เรื่องนี้ไม่ใช่เรื่องใหม่ เป็นเรื่องเก่านานพอสมควร ในอเมริกาเองก็นำมาใช้กันนานแล้ว ลองค้นหาในเน็ตด้วยคึย์เวิร์ดคำว่า “low distortion projection ldp” จะเห็นผลลัพธ์เกี่ยวกับเรื่องนี้ออกมากมายครับ ตอนหน้าผมจะนำเสนอการใช้วิธีนี้กันดูและผมพยายาม implement ด้วยการเขียนโปรแกรมมาช่วย แต่พบว่ามันมีอะไรที่มากกว่าที่คิด ติดตามกันต่อไปครับ
Surveyor Pocket Tools – Update เพิ่มโปรแกรมคำนวณสเกลแฟคเตอร์ (Point Scale Factor) – ตอนที่ 2 (ตอนจบ)

Surveyor Pocket Tools – Update เพิ่มโปรแกรมคำนวณสเกลแฟคเตอร์ (Point Scale Factor) – ตอนที่ 2 (ตอนจบ)

ทดสอบตัวอย่างที่ 2 บนพื้นหลักฐาน Indian 1975

  • ตัวอย่างนี้จะดึงจากตารางฐานข้อมูลที่ผมเตรียมไว้ หมายเหตุว่าตารางฐานข้อมูลผมบูรณาการใหม่ จากเดิมที่เคยเก็บค่าพิกัดในระบบพิกัดฉากกับระบบภูมิศาสตร์แยกกัน ตอนนี้จับมารวมอยู่ด้วยกัน พร้อมมีฟิลด์ที่เก็บระบบพิกัดด้วย เวลาต้องการใช้งานก็ลากมาคำนวณได้เลย จากรูปด้านล่างคลิกที่ไอคอนรูปหมุด

psf_display_db

  • จะได้ตารางข้อมูลที่เก็บค่าพิกัดและค่าระดับ(ถ้ามี) พร้อมทั้งระบบพิกัด เมื่อเปิดมาแล้วผมลากเปลียนขนาดให้ดูใหญ่ว่าแต่ละคอลัมน์มีอะไรบ้าง และเลื่อนตารางไปท้ายสุด ดูบรรทัดที่ไฮไลท์เป็นสีน้ำเงินไว้ เราจะทดสอบโดยใช้ข้อมูลนี้ ระบบพิกัดของจุดนี้อยู่บนพื้นหลักฐาน “Indian 1975” บน UTM zone 48N ดูคอลัมน์ “Point Group” จะเห็นว่าจุดนี้เป็น “Projected Coordinate System” คือเป็นค่าพิกัดในระบบพิกัดฉากนั่นเอง

Surveyor Pocket Tools_2017-02-22_14-37-18

  • จากนั้นให้คลิกเมาส์กดแล้วลากจุดค่าพิกัดนี้ไปทิ้งที่ช่องป้อนข้อมูล ผมทำสัญลักษณ์ตอนลากให้ดูง่ายๆ ว่ากำลังลากจุดที่มีค่าพิกัด

Surveyor Pocket Tools_2017-02-22_14-43-24.png

  • เมื่อวางแล้วจะได้ค่าพิกัดและระบบพิกัดจะเปลี่ยนแปลงไปให้ตามจุดข้อมูล สังเกตว่าโซนยูทีเอ็มเดิม 47N จะเปลี่ยนไปให้ตามหมุดกลายเป็น 48N

Surveyor Pocket Tools_2017-02-22_14-46-39.png

  • คลิกที่ปุ่มลูกศรเพื่อทำคำนวณสเกลแฟคเตอร์ จะได้ผลลัพธ์

Surveyor Pocket Tools_2017-02-22_14-48-49

  • จบแล้วง่ายไหมครับ ก่อนหน้านี้ผมคำนวณ Elevation Scale Factor คำนวณด้วยมือ ส่วน Grid scale factor ใช้โปรแกรมอื่น ไม่ค่อยสะดวกเท่าไหร่ สุดท้ายก็มาเขียนโปรแกรมใช้เอง ได้ตรงกับใจที่ต้องการ

เบื้องหลังการคำนวณ

  • เบื้องหลังการคำนวณจะเริ่มจากแปลงพิกัดของ “Indian 1975” ไปเป็นค่าพิกัดภูมิศาสตร์บนพื้นฐาน “WGS84” เพื่อเอาค่าพิกัด latitude/longitude ไปดึงเอาค่าความสูงจีออยด์ (N)
  • มาลองย้อนรอยดูครับ ผมจะแปลงพิกัดโดยใช้โปรแกรม “Transform Coordinate” แล้วจากตารางฐานข้อมูลตัวเดิมผมจะลากจุดตัวนี้เข้าโปรแกรม

Surveyor Pocket Tools_2017-02-22_15-12-11.png

  • โปรแกรมจะใส่ค่าพิกัดและจัดระบบพิกัดให้ตรงกับข้อมูล แล้วด้านซ้ายมือตั้งให้เป็นพื้นหลักฐาน WGS84 / UTM zone 48N แล้วคลิกลูกศรชี้ไปด้านซ้ายเพื่อทำการคำนวณจากขวามาซ้าย

Surveyor Pocket Tools_2017-02-22_15-10-19.png

  • จะได้ค่าพิกัด “WGS84” ออกมา latitude = 14.1353282778, longitude = 102.8941568333 และจะเห็นค่าแลตติจูดบน “Indian 1975” latitude = 14.1336620802, longitude = 102.8977353234

 

  • เปิดโปรแกรม “EGM” ทำการคำนวณค่าความสูงจีออยด์ ได้ค่า = -24.3452 m แทนค่าในสูตร h = H + N = 92.274 – 24.345 = 67.929 m  อย่าลืม ความสูงนี้เทียบกับทรงรี WGS84

  • ขั้นตอนต่อไปหาความสูงทรงรีของ “Everest 1830” ของพื้นหลักฐาน “Indian 1975” ด้วยไลบรารี Proj4 สูตรในโปรแกรมคอมพิวเตอร์ก็ประมาณดังที่แสดงไว้ด้านล่าง

x2, y2, z2 = transform(proj1, proj2, x1, y1, z1)
x2, y2, z2 = transform(proj1, proj2,  102.8941568333,  14.1353282778,  67.929)

  • เราต้องการค่าพิกัด x2, y2, z2 จาก Proj1 ไปยัง Proj2 โดยที่ Proj1 = “WGS84 / Geographic” และ Proj2 = “Indian 1975 / Geographic” คำนวณแล้วได้ค่า z2 = 97.891 m ตัวนี้คือความสูงเมื่อเทียบกับทรงรี “Everest 1830”
  • คำนวณหารัศมีทรงรี R – Mean Radius of Curvature จากสูตร เตรียมค่าสำหรับทรงรี “Everest 1830a = 6377276.345, f = 1/300.8017, e² = 2f – f² = 0.00663784663, e’² = e²/(1-e²) = 0.00668220206 แลตติจูด (θ) = 14.1336620802

  • R = 6377276.345 x √(1 – 0.00663784663) / (1 – 0.00663784663 x sin² (14.1336620802)) = 6358592.078
  • Elevation Scale Factor(ESF) = R / (R + h) = 6358592.078 / (6358592.078 + 97.891) = 0.9999846052 ตรงกับที่คำนวณด้วยโปรแกรม “Point Scale Factor” ข้างต้น
  •  คำนวณ GSF ด้วยสูตร ɸ = 14.1336620802, ƛ = 102.8977353234, ƛ0 = 105

  • การคำนวณด้วยมือ ผมใช้เครื่องคิดเลข

T = tan²(14.1336620802) = 0.06340692275
C = 0.00668220206 x cos²(14.1336620802) = 0.00628376769
A = (102.8977353234 – 105) x 3.141592654/180 x cos(14.1336620802) = -0.03558074351
e’² = 0.00668220206
แทนค่า T,C,A,e’2 ในสูตร จะได้ค่า k =  = 1.00023704

  • ดังนั้น Grid Scale Factor (GSF) = 1.00023704 ซึ่งตรงกับที่โปรแกรม “Point Scale Factor” คำนวณมาได้ข้างต้น

คำนวณค่า Combined Scale Factor (CSF)

  • Combined Scale Factor = ESF x GSF = 0.9999846052 x  1.0002370396 = 1.0002216411
  • ลองมาแปลงเป็น ppm (part per million) เพื่อดูว่าระยะทางหนึ่งกม.จะเพี้ยน (distortion) เท่าไหร่ นำตัวเลขมาลบด้วย 1 จะได้ 1.0002216411 – 1 = 0.0002216411 ทำให้เป็นตัวเลขหารด้วยหนึ่งล้าน(คือสิบยกกำลังหก) = 221.64 / 10 = 221.64 ppm
  • แสดงว่าระยะทาง 1 กม. ระยะบนพิกัดฉากจะต่างกับระยะทางจริงๆบนพื้นโลก  221.6 mm.  = 22.1 cm. ซึ่งไม่ถือว่าน้อย ถ้าวัดบนพื้นโลกได้ 1000 m จะวัดระยะทางบนระบบพิกัดฉากได้ 1000.222 m

soffice.bin_2017-02-23_14-55-36

  • ก็ขอจบตอนแค่นี้ ตอนหน้ามาว่าเรื่อง “Line Scale Factor” คำนวณหาค่า CSF แบบเฉลี่ย ที่จะนำไปใช้งานกันจริงๆ
Surveyor Pocket Tools – Update เพิ่มโปรแกรมคำนวณสเกลแฟคเตอร์ (Point Scale Factor) – ตอนที่ 1

Surveyor Pocket Tools – Update เพิ่มโปรแกรมคำนวณสเกลแฟคเตอร์ (Point Scale Factor) – ตอนที่ 1

  •  โปรแกรมนี้มาตามสัญญาที่ผมเคยว่าไว้ จากบทความที่ผมเคยเขียนเรื่องการคำนวณหาพื้นที่บนระบบพิกัดกริด (grid based area)  แล้วแปลงพื้นที่บนระบบกริดขึ้นมาบนทรงรี (Ellipsoidal area) แล้วจากพื้นที่บนทรงรีทอนขึ้นไปบนผิวโลก (Surfaced area) ถึงจะได้พื้นที่จริงๆ อ่านได้ตามลิ๊งค์นี้ เนื่องจากสูตรที่คำนวณเกี่ยวพันกับวิชา geodesy อยู่ทำให้การคำนวณซับซ้อนขึ้นมาพอประมาณ ผมเลยจัดทำโปรแกรมคำนวณหาสเกลแฟคเตอร์ให้ใช้งานได้สะดวก

ทบทวนเรื่อง Scale Factor

  • รายละเอียดอ่านได้ตามลิ๊งค์ที่ผมเกริ่นไว้ข้างต้น ตอนนี้จะขอรวบรัด เพื่อดูวิธีการใช้งานโปรแกรม
Scale factor
  • เป็นที่ทราบกันดีว่าแผนที่บนระบบพิกัดฉากนั้นจะมีค่า scale factor แต่ละที่ไม่เท่ากัน ค่าเปลี่ยนแปลงแปรผันเป็นระบบ การวัดระยะทางบนแผนที่เมื่อนำไปวางผังบนพื้นที่จริง (setting out) จะต้องมีการหารด้วยสเกลแฟคเตอร์ ในทางกลับกันเมื่อวัดระยะจริงๆบนพื้นโลกจะต้องนำมาคูนกับค่าสเกลแฟคเตอร์เพื่อให้ทอนระยะลงบนระบบพิกัดฉากได้ถูกต้อง ซึ่งสเกลแฟคเตอร์ (scale factor) จะมีอยู่สองอย่างคือ
    1. Elevation Scale Factor (ESF) คือสเกลแฟคเตอร์ที่ใช้ทอนระยะราบบนผิวโลกลงมาเป็นระยะทางบนทรงรี
    2. Grid Scale Factor (GSF) คือสเกลแฟคเตอร์ที่ใช้ทอนระยะทางบนทรงรีลงมาบนระนาบระบบพิกัดฉาก
  • แต่เมื่อนำค่าสเกลแฟคเตอร์  ESF คูนกับ GSF ผลที่ได้เรียกว่า Combined Scale Factor (CSF) ค่านี้เอาไว้ทอนระยะทางรวดเดียวจากระยะราบบนพื้นโลกลงมาเป็นระยะราบบนระบบพิกัดฉาก

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

  • ดาวน์โหลดได้จากลิ๊งค์ด้านขวามือ มองหา Surveyor Pocket Tools มีให้เลือก 32 บิตและ 64 บิต และต้อง build 475 ขึ้นไป ขนาดประมาณเกือบ 120 MB ที่ใหญ่เพราะมีไฟล์ข้อมูลสำหรับงานคำนวณความสูงจีออยด์ (Geoid height) ของ EGM2008 ส่วนตัวโปรแกรมและไลบรารีจริงๆแล้วขนาดนิดเดียว สำหรับ 120 MB ไม่ถือว่าใหญ่เนื่องจากความเร็วอินเทอร์เน็ตเกินพอในปัจจุบัน
  • เมื่อได้ไฟล์ zip ก็ unzip แล้วทำการติดตั้งได้แค่ไม่กี่คลิก

วิธีการใช้โปรแกรม

  • เปิดโปรแกรมมาจะเห็น Surveyor Pocket Tools ดังนี้

  • ถ้าผู้อ่านใช้โปรแกรมรุ่นก่อนๆจะเห็นว่าในรุ่นนี้มีโปรแกรมเพิ่มมาสองโปรแกรมคือ Point Scale Factor และ Line Scale Factor ในตอนนี้เราจะว่ากล่าวเฉพาะ Point Scale Factor ก่อน ส่วน Line Scale Factor ยกยอดไปตอนหน้า
  • ทำการรันโปรแกรมด้วยการดับเบิ้ลคลิกที่ไอคอนโปรแกรม จะเห็นโปรแกรม Point Scale Factor ขึ้นมาดังรูปด้านล่าง จะมี 3 ส่วน ส่วนแรกด้านบนเป็นการเลือกระบบพิกัด (Coordinate Reference System) ส่วนตรงกลางเป็นการป้อนค่าพิกัดและค่าระดับของจุดที่ต้องการคำนวณ และส่วนที่สามอยู่ด้านล่างคือผลลัพธ์การคำนวณ

python_2017-02-20_19-01-41

  • มีเครื่องมือเล็กๆเสริมคือเก็บค่าพิกัดเข้าเก็บในฐานข้อมูลโปรแกรมพร้อมเครื่องมือปักหมุดลงบน Google Maps และบน  Google Earth

โครงสร้างและส่วนประกอบ

introducttion_pointscalefactor

สูตรคำนวณ Elevation Scale Factor (ESF)

  • ถ้าเคยใช้โปรแกรมในชุดนี้มาก่อน ผู้อ่านน่าจะคุ้นกับกับเลือกระบบพิกัด ผมไม่ขออธิบายในนี้ ข้ามมาที่การเลือกระบบความสูงอ้างอิง (Vertical Reference) จะมีให้เลือก 2 อย่างคือ
    1. Orthometic Height(H) คือความสูงอ้างอิงกับระดับน้ำทะเล หรือลึกกว่านั้นคืออ้างอิงกับพื้นผิว Geoid นั่นเอง ถ้าผู้ใช้เลือกแบบนี้ โปรแกรมจะแปลงค่าระดับไปยังค่าระดับที่เทียบกับทรงรีคือ Ellipsoidal Height (h) ด้วยการคำนวณหาความสูงจีออยด์ (N – Geoid Height หรือ  Geoid Separation) สูตรก็ง่ายๆคือ h = H + N
    2. Ellipsoidal Height (h) คือความสูงอ้างอิงกับทรงรี แบบนี้ไม่ต้องคำนวณหาอะไรต่อ
  • สูตรการหา Elevation Scale Factor คือ ESF = R / (R+h) R-เป็นรัศมีทรงรีในตำแหน่งที่ต้องการหาสเกลแฟคเตอร์ ส่วน h คือความสูงเทียบกับทรงรี ค่า R นี้โปรแกรมคำนวณหาให้จากค่าพิกัดที่ผู้ใช้ป้อนเข้ามา

soffice.bin_2017-02-21_11-45-39

  • แต่มีประเด็นถ้าต้องการหา ESF บนพื้นหลักฐาน (datum) อื่นที่ไม่ใช่ WGS84 จะทำได้อย่างไร เพราะว่า EGM2008 ค่าพิกัดผูกอยู่กับพื้นหลักฐาน “WGS84” พูดให้ใกล้ก็คือผูกอยู่กับทรงรี “WGS84”  ส่วนพื้นหลักฐาน อื่นเช่น Indian 1975  ที่ใช้ทรงรี “Everest 1830” จะคำนวณหาความสูงบนทรงรีเหล่านี้ได้อย่างไร
  • การคำนวณนี้ไม่มีปัญหาเพราะว่าไลบรารี Proj4 ผ่่านทาง pyproj ที่ผมใช้สนับสนุนการคำนวณการแปลงพิกัด (3D-Transformation) อยู่แล้วจึงสามารถหาความสูงต่างบนทรงรีระหว่างพื้นหลักฐานได้

สูตรคำนวณ Grid Scale Factor (GSF)

  • สำหรับสูตรการหา GSF  จะซับซ้อนขึ้นมานิดหนึ่ง ในสูตรที่โปรแกรมผมใช้คำนวณจะรองรับทุกทรงรี ที่แต่ละระบบพิกัดนั้นๆใช้ แต่ในรุ่นนี้ขอจำกัดแค่เส้นโครงแผนที่ Transverse Mercator (TM) ก่อน สำหรับเส้นโครงแผนที่แต่ละอันก็จะมีสูตรคำนวณแตกต่างกันไป ผมกำลัง implement เส้นโครงแผนที่ Lambert Conical Conformal สักพักใหญ่ๆน่าจะเสร็จ แต่ในทวีปเอเชียเรามีประเทศไหนใช้เส้นโครงแผนที่แบบกรวยบ้าง
  • สำหรับสูตรการหาสเกลแฟคเตอร์จากเส้นโครงแผนที่ TM มีดังนี้

soffice-bin_2016-12-24_09-21-50

soffice-bin_2016-12-26_07-52-18
soffice-bin_2016-12-24_11-09-00

ทดสอบตัวอย่างที่ 1

  • หมุดชื่อ “A102707” อยู่บนพื้นหลักฐาน “WGS84” เส้นโครงแผนที่ UTM โซน 47N มีค่าพิกัด N = 1499662.173, E=683068.285, ค่าระดับ = 0.791 m จากระดับน้ำทะเลปานกลาง (Orthometric Height) ป้อนข้อมูลไปดังรูป เสร็จแล้วคลิกที่ปุ่มลูกศรชี้ลงล่าง เพื่อทำการคำนวณpsf_input1
  • ได้ผลลัพธ์ดังรูปด้านล่าง

Surveyor Pocket Tools_2017-02-22_12-54-24

  • จากผลลัพธ์ได้ค่าความสูงจีออยด์ (Geoid height) = -30.567 m ได้ค่าเป็นลบแสดงว่าพื้นผิวจีออยด์อยู่ใต้พื้นผิวทรงรี คำนวณหาความสูงบนทรงรีจากสูตร h = H + N = 0.791 – 30.567 = -29.776 m ค่าเป็นลบแสดงว่าจุดตรงนั้นอยู่ใต้พื้นผิวทรงรี

เบื้องหลังการคำนวณ

  • ก่อนจะไปต่อ ลองมาดูเบื้องหลังการคำนวณ ย้อนรอยดูกัน อันดับแรกโปรแกรมจะทำการแปลงค่าพิกัดจากระบบพิกัดฉากไปยังระบบพิกัดภูมิศาสตร์ เพื่อคำนวณค่าพิกัด แลตติจูด/ลองจิจูด เรียกโปรแกรม “UTM-Geographic Converter” ป้อนค่าพิกัด Northin/Easting เข้าไปจะได้ค่า latitude = 13.5596652278, longitude = 100.6918290694

Surveyor Pocket Tools_2017-02-22_13-29-43.png

  • เมื่อได้ค่าพิกัดในรูปแบบแลตติจูดและลองจิจูดแล้ว ทำการคำนวณหาค่าความสูงจีออยด์ด้วย “EGM

Surveyor Pocket Tools_2017-02-22_13-09-34

  • ได้ค่า N = -30.567 m มา คำนวณหา h ได้ h = 0.791 – 30.567 = -29.776 m
  • หารัศมีทรงรี (R) ณ ตำแหน่งค่าพิกัดนี้ (ย้อนไปดูสูตรที่เตรียมไว้ให้ดูตอนต้นๆบนทความ) เตรียมค่า latitude(θ) = 13.5596652278 และค่าพารามิเตอร์ทรงรี a=6378137, f = 1/298.257223563, e² = 2f -f² = 0.00669437999, e’²=e²/(1-e²) = 0.00673949674
  • R = 6378137 x √(1 – 0.00669437999) / (1 – 0.00669437999 x sin² (13.5596652278) = 6359092.417 m
  • ESF = R / (R + h) = 6359092.417 / (6359092.417 – 29.776) = 1.000004682 ตรงกับโปรแกรมที่เราคำนวณมาก่อนหน้านี้ ผมใช้เครื่องคิดเลข FX 5800P ตรวจสอบ ซึ่งเครื่องคิดเลขคำนวณความละเอียดได้แค่ระดับ float ไม่ถึง double แต่แค่นี้เพียงพอไปทำมาหากินได้
  • ส่วนการคำนวณ grid scale factor จะลองคำนวณดูตามสูตรด้านบน เตรียมค่า latitude(θ) = 13.5596652278, longitude(ƛ) = 100.6918290694, ƛ0 = 99

T = tan²(13.5596652278) = 0.05816796436
C = 0.00673949674 x cos²(13.5596652278) = 0.0063690236
A = (100.6918290694 – 99) x 3.141592654/180 x cos(13.5596652278) = -0.02870493355
แทนค่า T,C,A,e’² ในสูตร จะได้ค่า k =  = 1.000014582

คำนวณค่า Combined Scale Factor (CSF)

  • Combined Scale Factor = ESF x GSF =  1.000004682 x  1.0000145818 = 1.0000192644
  • ลองมาแปลงเป็น ppm (part per million) เพื่อดูว่าระยะทางหนึ่งกม.จะเพี้ยน (distortion) เท่าไหร่ นำตัวเลขมาลบด้วย 1 จะได้  1.0000192644 – 1 = 0.0000192644 ทำให้เป็นตัวเลขหารด้วยหนึ่งล้าน(คือสิบยกกำลังหก) = 19.2644 / 10 = 19.2644 ppm
  • แสดงว่าระยะทาง 1 กม. ระยะบนพิกัดฉากจะต่างกับระยะทางจริงๆบนพื้นโลก แค่ 19.3 mm. ถึอว่าน้อยมาก ถ้าวัดบนพื้นโลกได้ 1000 m จะวัดระยะทางบนระบบพิกัดฉากได้ 1000.0193 m

soffice.bin_2017-02-23_14-46-45

 

  • พบกันตอนที่ 2 ซึ่งจะลองทดสอบคำนวณดูบนพื้นหลักฐานอื่น ติดตามกันต่อไปครับ

Surveyor Pocket Tools – Update เพิ่มพื้นหลักฐาน Myanmar Datum 2000 (MMD 2000)

  • Surveyor Pocket Tools ก่อนหน้านี้ได้เพิ่มพื้นหลักฐาน (Datum) ของเพื่อนบ้าน AEC ของเราไปแล้วคือ สปป.ลาว (Lao National Datum 1997) กับเวียดนาม (VN-2000) มาตอนนี้มาอัพเดทของเมียนมา (Myanma Dtum 2000) ประเทศเพื่อนบ้านของเรา
  • รู้สึกว่าปี 2000 ที่ผ่านมาเข้าสหัสวรรษใหม่ จะมีระบบพิกัดของบางประเทศที่ประกาศใช้ในปีนั้น เลขสวยและขลัง 🙂 ถึงแม้ในบ้านเราจะพยายามปรับมาใช้พื้นหลักฐาน WGS84 กันมาก แต่เพื่อนบ้านเราก็ยังใช้ระบบพิกัดของประเทศตัวเองอยู่พอสมควร เนื่องจากแผนที่พื้นฐานหรือฐานข้อมูลยังอ้างอิงกับระบบนี้อยู่
  • ผมไปค้นหาระบบพิกัด Myanmar Datum 2000 ในเสิร์ชเอนจิ้น แต่ก็ต้องผิดหวังเพราะไม่มีในสารบบ ผมคิดว่าช่วงเมียนมาร์ ประกาศใช้ช่วงนั้นยังเป็นรัฐบาลทหารหรือกระไร ถึงไม่มีการตอบรับ ดังนั้นหมายเลขพื้นหลักฐาน หมายเลขเส้นโครงแผนที่ UTM จะไม่มีในฐานข้อมูลของ EPSG แม้แต่น้อย
  • Myanmar Datum 2000 จะพารามิเตอร์ในการแปลงพิกัดเพียงสามพารามิเตอร์คือ Translation DX,DY,DZ เท่านั้น

ข้อกำหนดของ Myanmar Datum 2000

  • ใช้ทรงรี Everest 1830 
    • Semi major axis (a) = 6377276.345 m
    • Semi minor axis(b) = 6356075.434 m
    • Flattening = 1 / 300.8017
  • ค่าพารามิเตอร์สำหรับการแปลงพิกัด (Transformation Parameters) จาก MMD2000 ไปยัง WGS84 :
    • DX = 246.632; DY = 784.833; DZ = 276.923
  • ใช้เส้นโครงแผนที่ UTM ซึ่งจะมีสองโซนคือ
    • UTM zone 46N มี CM = 93°; False Easting = 500000; False Northing = 0; K0 = 0.9996
    • UTM zone 47N มี CM = 99°; False Easting = 500000; False Northing = 0; K0 = 0.9996

เพิ่มพื้นหลักฐาน MMD2000 บน Surveyor Pocket Tools

  • สามารถใช้ได้บนโปรแกรมที่ Build 451 ขึ้นไป รูปด้านล่างเป็น “Transform Coordinate” แปลงพิกัดทีละจุด
Surveyor Pocket Tools support “Myanmar Datum 2000”
  • ถ้าต้องการแปลงค่าพิกัดแบบอ่านจากไฟล์ก็ใช้ “File Transform Coordinates” ก็รองรับและใช้ได้
Surveyor Pocket Tools support “Myanmar Datum 2000”
  • Proj.4 string  ที่ใช้สำหรับการแปลงพิกัดที่ส่งไปให้ไลบรารี pyproj เป็นดังนี้

+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314023 +towgs84=246.632,784.833,276.923,0,0,0,0 +units=m +no_defs

  • พบกันตอนใหม่ครับผู้อ่านทุกท่าน