Tag: ช่างสำรวจ

ติดปีกเครื่องคิดเลขเทพ Casio fx 9860G II SD ด้วยโปรแกรมภาษาซีบน AddIn ตอนที่ 9 โปรแกรมคำนวณหาจุดตัด (Intersection)

งานในด้านสำรวจเป็นงานที่ต้องเกี่ยวข้องกับ Geometry บน plane เป็นส่วนใหญ่ ในบางครั้งอาจจะมีโจทย์ที่ต้องคำนวณหา จุดตัดระหว่างเส้นตรงสองเส้น หรือเส้นตรงกับวงกลม หรือวงกลมกับวงกลม โดยที่เส้นตรงอาจจะทราบค่าพิกัดหัวและท้าย หรือทราบค่าพิกัดเพียงหนึ่งจุดและค่าอะซิมัท ส่วนวงกลมนั้นจะต้องทราบค่าพิกัดจุดศูนย์กลางและรัศมี สูตรการคำนวณไม่ได้ยาก สมัยนี้โจทย์พวกนี้เราใช้โปรแกรมด้าน CAD เขียนแบบช่วยเสียเป็นส่วนใหญ่ อย่างที่ผมเคยบอกออกไปครับ ถ้าช่างสำรวจเรามีโอกาสได้ใช้สมองคิดด้าน geometry บ้างและสามารถใช้เครื่องคิดเลขเป็นตัวช่วย ก็จะสามารถพัฒนาทักษะด้านนี้พอสมควร

โปรแกรมคำนวณหาจุดตัด (Intersection)

โปรแกรมเขียนไว้นานแล้ว แต่มีโอกาสมาปรับแก้ใหม่ให้สามารถคำนวณจุดสัมผัส เช่นเส้นตรงกับวงกลมโดยสามารถตั้ง Tolerance ได้ ผมตั้งไว้ที่ 1 มม. ขอขยายความว่าเราสามารถหาจุดตัดเส้นตรงกับวงกลมได้เป๊ะๆ สองจุด แต่ในกรณีที่เป็นจุดสัมผัส (Tangent) นั้นยากโอกาสน้อยมากที่จะคำนวณหาจุดสัมผัสจากโจทย์ที่กำหนดเส้นตรงที่ผ่านจุดและมีทิศทางตามอะซิมัท มาสัมผัสกับวงกลมที่กำหนดจุดศูนย์กลางและรัศมี  ผมจึงตั้ง tolerance ไว้ 1 มม. ถ้าเส้นตรงมาเฉียดจุดสัมผัสนี้ไม่ว่าจะด้านนอกหรือด้านในวงกลมถ้าระยะห่างเส้นตรงห่างจากจุดสัมผัสจริงน้อยกว่า 1 มม. ก็ให้ถือว่าเส้นตรงเส้นนี้สัมผัสกับวงกลม สำหรับไอคอนโปรแกรมเมื่อติดตั้งแล้ว ดังรูปด้านล่าง

ดาวน์โหลดและติตตั้งบนเครื่องคิดเลข

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

เริ่มต้นใช้งานโปรแกรมหาจุดตัด (Intersection)

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

เมนูหลักของโปรแกรม

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

F1 – Set สำหรับเลือกการคำนวณว่าจะเป็นเส้นตรงตัดกับเส้นตรง เส้นตรงกับวงกลม หรือวงกลมกับวงกลม

F2 – IN (Input) จะเป็นการป้อนค่าพิกัดหรืออะซิมัท ตามตัวเลือกที่เลือกไว้ในเมนูแรก (F1 – Set)

F3 – Calc คำนวณหาจุดตัด ซึ่งในเมนูย่อยสามารถแสดงรูปเส้นตรง (Plot) วงกลมพร้อมจุดตัดได้

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

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

ตัวอย่างที่ 1 คำนวณหาจุดตัดระหว่างเส้นตรงกับเส้นตรง (Line and Line Intersection)

เป็นการคำนวณหาจุดตัดเมื่อกำหนดเส้นตรงสองเส้นที่มีค่าพิกัดหัวและท้าย ดังรูปด้านล่างเป็นแปลงที่ดิน DEFG ต้องการหาค่าพิกัดจุด “X” ซึ่งเป็นพิกัดศุนย์กลางพื้นที่ที่เกิดจากเส้นตรงจากมุมของแปลงที่ดินลากเป็นเส้นทแยงมุมตัดกัน

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

ที่เมนูหลักของเครื่องคิดเลขกดคีย์ F1-Set จะเห็นตัวเลือกรูปแบบการคำนวณจุดตัด (Intersection Type) เมื่อกดคีย์ “EXE” จะเห็นรายการให้เลือก 4 อย่าง ให้เลือก “Line X Line” ดังรูป กดคีย์ “EXE” จากนั้นกดคีย์ F6-OK เพื่อออก

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

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

คำนวณหาจุดตัด

กลับมาที่เมนูหลักของโปรแกรม จากนั้นกดคีย์ F3 – Calc เพื่อคำนวณหาจุดตัด “X” โปรแกรมจะทวนค่าพิกัดของเส้นตรงเส้นที่ป้อนไว้ก่อนจะแสดงค่าพิกัดจุดตัด ถ้าจุดนี้อยู่บนเส้นตรงทั้ง 2 เส้น กดคีย์ F2 – PgDn เพื่อเลื่อนไปหน้าต่อไป

หน้าสุดท้ายจะเห็นค่าพิกัดจุดตัด “X” N = 1652.560, E = 1739.142

แสดงรูปตัด (Plot)

กดคีย์ F5-Plot เพื่อแสดงเส้นตรงสองเส้นและจุดตัด จอภาพเป็น dot pixel หยาบๆก็ได้ขนาดนี้พอให้เกิดจินตนาการว่าเส้นตรง 2 เส้นวางตัวในลักษณะใดและตัดกันที่ตรงไหน กดคีย์ F6-Done เพื่อออก

ตัวอย่างที่ 2 คำนวณหาจุดตัดระหว่างเส้นตรงกับเส้นตรง (Azimuth and Azimuth Intersection)

การกำหนดเส้นตรงโดยกำหนดจุดและอะซิมัทให้ ในกรณีนี้เส้นตรงจะยาวไม่สิ้นสุด ดังนั้นถ้าเส้นตรงที่กำหนดไม่ขนานกัน ก็มั่นใจได้เลยว่าหาจุดตัดได้แน่ (ต่างจากตัวอย่างแรกที่หาจุดตัดบนเส้นตรงทั้งสองเท่านั้น)

กำหนดเส้นตรงที่เป็น Alignment ของงานถนน เส้นที่ 1 เป็น  ผ่านจุด N: 2641990.928 , E = 231848.514  Azimuth: 35°28′ 1.7433″ เส้นที่ 2 ผ่านจุด N: 2641812.446 E: 231753.041 Azimuth: 9°12′ 20.4212″ คำนวณหาจุดตัด PI (Point of Intersection)

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

ที่เมนูหลักของโปรแกรม กดคีย์ F1-Set เลือกรายการคำนวณ “Azi X Azi” กดคีย์ F6-OK เพื่อออก

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

กลับมาที่เมนูหลักโปรแกรม กดคีย์ F2-IN เพื่อป้อนค่าพิกัด ไม่ลืมว่าป้อนอะซิมัทคั่นด้วยเครื่องหมายลบ  เมื่อเสร็จแล้วกดคีย์ F6-OK เพื่อออก

คำนวณหาจุดตัดและแสดงรูป

ที่เมนูหลักของโปรแกรม กดคีย์ F3-Calc เพื่อคำนวณหาจุดตัด โปรแกรมจะทวนค่าพิกัดที่ป้อนเข้าไปก่อน กดคีย์ F2-PgDn เพื่อเลื่อนไปหน้าแสดงผลถัดไป

จะได้ค่าพิกัดจุดตัดที่เป็นจุด PI (Point of Intersection N: 2641870.013, E: 231762.371 กดคีย์ F5-Plot จะเห็นรูปร่างเส้นตรงสองเส้น พร้อมจุดตัด “I1” บนหน้าจอภาพกดคีย์ F6-Done สองครั้งเพื่ออก

ตัวอย่างที่ 3 คำนวณหาจุดตัดระหว่างเส้นตรงกับวงกลม (Azimuth and Circle Intersection)

อย่างที่ผมเกริ่นไปข้างต้นว่าเส้นตรงถ้าตัดผ่าเข้าไปในวงกลมจะได้จุดตัดสองเส้น แต่กรณีพิเศษที่เส้นตรงไปสัมผัสกับวงกลมกรณีนี้จะได้จุดตัดคือจุดสัมผัสมาจุดเดียว มาลองดูตัวอย่างแบบนี้ กำหนดให้เส้นตรงผ่านจุด N: 2642178.562, E: 231597.085 Azimuth: 161°8′ 58.2981″ กำหนดวงกลมมีจุดศูนย์กลาง N: 2641772.451, E: 231999.821  รัศมี 249.921 เมตร

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

ที่เมนูหลักของโปรแกรม กดคีย์ F1-Set เลือกรายการคำนวณ “Azi X Cir” กดคีย์ F6-OK เพื่อออก

ป้อนค่าพิกัดและรัศมีวงกลม

ที่เมนูหลักของโปรแกรม กดคีย์ F2-IN เพื่อป้อนค่าพิกัดของเส้นตรงและป้อนค่าอะซิมัท ป้อนค่าพิกัดศูนย์กลางวงกลมพร้อมทั้งรัศมี เสร็จแล้วกดคีย์ F6-OK เพื่อออก

คำนวณจุดตัดและแสดงรูป

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

สังเกตว่าตรงจุดตัดโปรแกรมจะแสดงว่าได้จุดสัมผัส Tangent มา 1 จุดคือ N: 2641691.702, E: 231763.305 กดคีย์ F5-Plot เพื่อแสดงรูปเส้นตรงและวงกลม ก็พอกล้อมแกล้มการวาดรูปร่างวงกลม ไม่มีไลบรารีของเครื่องคิดเลขต้องอาศัยวาดจุดลงไปตามเส้นรอบวงแทน  จุดสัมผัสแสดงด้วยตัวอักษร “I1” จุดศูนย์กลางวงกลมแสดงด้วยตัวอักษร “C1”

ตัวอย่างที่ 4 คำนวณหาจุดตัดระหว่างวงกลมกับวงกลม (Circle and Circle Intersection)

มาถึงตัวอย่างสุดท้าย ผมจะขอรวบรัดแสดงเฉพาะรูปหน้าจอ กำหนดโจทย์ วงกลมวงแรกมีค่าพิกัดศูนย์กลาง N: 2641210.885, E: 232480.916 รัศมี 525 เมตร วงกลมวงที่ 2 N: 2641256.635 E: 233130.568 รัศมี 250 เมตร คำนวณหาจุดตัดระหว่างวงกลมสองวงนี้

จัดเก็บข้อมูลและเรียกมาใช้ภายหลัง

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

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

จากนั้นนำ SDCard มาเสียบบนเครื่องคิดเลขอีกครั้ง เมื่อนำไปใช้งานได้สักพักถ้าเอามาเปิดอีกครั้งจะเห็นไฟล์หลายๆไฟล์ มีนามสกุลเป็น “CFG”  หมายถึง config ตัวอย่างถ้าใช้โปรแกรมคำนวณหาจุดตัดนี้ไฟล์ที่จัดเก็บข้อมุลคือ “INTSCT.CFG

ก็ยังมีหลายซีรี่ย์สำหรับโปรแกรมเครื่องคิดเลขในชุดนี้ ก็ติดตามกันได้ต่อไปครับ

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 ส่วนขั้นตอนจะขอรวบรัดแสดงด้วยรูปภาพ

จัดเก็บข้อมูลและเรียกมาใช้ภายหลัง

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

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

จากนั้นนำ SDCard มาเสียบบนเครื่องคิดเลขอีกครั้ง เมื่อนำไปใช้งานได้สักพักถ้าเอามาเปิดอีกครั้งจะเห็นไฟล์หลายๆไฟล์ มีนามสกุลเป็น “CFG”  หมายถึง config ตัวอย่างถ้าใช้โปรแกรมคำนวณโค้งแปลงพิกัดภูมิศาสตร์นี้ไฟล์ที่จัดเก็บข้อมุลคือ “GEOCALC.CFG

ก็ตามที่สัญญาไว้ว่าจะไล่รื้อโปรแกรมเก่าๆ ที่ลงมาหลายๆตอนหน้านี้ด้วยระบบติดต่อผู้ใช้ตามไลบรารี 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 มองหาโปรแกรม Scale Factor สำหรับเครื่องคิดเลข 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 เช่นเคยค่าต่างกันที่ทศนิยมแปด สามารถนำไปใช้งานได้

จัดเก็บข้อมูลและเรียกมาใช้ภายหลัง

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

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

จากนั้นนำ SDCard มาเสียบบนเครื่องคิดเลขอีกครั้ง เมื่อนำไปใช้งานได้สักพักถ้าเอามาเปิดอีกครั้งจะเห็นไฟล์หลายๆไฟล์ มีนามสกุลเป็น “CFG”  หมายถึง config ตัวอย่างถ้าใช้โปรแกรมคำนวณหาสเกลแฟคเตอร์นี้ไฟล์ที่จัดเก็บข้อมุลคือ “SFACTOR.CFG

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

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

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

ติดปีกเครื่องคิดเลขเทพ Casio fx 9860G II SD ด้วยโปรแกรมภาษาซีบน AddIn ตอนที่ 4 โปรแกรมพื้นฐานงานสำรวจชุดที่ 1 (COGO SSE 1)

ติดปีกเครื่องคิดเลขเทพ Casio fx 9860G II SD ด้วยโปรแกรมภาษาซีบน AddIn ตอนที่ 4 โปรแกรมพื้นฐานงานสำรวจชุดที่ 1 (COGO SSE 1)

COGO (Coordinate Geometry)

ผมพยายามจะแปลคำนี้เป็นภาษาไทยอยู่นานทีเดียว แต่สุดท้ายขอทับศัพท์ดีกว่า จริงๆแล้วงานสำรวจคืองานที่เกี่ยวกับทรงเรขาคณิต (Geometry) อยู่แล้ว และต้องสามารถระบุค่าพิกัด (Coordinate) ทุกๆจุดได้บนเรขาคณิตนั้นๆ ความเกี่ยวข้องระหว่างรูปทรงเรขาคณติกับค่าพิกัดจะเกี่ยวข้องกันด้วยมุมและระยะทางเป็นส่วนใหญ่

Selected Serie 1 (SSE 1)

คำนี้เอามันครับ ผมนึกถึงโปรแกรมตระกูลไมโครสเตชัน (Microstation) ที่มักจะใช้คำนี้บอกรุนของโปรแกรม ดังนั้นคำว่า  Selected Serie 1 คำแปลก็ประมาณว่าเลือกสรรแล้วชุดที่ 1

โปรแกรมพื้นฐานงานสำรวจชุดที่ 1 (COGO SSE 1)

ก่อนหน้านี้ผมเขียนโปรแกรมภาษาซีสำหรับเครื่องคิดเลข Casio fx-9860G II SD มาหลายตอนแต่เป็นโปรแกรมระดับ advance มาในตอนนี้จะกลับมาที่พื้นฐานงานสำรวจที่ต้องเกี่ยวข้องกับค่าพิกัด มุมและระยะทาง

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

ไปที่หน้าดาวน์โหลด (Download) มองหาโปรแกรม COGO SSE1 แล้วดาวน์โหลดจะได้ไฟล์ COGOSSE1.G1A  แล้ว copy ไฟล์ไปที่เครื่องคิดเลขตามวิธีขั้นตอนที่ผมได้บอกไว้ก่อนหน้านี้

ส่วนประกอบของโปรแกรม

สำหรับโปรแกรมพื้นฐานงานสำรวจในชุดนี้จะจัดโปรแกรมย่อยเล็กๆ ไว้ 4 โปรแกรม

  1. Bearing-Dist (2 pt) เมื่อกำหนดจุดค่าพิกัด 2 จุด สำหรับคำนวณหามุมอะซิมัทและระยะทาง
  2. Bearing-Dist(3 pt) เมื่อกำหนดจุดค่าพิกัด 3 จุด สำหรับคำนวณหาง่ามมุมราบ อะซิมัทและระยะทาง ในงานสำรวจก็ได้แก่การตั้งเป้าหลัง  (backsight)  จุดตั้งกล้อง (station) และเป้าหน้า (target)
  3. Coordinate 2D เมื่อกำหนดจุดค่าพิกัด 2 จุด กำหนดมุมราบและระยะราบ คำนวณหาค่าพิกัดจุดที่ 3 คำนวณหาพิกัดจุดที่ 3 การคำนวณคำนวณในระนาบสองมิติอย่างเดียว ไม่มีค่าระดับมาเกี่ยวข้อง
  4. Coordinate 3D เมื่อกำหนดจุดค่าพิกัด 2 จุด กำหนดมุมราบและมุมดิ่ง ระยะทางแบบ slope distance ต้องการคำนวณหาค่าพิกัดและค่าระดับจุดที่ 3

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

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

Bearing-Dist (2 pt)

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

ผลลัพธ์ก็ออกมาดังนี้

Bearing-Dist (3 pt)

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

จะได้ผลลัพธ์มาดังนี้ ครั้งแรกจะแสดงมุมอะซิมัทและระยะทางไปเป้าหลังก่อน

ถัดไปจะเป็นมุมราบ มุมอะซิมัทและระยะทางไปเป้าหน้า

Coordinate 2D

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

สเกลแฟคเตอร์ตัวนี้แล้วจริงๆคือ Combine Scale Factor (CSF) ที่ได้จาก Elevation Scale Factor (ESF) x Grid Scale Factor (GSF) การประยุกต์ใช้สเกลแฟคเตอร์ส่วนใหญ่นำมาใช้โครงการที่ระบบพิกัดฉากกริดยูทีเอ็มในงานใหญ่ๆยาวๆ เช่นโครงการก่อสร้างถนน รถไฟ เพราะว่าแบบ drawing เราอยู่บนระนาบพิกัดฉาก ให้คิดเสียว่าแบบอยู่บนกระดาษขนาดใหญ่มาตราส่วน 1:1 แล้วเราวัดระยะทางบนผิวโลกที่มีความโค้ง ดังนั้นการวัดระยะทางจะต้องมีการทอนจากบนผิวโค้งเพื่อให้ลงมาเข้ากับระนาบพิกัดฉากของกระดาษ

มาลองทดสอบข้อมูล ป้อนข้อมูลค่าพิกัดเป้าหลัง ค่าพิกัดจุดต้องกลองดังนี้

จากนั้นป้อนมุมราบ และระยะทาง (Ground Distance ใช้ตัวย่อ Gnd dist) ในกรณีกล้องโททัล สเตชัน ไม่ได้ตั้งค่าสเกลแฟคเตอร์ไว้ที่ตัวกล้อง ระยะทางที่วัดออกมาจะเป็นระยะทางบนพื้นโลก ส่วนค่าสเกลแฟคเตอร์ในตัวอย่างผมใช้ 1.000480

 

โปรแกรมจะคำนวณมุมอะซิมัทและระยะทางไปเป้าหลังให้ดูก่อนเพื่อตรวจสอบ และไม่ลืมว่าค่าพิกัดที่เราป้อนเข้าไปในเครื่องคิดเลขคือค่าพิกัดในระบบพิกัดฉาก ระยะทางที่คำนวณออกมาคือระยะทางบนพิกัดฉาก (Grid Distance ใช้ตัวย่อ Grd Dist) และถ้าวัดระยะทางจริงๆควรจะได้เท่ากับ Ground Distance

ทวนกันนิด ระยะทางบนพิกัดฉาก(กริด)= ระยะทางบนพื้นโลก x สเกลแฟคเตอร์ 

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

Coordinate 3D

ที่เมนูกดคีย์ “4” โปรแกรมคล้าย Coordinate 2D แต่จะมีมิติทางดิ่งเข้ามาเพิ่มดังนั้นที่จุดตั้งกล้องจะวัดความสูงของกล้อง (HI – Height of instrument) และที่เป้าหน้าก็จะต้องวัดความสูงมาด้วย (HT – Height of target) นอกจากนั้นจะมีมุมดิ่ง (Vertical angle) มาด้วย มาดูข้อมูลทดสอบกัน เริ่มจากป้อนค่าพิกัดเป้าหลัง ต่อมาป้อนค่าพิกัดจุดตั้งกล้อง ค่าระดับจุดตั้งกล้อง ความสูงกล้อง

ต่อไปป้อนมุมราบ(H.Ang) มุมดิ่ง(V.Ang) ระยะทาง (Slope distance) และความสูงเป้า(HT) และค่าสเกลแฟคเตอร์ (Scale Factor)

โปรแกรมจะคำนวณอะซิมัท ระยะทางจากจุดตั้งกล้องไปเป้าหลัง ข้อสังเกตผมใส่เครื่องหมายดาว (*) หน้าระยะทางบนพื้นโลก (Ground Distance)

กดคีย์ “EXE” จะได้ผลลัพธ์ อะซิมัท ระยะราบทั้งระยะบนพื้นโลกและระยะกริดจากจุดตั้งกล้องไปเป้าหน้า

สุดท้ายคือผลลัพธ์ที่ต้องการคือค่าพิกัดและค่าระดับของเป้าหน้า

สรุป

ก็พอหอมปากหอมคอสำหรับโปรแกรมพื้นฐานงานสำรวจชุดที่ 1 โดยมีสิ่งที่ช่างสำรวจจะต้องเข้าใจตั้งแต่เรื่องมุมอะซิมัทคือมุมอะไร สำคัญมากเพราะมุมนี้เป็นหัวใจขั้นพื้นฐานและจะสัมพันธ์กับระยะทางโดยที่แยกกันไม่ออกและสามารถนำไปคำนวณค่าพิกัดได้ สำหรับการคำนวณแบบนี้ โปรแกรมในกล้อง Total Station ปัจจุบันก็คำนวณให้อยู่แล้ว แล้วก็เก่งขึ้นเรื่อยๆ แต่ในทางกลับกัน สำหรับช่างสำรวจเอง คงไม่มีใครได้จับกล้องพวกนี้ได้ตลอดเวลา จำเป็นจะต้องมีเครื่องคิดเลขคู่ใจไว้ติดตัวตลอด สามารถหยิบมาใช้งานได้สะดวกและถ้ามีโปรแกรมที่จำเป็นสำหรับการทำงานติดอยู่ด้วย ชีวิตการทำงานก็พลอยลื่นไหล ติดตามตอนต่อไปครับ

การตั้งค่า (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 เปิดโอกาสให้ตั้งได้ตามความต้องการของผู้ใช้ พบใหม่ในตอนต่อไปครับ

สนุกกับโปรแกรมเครื่องคิดเลขสำหรับงานสำรวจ ตอนที่ 1 โปรแกรมแปลงพิกัด “Geo2UTM” บนเครื่องคิดเลข Casio FX 5800P

  • สวัสดีครับท่านผู้อ่านทุกท่าน ในโอกาสที่บ.เคเอ็นเอส เอ็นจิเนียริ่ง คอร์ปอเรชั่น จำกัด มีอายุใกล้จะขวบปีแล้ว ผมในฐานะวัยแล้วเกือบจะรุ่นพ่อของน้องๆชุดนี้แล้ว เห็นความตั้งใจของน้องๆ และก็ยินดีเป็นอย่างยิ่ง ในโอกาสนี้ด้วยความที่สนิทสนมกันก็ถูกลากมาให้เขียนบทความให้เพื่อฉลองครบรอบหนึ่งปี และลงที่นี่ ไม่ใช่ที่บล็อก priabroy.com ที่ประจำ ตอนแรกคิดๆอยู่ว่าจะเขียนเรื่องอะไรดี แต่สุดท้ายก็จะเขียนเรื่องโปรแกรมมิ่งเครื่องคิดเลข เพราะว่าเครื่องคิดเลขเป็นเครื่องมือพื้นฐานที่สุดสำหรับช่างสำรวจ ช่างโยธาของเรา
  • บทความนี้คงจะมีหลายตอนก็มาติดตามกัน

ย้อนอดึตแห่งความทรงจำ

  • เครื่องคิดเลข Casio นับว่าเป็นขวัญใจของเราช่างสำรวจ ช่างโยธา ตอนเรียนอยู่วิทยาลัยหรือมหาวิทยาลัย บางคนอาจจะมีประสบการณ์ในการพาเครื่องไปฝากไว้ที่โรงจำนำเพราะกลัวทำหาย ^-^ ตอนสมัยเรียนช่วงปี 30-33 ผมใช้ FX3800 ปัจจุบันเลิกผลิตไปนานแล้ว เหลือไว้แต่ความทรงจำ สมัยแต่ก่อนเขียนโปรแกรมลงเครื่องพวกนี้คงได้แค่โปรแกรมเล็กๆ เพราะเครื่องมื memory ที่จำกัดจำเขี่ยมากๆ
Casio Fx3800
Casio Fx3800
  • ต่อมาทำงานได้สักสองปีก็ไปถอยเอาเครื่องในตำนาน  FX-880P ได้มาเครื่องหนึ่ง รุ่นนี้ปัจจุบันขึ้นหิ้งเป็นตำนานไปแล้ว ทั้งที่ผ่านระยะเวลามายี่สิบกว่าปี ยังมีคนตามล่าหากัน รุ่นนี้เวลาพกพาก็เสียบไว้ที่กระเป๋าหลังของกางเกงยีนส์ ดูมันเท่ห์ แต่พกแบบนี้ บางคนเผลอนั่งทับจนเครื่องคิดเลขหักเป็นท่อน น้ำตาตกกันมาแล้วก็มี โปรแกรมมิ่งรุ่นนี้ใช้โปรแกรมภาษาเบสิคแบบมีหมายเลขบรรทัดกำกับ เปิดโลกโปรแกรมมิ่งไปอีกหลายระดับ เขียนโปรแกรมยากๆได้พอสมควร การตั้งตัวแปรใช้ตัวอักษรหลายตัวได้ เครื่องเดิมๆ มี memory 32 กิโลไบต์ มันเยอะพอสมควร
Casio FX - 880P
Casio FX – 880P
  • ด้านหลังเครื่องรุ่นนี้ยังมีช่องให้ใส่แรมเพิ่มได้อีก 32 กิโลไบต์ ผมอุตส่าห์ไปเดินแถวสะพานเหล็ก คลองถมจนได้มาหนึ่งอัน เมื่อใส่แล้วก็รวมกันได้ 64 กิโลไบต์ คิดเป็น 65536 ไบต์ เหลือเฟือ ขนาดเขียนวงรอบเล่นๆ ยังไม่เต็มเลย
s-l300
Memory Pack 32KB for FX-880P
  • มาดูโปรแกรมสำหรับเครื่องคิดเลข FX-880P เพื่อรำลึกความหลัง ผมเขียนโปรแกรมนี้หาจุดตัดระหว่างเส้นตรงกับเส้นตรง เส้นตรงกับวงกลม วงกลมกับวงกลม ผมลงมาให้เต็มๆแบบไม่มีตัดทอน ตอนนี้ผมไม่มีเครื่องคิดเลขรุ่นนี้ให้ลองแล้ว

5 ‘Intersection
10 CLS:BEEP:BEEP1:ANGLE 0:SET F5:PRINT CHR$(9);:CLS
20 PRINT ” ***Find Intersection point***”
30 CLS:PRINT “<<1:AZI#AZI>> <<2:AZI#DIST>>”;:PRINT
40 PRINT”<<3:DIST#DIST>> <>”;
50 T$=INKEY$
60 IF (T$=”1″) THEN 150
70 IF (T$=”2″) THEN 600
80 IF (T$=”3″) THEN 800
90 IF (T$=”4″) THEN 400
100 IF (T$=”Q”) THEN PRINT TAB(10);”<<>>”;
:SET F9:END
110 GOTO 50
150 CLS:PRINT “N1=”;N1;:INPUT N1
160 PRINT “E1=”;E1;:INPUT E1
170 PRINT “AZIMUTH1=”;AZI1;:INPUT AZI1
180 FANG=AZI1:GOSUB 3000:DAZI1=DANG
190 PRINT “N2=”;N2;:INPUT N2
200 PRINT “E2=”;E2;:INPUT E2
210 PRINT “AZIMUTH2=”;AZI2;:INPUT AZI2
220 FANG=AZI2:GOSUB 3000:DAZI2=DANG
230 DELTY=N2-N1:DELTX=E2-E1
240 GOSUB 3500:AZI12=Y:DIST12=X
250 NI=(TAN(DAZI2)*N2-TAN(DAZI1)*N1+E1-E2)/(TAN(DAZI2)-
TAN(DAZI1))
260 EI=(NI-N1)*TAN(DAZI1)+E1
290 PRINT “NI= “;NI;:PRINT
300 PRINT “EI= “;EI
310 GOTO 30
400 ‘Four points
410 CLS:PRINT “N1= “;N1;:INPUT N1
420 PRINT “E1= “;E1;:INPUT E1
430 PRINT “N2= “;N2;:INPUT N2
440 PRINT “E2= “;E2;:INPUT E2
450 PRINT “N3= “;N3;:INPUT N3
460 PRINT “E3= “;E3;:INPUT E3
470 PRINT “N4= “;N4;:INPUT N4
480 PRINT “E4= “;E4;:INPUT E4
490 DELTY=N2-N1:DELTX=E2-E1:GOSUB 3500:AZI12=Y:DIST12=X
500 DELTY=N4-N3:DELTX=E4-E3:GOSUB 3500:AZI34=Y:DIST34=X
510 DELTY=N3-N1:DELTX=E3-E1:GOSUB 3500:AZI=Y
512 IF (AZI12=90 OR AZI12=270) THEN NI=N1 ELSE 515
513 EI=(NI-N3)*TAN(AZI34)+E3
515 IF (AZI34=90 OR AZI34=270) THEN NI=N3 ELSE 520
520 IF NOT((AZI12=90 OR AZI12=270) OR (AZI34=90 OR
AZI34=270)) THEN NI=(TAN(AZI34)*N3-TAN(AZI12)*N1+E1-
E3)/(TAN(AZI34)-TAN(AZI12)) ELSE 540
530 EI=(NI-N1)*TAN(AZI12)+E1
540 PRINT “NI= “;NI;:PRINT
550 PRINT “EI= “;EI
560 GOTO 30
600 ‘AZI # DIST
610 CLS:PRINT “N1= “;N1;:INPUT N1
620 PRINT “E1= “;E1;:INPUT E1
630 PRINT “AZIMUTH= “;INAZI;:INPUT INAZI:FANG=INAZI:GOSUB
3000:DAZI1=DANG
635 CANG=0:PAZI=DAZI1:GOSUB 4500:DAZI2=NAZI
640 PRINT “N2= “;N2;:INPUT N2
645 PRINT “E2= “;E2;:INPUT E2
650 PRINT “DIST= “;DIST;:INPUT DIST
660 DELTY=N2-N1:DELTX=E2-E1:GOSUB 3500:DIST12=X:AZI12=Y
670 PHI1=AZI12-DAZI1:IF PHI1 675 PHI2=AZI12-DAZI2:IF PHI2 Int No.1
900 CANG=ANG2:PAZI=AZI12:GOSUB 4500:AZI2I2=NAZI
910 PNI=N2+DIST2*COS(AZI2I1)
920 PEI=E2+DIST2*SIN(AZI2I1)
930 MNI=N2+DIST2*COS(AZI2I2)
940 MEI=E2+DIST2*SIN(AZI2I2)
950 CLS:BEEP:PRINT “NI(1)= “;PNI;:PRINT
960 PRINT “EI(1)= “;PEI
970 CLS:PRINT “NI(2)= “;MNI;:PRINT
980 PRINT “EI(2)= “;MEI
990 GOTO 30
3000 ‘Convert input angle to degree
3010 DD=FIX(FANG)
3020 TEMP=FRAC(FANG)*100
3030 MM=FIX(TEMP)
3040 SS=FRAC(TEMP)*100
3050 DANG=DEG(DD,MM,SS)
3060 RETURN
3500 ‘Find Azimuth
3510 X=POL(DELTY,DELTX)
3520 IF Y180 THEN 4550 ELSE 4530
4530 TEMP=TEMP+180
4540 GOTO 4590
4550 IF TEMP>540 THEN 4580
4560 TEMP=TEMP-180
4570 GOTO 4590
4580 TEMP=TEMP-540
4590 NAZI=TEMP
4600 RETURN

ถึงยามต้องพรากจากกัน

  • ผ่านไปหลายปีสำหรับการทำงานในภาคสนาม ไปไหนมาไหนก็หอบเครื่องคิดเลขรุ่นนี้ไปใช้งาน ก่อนจะจากกันผมทิ้งเครื่องคิดเลขไว้ที่ตู้คอนเทนเนอร์หน้าไซต์งาน เพราะลูกน้องเอาไปใช้บ้าง ไม่ได้เอากลับที่พักตอนยามค่ำคืน คืนนั้นไฟฟ้าลัดวงจรที่ตู้คอนเทนเนอร์ ทราบข่าวอีกทีก็วอดแล้ว ยืนคอตกไปพักใหญ่ๆ เพราะว่าทรัพย์สินทางปัญญาหายวับไปกับพระเพลิง แต่ด้วยความไม่ประมาท ผมลอก Source code ไว้ที่เครื่องคอมพิวเตอร์ไว้บ้างแต่ไม่ทั้งหมด
  • ถึงแม้จะรู้ว่าใดๆในโลกนี้ล้วนอนิจจัง แต่ประสบการณ์เรื่องนี้ทำให้การใช้งานคอมพิวเตอร์ผมจะแบ็คอัพข้อมูลที่ทำงานได้สอง สามที่เสมอ และที่สำคัญคือผมชอบโปรแกรมมิ่ง จะเก็บ source code ไว้อย่างดี เก็บไว้หลายๆที่เช่นกัน แต่อย่างไรก็ตามต้องขยัน back up ครับ ถ้ามันพังในวันนี้ยังเอาของเมื่อวานมาใช้งานได้

สิบปีที่เครื่องคิดเลขห่างหาย

  • ตั้งแต่นั้นเป็นต้นมาผมก็ไม่เคยซื้อเครื่องคิดเลขอีกเลยประมาณสิบปี เพราะว่าเป็นยุคเวลาของโน๊ตบุ๊ค เอะอะจะคำนวณอะไรๆก็ต้องที่โน๊ตบุ๊ค แต่ชีวิตเหมือนขาดอะไรไป จนมาถึงยุคมือถือจอสัมผัสยิ่งแล้วไปกันใหญ่ เพราะมีโปรแกรมจำลองเครื่องคิดเลขมาให้ใช้งาน วันนั้นไปเดินห้างเห็นเครื่องคิดเลข FX 5800P วางอยู่ที่ชั้นขายของ ป้ายบอกลดราคาเหลือ 1990 บาท จากราคาเดิม 2890 บาทคิดอยู่ในใจว่ามันลดราคากระหน่ำแท้ๆ ราคานี้ไม่รวมสายลิ๊งค์ ดูสเป็คบอกว่าเขียนโปรแกรมได้ มีเม็มโมรีมาให้ 28500 ไบต์ ผมนึกถึง Fx-880P ทันที ตัดสินใจซื้อมาลอง ที่ไหนได้มาถึงบ้านเปิดดูในเน็ตเห็นราคาขายออนไลน์ราคา 1790 บาทได้สายลิ๊งค์ด้วย มันถูกว่ากว่าที่ผมซื้อหลายร้อยบาท เอาละวะ ภูมิใจที่ได้ใช้ของแพงกว่า
Casio FX5800P
Casio FX5800P

FX 5800P กับอารมณ์กระชากใจเหมือนกลับไปเรียน (Back to old school) อีกครั้ง

  • เอาละครับ ได้ใช้เครื่องคิดเลขจริงๆสักที คือหลายสิบปีที่ผ่านมาเหมือนรออะไรบางอย่าง แต่ไม่รู้ว่ามันคืออะไร เจออีกทีใช่เลย เวลากดคีย์เครื่องคิดเลขมันมีการตอบสนองได้อารมณ์เหมือนได้กลับไปใช้และเรียนมหาวิทยาลัยอีกครั้ง ผมเริ่มอ่านคู่มือเพื่อจะเขียนโปรแกรม ใช้เวลาไม่มากนักเพราะคุ้นๆอยู่ คู่มืออะไรก็หาง่ายในยุคนี้ ดาวน์โหลดมาอ่านได้สบายๆ
  • ช่วงเริ่มต้นกับเครื่องคิดเลข ผมเริ่มโปรแกรมง่ายๆก่อนเช่นจำพวก Cogo เช่นหามุม ระยะทางเมื่อกำหนดค่าพิกัดของจุดสามจุด ความรู้สึกแรกคือชอบเครื่องคิดเลขรุ่นนี้พอสมควร
  • เคยคิดเล่นๆว่าเครื่องคิดเลขพวกนี้ ยกเว้น FX-880P ที่เทพไปแล้ว จะสามารถเขียนโปรแกรมระดับ Advance ได้ไหมเช่นแปลงพิกัดไปมาระหว่าง UTM และ ค่าพิกัดภุมิศาตร์ (Geographic) หาระยะทางระหว่างสองจุดบน Ellipsoid หรือหาระยะทาง Geodesic distance

ข้อจำกัดด้านโปรแกรมมิ่งแต่ฟ้าปิดกั้นดินไม่ได้

  • จั่วหัวให้เว่อร์ซะยังงั้น ปัญหาจริงๆที่คนจะเขียนโปรแกรมพวกนี้คืออย่างแรกคือสูตร ไม่รู้จะใช้เวอร์ชั่นไหนดี อย่างที่สองคือเครื่องคิดเลขรุ่นพวกนี้มีตัวแปรจำกัด จาก A ถึง Z นับได้ 26 ตัว น้อยซะจริงๆ ถ้าสูตรมีการใช้ตัวแปรมากกว่านี้จะทำอย่างไร ปัญหานี้ยังมีทางออก เครื่องคิดเลขรุ่นนี้เตรียมตัวแปรอนุกรมให้คือ Z เราสามารถใช้งาน Z[1],Z[2],Z[3],…. ได้มากเท่าที่เมมโมรีเครื่องคิดเลขยังเหลือพอ
  • ข้อจำกัดอีกอย่างคือไม่สามารถนำไฟล์ข้อมูลให้โปรแกรมได้ ดังนั้นโปรแกรมเครื่องคิดเลขจึงจะต้องไม่ซับซ้อนมาก ถ้ามากกว่านี้ต้องใช้เครื่องคอมพิวเตอร์จะดีที่สุด

โปรแกรมแปลงพิกัดจากค่าพิกัดภูมิศาสตร์ ไปยัง ค่าพิกัดระบบพิกัดฉาก UTM

  • ก่อนจะไปต่อเรื่องโปรแกรมมิ่ง มาเรียกน้ำย่อยกันก่อน มาดูรูปการคำนวนกันก่อน ต้องการแปลงค่าพิกัด lat=14°27’44.71″ long=100°58’27.02″ ไปยังค่าพิกัด UTM

input_geo

  • แปลงพิกัดเป็น UTM ได้ค่า N=1599784.382 E=712796.211

output_utm1

  • และคำนวน zone  ของ UTM มาให้ด้วยจุดพิกัดนี้อยู่ในโซน 47

output_utm2

แปลงพิกัดบน WGS84

  • สำหรับโปรแกรมจะแปลงพิกัดบนพื้นฐาน WGS84 เท่านั้น ไม่มีการแปลงข้ามพื้นหลักฐานเพราะมันจะซับซ้อนยุ่งยากเกินกว่าเครื่องคิดเลข เมมโมรีน้อยๆจะทำได้

โปรแกรมคำนวณ

  • ข้อจำกัดอีกอย่างของเครื่องคิดเลขรุ่นนี้คือสามาถใช้สายลิ๊งค์โอนโปรแกรมจากเครื่องไปหาเครื่องอื่นเท่านั้น แต่ถ้าโอนโปรแกรมเข้าเครื่องคอมพิวเตอร์ผมพยายามหาในเน็ตตามฟอรั่ม มีคนพยายามจะแกะโปรโตคอลแต่ไม่น่าจะสำเร็จ ที่นี้จะเอาโปรแกรมมาแสดงบนคอมพิวเตอร์ได้ยังไง ก็ต้องนั่งแกะโปรแกรมทีละเม็ด เขียนด้วยเวิร์ดเพราะต้องการสัญลักษณ์ให้ตรงกับที่แสดงในเครื่องคิดเลขมากที่สุด สัญลักษณ์ส่วนใหญ่หาได้ในฟอนต์ Symbol, Wingdings
  • เมื่อแกะเสร็จแล้วก็ดูทวนอีกทีว่าพิมพ์ได้ตรงกับในเครื่องคิดเลขไหม ไม่มีอะไรตกหล่นก็ export มาเป็นภาพเอามาแปะ ผมพยายามแยกสีให้ดูง่ายตรงไหนเป็นฟังก์ชันใช้สีแดงเข้ม ตัวแปรสีน้ำเงิน เงื่อนไขโปรแกรมใช้สีเขียว ลองดูครับ
Geo2UTM
Geo2UTM
Geo2UTM(continued)
Geo2UTM(continued)
  • สำหรับเครื่องคิดเลขแล้ว ก็ไม่ถือว่าโปรแกรมใหญ่มากนัก แต่สังเกตดูตัวแปร ตั้งแต่ตัว A ถึงตัว Z ใช้แทบหมด ผมคงไม่อธิบายตัวโปรแกรมนะครบ จะยืดเยื้อ สำหรับคนที่เคยเขียนโปรแกรมเครื่องคิดเลขคาสิโอ้รุ่นเหล่านี้ มองแป๊ปเดียวก็โอเคแล้ว

วิธีใช้งาน

  • วิธีใช้งานก็ง่ายครับตามสไตล์เครื่องคิดเลข กดเรียกโปรแกรมก่อน Shift+Prog ที่เครื่องคิดเลขผมเลือก “GEO2UTM

20170108_122613

ตัวอย่างที่ 1

  • โปรแกรมจะถามค่าพิกัดแลตติจูดและค่าลองจิจูด ตัวอย่างการใช้นี้กำหนดให้ latitude = 26°12’3.6128″N longitude = 50°36’25.1928″E ที่เครื่องคิดเลขกดคีย์ “EXE” โปรแกรมจะถามค่าแลตติจูด ป้อนไปให้ทศนิยมครบ ตามรูปแรก  (เครื่องคิดเลขเวลาแสดงค่าพิกัดที่เราป้อนไปแล้ว จะแสดงแค่ทศนิยมสองตำแหน่ง) และป้อนค่าลองจิจูดให้ตามรูปถัดไป

20170108_123456

20170108_123609

ผลลัพธ์การคำนวณ

  • โปรแกรมจะคำนวณค่าพิกัดฉาก UTM ให้พร้อมบอกหมายเลขโซนของยูทีเอ็มมาด้วยและบอกว่าเป็นโซนด้านเหนือหรือด้านใต้ของเส้นศูนย์สูตร ในที่นี้จุดค่าพิกัดนี้แถวประเทศบาเรนห์ โซน 39N (เหนือ)

20170108_130154 20170108_130205

  • เทียบกับค่าที่คำนวณด้วยโปรแกรม Surveyor Pocket Tools ตรงกันครับ หมายเหตุนิดหนึ่งว่าการคำนวณการแปลงพิกัดในโปรแกรม  Surveyor Pocket Tools ใช้ไลบรารีของ Proj4 ผ่านทาง pyproj
Surveyor Pocket Tools
Surveyor Pocket Tools

ตัวอย่างที่ 2

  • มาลองดูกัน ถ้าผู้อ่านเกิดจับพลัดจับผลูไปทำงานต่างประเทศที่อยู่ใต้เส้นศูนย์สูตร ก็ยังสามารถใช้ได้ กำหนด แลตติจูด = 16d9’7.048″S ลองจิจูด = 33d33’49.779″E ค่าพิกัดอยู่ที่ประเทศโมซัมบิค ทวีปอาฟริกา
  • ป้อนค่าพิกัดเข้าดังนี้ ค่าแลตติจูดอยู่ใต้เส้นศูนย์สูตรให้ติดเครื่องหมายลบข้างหน้า ส่วนค่าพิกัดลองจิจูดก็ป้อนปกติ

20170108_132745
20170108_132903

  • ผลลัพธ์การแปลงพิกัดได้ดังนี้ จุดอยู่ที่โซน 36S ใต้เส้นศูนย์สูตร

20170108_132916
20170108_132923

  • เปรียบเทียบผลการคำนวณกับ Surveyor Pocket Tools ตรงกัน

surveyor-pocket-tools_2017-01-08_13-31-09

  • ก็พอหอมปากหอมคอครับ ตอนหน้ามาดูโปรแกรมแปลงค่าพิกัดฉากยูทีเอ็ม (UTM) ไปยังค่าพิกัดภูมิศาสตร์บ้าง ติดตามกันตอนต่อไปครับ

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

ในตอนที่แล้วได้เกริ่นไปเรื่องเส้นโครงแผนที่ความเพี้ยนต่ำ ที่จะออกแบบประยุกต์มาใช้งานเพื่อให้ผู้ที่ออกแบบโครงการก่อสร้างบนระนาบพิกัดฉากตัวนี้สามารถทำได้ง่าย ไม่ต้องกังวลกับเรื่อง scale factor คือแบบที่ออกแบบบนระบบพิกัดฉากยาวเท่าไหร่เมื่อก่อสร้างแล้วไปวัดในสนามต้องได้เกือบเท่ากัน (แต่ต่างก้นน้อยมากๆ) และที่สำคัญที่สุดคือช่วงก่อสร้าง ช่างสำรวจสามารถวางผัง (Setting out หรือ Layout) โดยที่ไม่ต้องใช้สเกลแฟคเตอร์เข้ามาเกี่ยวข้อง เพราะสเกลแฟคเตอร์ที่ได้จากเส้นโครงแผนที่ความเพี้ยนต่ำจะมีค่าใกล้กับ 1.0 มากๆ จนสามารถละเลยไปได้

เครื่องมือช่วยในการออกแบบเส้นโครงแผนที่ต่ำ

ผมเขียนทูลส์ตัวเล็กๆไว้ชื่อ “Init Design LDP” อยู่ในชุด “Surveyor Pocket Tools” เหมือนเดิม ทูลส์ตัวนี้ตามชื่อครับ “Init Design” คือเป็นตัวช่วยในเบื้องต้น เพราะการออกแบบเส้นโครงแผนที่ต่ำ ต้องมีการลองผิดลองถูก (กลั่นและปรุงเพื่อให้ได้รสชาติที่ดีที่สุด) เพื่อเส้นโครงที่มีความเพี้ยนต่ำที่สุด ซึ่งจะให้ค่าสเกลแฟคเตอร์ที่ใกล้เคียงค่า 1.0 มากที่สุด แต่จะให้ใกล้เคียงค่า 1.0 แค่ไหนก็มีตัวแปรหลายตัวที่จะจำกัดความเป็นไปได้นี้

ทูลส์ตัวที่สองคือ “Create LDP” อยู่ในชุด “Surveyor Pocket Tools” เช่นเดียวกัน หลังจากได้เลือกเส้นโครงแผนที่สำหรับ LDP ได้แล้ว กำหนดจุดศูนย์กลางสำหรับ Central Meridian และสุดท้ายคำนวณค่า k0 ทูลส์ตัวนี้จะมาช่วยในการคำนวณหาค่าความเพี้ยน ตลอดจนทำการจัดเก็บค่าพารามิเตอร์เส้นโครงแผนที่ความเพี้ยนต่ำไว้ในฐานข้อมูล (LDP Database) หรือจะเรียกว่าตัวช่วยในการสร้างเส้นโครงแผนที่ก็พอได้

6 ขั้นตอนในการออกแบบ

1.กำหนดพื้นที่ขอบเขตและหาค่าตัวแทนความสูงเฉลี่ยเหนือทรงรี (h0)

กำหนดพื้นที่ขอบเขตของพื้นที่หรือบริเวณที่ต้องการใช้เส้นโครงแผนที่ความเพี้ยนต่ำหรือ LDP ส่วนใหญ่แล้วจะกำหนดให้เป็นสี่เหลี่ยมผืนผ้าคลุมพื้นที่ที่ต้องการใช้งาน เมื่อได้พื้นที่มาคร่าวๆแล้ว ต่อไปจะเลือกค่าความสูงเมื่อเทียบกับทรงรีเฉลี่ยของพื้นที่ (Average ellipsoidal height) ใช้สัญลักษณ์ h0 ย้ำอีกทีครับความสูงนี้ไม่ใช่ความสูงเที่ยบกับระดับน้ำทะเลปานกลาง (Orthometric height)  ถ้าพื้นที่มีค่าระดับเฉลี่ยไม่ต่างกันนักค่าความเพี้ยนจะมีค่าไม่มากนัก แต่ถ้าพื้นที่เป็นที่ราบติดภูเขาสูงแล้วต้องการ LDP  คลุมพื้นที่นี้ ในกรณีนี้จะได้ค่าความเพี้ยนที่สูงซึ่งไม่ดีนัก สำหรับ accuracy ความสูงทรงรีแต่ละจุดในพื้นที่ที่จะนำมาหาค่าเฉลี่ย ไม่จำเป็นต้องละเอียดมากแค่ ±6 เมตรก็เพียงพอ

ldp-h0
ไดอะแกรมแสดงเส้นโครงแผนที่ความเพี้ยนต่ำที่ระนาบพิกัดฉากสัมผัสที่ความสูงเฉลี่ยน h0

2.เลือกเส้นโครงแผนที่และกำหนด Central Meridian ที่จุดใกล้จุดศูนย์กลางพี้นที่

การเลือกเส้นโครงแผนที่ก็เลือกตามลักษณะของพื้นที่ ถ้าพื้นที่ยาวจากเหนือลงมาใต้ก็จะเลือกเส้นโครงแผนที่ Transverse Mercator (TM) ถ้าพื้นที่ยาวจากตะวันออกไปตะวันตกเลือกเส้นโครงแผนที่ Lambert Conformal Conic (LCC) หรือว่าถ้าพื้นที่เฉียงๆทะแยงๆก็เลือกเส้นโครงแผนที่ Oblique Mercator (OM) เมื่อเลือกเส้นโครงแผนที่ได้แล้ว ต่อไปคือหาจุดศูนยืกลางพื้นที่ (centroid) เพื่อวาง Central Meridian (CM) สำหรับเส้นโครงแผนที่ TM และ LCC ส่วนพื้นที่ที่ทะแยงจะวางเส้นโครงแผนที่ OM ก็เลือกสองจุดที่อยู่กลางๆพื้นที่เพื่อให้เส้น Initial line  ผ่าน เมื่อวางแล้วสามารถขยับออกไปซ้ายขวาได้ รายละเอียดมาว่ากันอีกทีในช่วงคำนวณ workshop

3.คำนวณหาค่าสเกลแฟคเตอร์ k0 ที่แกน Central Meridian

เมื่อได้ความสูงเฉลี่ยของพื้นที่ (Average ellipsoidal height) หรือ h0 มาแล้วจะนำมาคำนวณหาค่าสเกลแฟคเตอร์ (Axis Scale Factor) ที่แกนเของเส้นโครงแผนที่ ใชัสัญลักณ์ว่า k0 โดยคำนวณได้ดังนี้

จะเห็นว่าการคำนวณขั้นตอนแรกจะคำนวณหา RG ก่อนตามสูตรที่ 2 ซึ่งจะต้องมีพารามิเตอร์ของทรงรี a, e และค่าพิกัด latitude (φ) เมื่อได้ค่า RG แล้วนำค่าไปแทนหาค่า k0 ได้ดังสูตรแรก ค่า k0 ส่วนใหญ่แล้วเลือกมาใช้แค่ทศนิยมหกตำแหน่งก็พอแล้ว ขั้นตอนการคำนวณนี้เอง ผู้อ่านสามารถนำทูลส์ “Init Design LDP” มาช่วยได้ ซึ่งรายละเอียดจะได้กล่าวในภายหลัง

4.ตรวจสอบความเพี้ยนตลอดทั้งพื้นที่

เมื่อได้เส้นโครงแผนที่ความเพี้ยนต่ำมาแล้ว ก็จะเตรียมจุดในพื้นที่ที่จะนำมาหาค่าความเพี้ยน (distortion) ซึ่งใช้สัญลักษณ์ δ เมื่อคำนวณความเพี้ยนมาทุกจุด สามารถนำมาสร้างเส้นขั้นความสูง (contour) ได้ เพื่อหาชุดที่ค่าความเพี้ยนต่ำที่สุด

สูตรคำนวณค่าความเพี้ยนหาได้ดังสูตรด้านล่าง ค่า k คือ grid scale factor ของจุดที่คำนวณค่าได้ตามเส้นโครงแผนที่ที่เลือกมา

ถ้าได้ค่าเฉลี่ยความเพี้ยนที่ต่ำสุด แต่ยังได้ค่าที่ไม่ได้เกณฑ์ที่ตั้งไว้ กระบวนการคำนวณนี้จะเวียนกลับไปที่ข้อ 2 และข้อ 3 อีกครั้ง  โดยการขยับหา CM ไปด้านตะวันออกหรือด้านตะวันตก หรือขยับ latitude of origin ในกรณีเลือกใช้ TM หรือ standard parallel ในกรณีใช้ LCC ขึ้นไปทางทิศเหนือหรือขยับมาทางทิศใต้ ซึ่งจะมีผลทำให้ค่า k0 ที่ได้จากการคำนวณเปลี่ยนไปจากค่าเดิม จากนั้นทำการคำนวณหาค่าความเพี้ยนทั้งพื้นที่ใหม่อีกครั้ง

ในขั้นตอนนี้สามารถนำทูลส์ “Create LDP” มาช่วยได้ ซึ่งรายละเอียดการคำนวณที่ใช้ทูลส์มาช่วยจะได้กล่าวในรายละเอียดในหัวข้อถัดไป

5.กำหนดพารามิเตอร์เส้นโครงแผนที่ความเพี้ยนต่ำให้เรียบง่าย

ดังที่ผมกล่าวมาแล้ว ค่า k0  จะกำหนดไว้แค่ทศนิยมที่หกเท่านั้น การเปลี่ยนแปลงทศนิยมที่หกเทียบเท่ากับค่าความสูงเปลี่ยนไป 6.4 เมตรหรือประมาณ 1 ppm

การกำหนดค่า k0 ดังตัวอย่างเช่น k0 = 0.999997 หรือ k0 = 1.000012 ส่วนค่า latitude of origin หรือ standard parallel จะเลือกใช้ค่าที่เป็นจำนวนเต็มของลิปดาเช่น  latitude of origin = 23°47’N ส่วน central meridian ก็เช่นเดียวกันเช่น central meridian = 90°24’E

การกำหนดค่าพิกัดสำหรับจุดกำเนิดของระบบพิกัดฉาก (grid of origin) การกำหนดค่านี้ได้แก่ false easting และ false northing นั่นเอง การกำหนดที่นิยมค่าจะไม่เกินหลักแสนเพื่อไม่ให้ไปสับสนกับค่่าพิกัดในระบบ UTM/SPC และค่าพิกัดในพื้นที่ของเส้นโครงแผนที่ต้องไม่ติดลบ ตัวอย่างเช่น false northing = 200000 false easting = 100000

6.กำหนดหน่วยระยะทางและพื้นหลักฐานให้ชัดเจน

กำหนดหน่วยให้ชัดเจนเช่น Linear unit = metric และพื้นหลักฐานที่อ้างอิงเช่น Geometric reference system = WGS 1984

ออกแบบเส้นโครงแผนที่ความเพี้ยนต่ำสำหรับกรุงเทพมหานครและปริมณฑล

ก็ถือว่าเป็นกรณีศึกษาในเบื้องต้น ถ้าสมมติจะออกแบบเส้นโครงแผนที่ความเพี้ยนต่ำในพื้นที่ประมาณ 80 กม. x 90 กม. ระยะทางจากด้านเหนือไปทางใต้ประมาณ 90 กม. ระยะทางจะด้านตะวันออกไปด้านตะวันตกไม่เกิน 80 กม. ค่าความเพี้ยนที่มากสุดต่ำสุดควรจะเป็นเท่าไหร่ ข้อได้เปรียบที่คิดไว้ในใจสำหรับพื้นที่กรุงเทพมหานครและปริมณฑลคือค่าระดับเฉลี่ยค่อนข้างต่ำ ดังนั้นความเพี้ยนที่เกิดจากความสูงต่างไม่น่าจะมากนัก

Bangkok-Samutprakarn-Nonthaburi-Pathumthani

ก็ติดตามกันตอนต่อไปมาว่าเรื่องรายละเอียดตอนออกแบบตามวิธีการที่นำเสนอไป 6 ข้อดังกล่าวข้างต้น

ปลดพันธนาการ 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 ด้วยการเขียนโปรแกรมมาช่วย แต่พบว่ามันมีอะไรที่มากกว่าที่คิด ติดตามกันต่อไปครับ