Tag: ทรงรี

ติดปีกเครื่องคิดเลขเทพ 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 ตอนที่ 3 โปรแกรมคำนวณหาระยะทางจากค่าพิกัดภูมิศาสตร์ (Geodetic Dist Calc)

ติดปีกเครื่องคิดเลขเทพ Casio fx 9860G II SD ด้วยโปรแกรมภาษาซีบน AddIn ตอนที่ 3 โปรแกรมคำนวณหาระยะทางจากค่าพิกัดภูมิศาสตร์ (Geodetic Dist Calc)

มาถึงตอนที่ 3 ขอนำเสนอโปรแกรมคำนวณหาระยะทางที่สั้นที่สุดบนทรงรีด้วยสูตรการคำนวณของ Vincenty  และระยะทางที่สั้นที่สุดบนทรงกลมด้วยสูตรของ Haversine โดยที่กำหนดค่าพิกัดภูมิศาสตร์ (แลตติจูด/ลองจิจูด) มาให้ 2 จุด

Geodesic Distance

ระยะทางที่สั้นที่สุดบนทรงรี (Ellipsoid) จะเรียกว่า Geodesic distance ผมใช้ไลบรารี GeographicLib ที่พัฒนาโดย Charles F. F. Karney ไลบรารีตัวนี้ใช้ c standard library เฉพาะ math อย่างเดียว ดังนั้นมั่นใจได้เลยว่าสามารถเอามาคอมไพล์บนเครื่องคิดเลข Casio fx-9860G II SD ได้อย่างแน่นอน ไฟล์ header และซอร์สภาษาซีสามารถไปดาวน์โหลดได้ตามลิ๊งค์นี้ ให้ดาวน์โหลดเฉพาะไฟล์ geodesic.h และ geodesic.c ก็พอ ในไลบรารีเองจะแบ่งการคำนวณออกเป็น 2 แบบ คือ

  • Inverse กำหนดค่าพิกัดภูมิศาสตร์ 2 จุด คำนวณหาระยะทางและอะซิมัทของจุดเริ่มและจุดสิ้นสุด
  • Direct กำหนดค่าพิกัดภูมิศาสตร์ 1 จุดและอะซิมัทจุดเริ่มต้นและระยะทาง สามารถคำนวณหาค่าพิกัดภูมิศาสตร์จุดสิ้นสุดหรือจุดปลายได้
Image from http://proj4.org

ไลบรารี GeographicLib นอกจากจะคำนวณ Inverse & Direct แล้วยังสามารถคำนวณหาพื้นที่ของรูปปิด polygon ได้ แต่ผมไม่ได้นำมาคำนวณในที่นี้

Great Circle Distance

ส่วนการคำนวณหาระยะทางบนทรางกลม ที่ใช้สูตร Haversine ผมเขียนเองเพราะเป็นสูตรสั้นๆ แบ่งการคำนวณแบบ Inverse และ Direct ได้ หมายเหตุความถูกต้องของระยะทางยังสู้ Geodesic distance ไม่ได้

Image from https://en.wikipedia.org

ดาวน์โหลด (Download) โปรแกรมเครื่องคิดเลข

ไปที่หน้าดาวน์โหลด ตามลิ๊งค์นี้  มองหาโปรแกรม Geodetic Dist Calc จะได้ไฟล์ GEODIST.G1A แล้วติดตั้งลงเครื่องคิดเลข Casio fx-9860G II SD ผ่านทาง SD card หรือผ่าน FA-124

ทดสอบการใช้งาน

ในโหมด “MAIN MENU” ใช้ปุ่มคีย์บอร์ดลูกศรลงมาที่ไอคอน ดังรูป จากนั้นกดคีย์ “EXE” ประมวลผล

จะเห็นเมนูขึ้นมาดังรูป

Vincenty Inverse

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

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

Vincenty Direct

กำหนดค่าพิกัดเริ่มต้น กำหนดระยะทางและอะซิมัท คำนวณหาค่าพิกัดปลายทางและอะซิมัทปลายทาง ที่เมนูกดคีย์ “2” ป้อนข้อมูลทดสอบดังนี้

ได้ผลลัพธ์ดังนี้

Haversine Inverse

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

กดคีย์ “EXE” ได้ผลลัพธ์ดังนี้

จะเห็นว่าค่าพิกัดสองจุดเป็นจุดเดียวกันกับตัวอย่าง Vincenty Inverse แต่ระยะทางที่คำนวณด้วยสูตร Vincentry ได้เท่ากับ 9271.574 กม. แต่ที่คำนวณด้วย Haversine ได้ระยะทาง 9273.574 กม. ต่างกันเล็กน้อยมากประมาณ 0.02  %

Haversine Direct

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

กดคีย์ “EXE” ได้ผลลัพธ์ดังนี้

สรุป

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

 

สนุกกับโปรแกรมเครื่องคิดเลขสำหรับงานสำรวจ ตอนที่ 3 โปรแกรมคำนวณระยะทางบนทรงรี สำหรับเครื่องคิดเลข Casio FX 5800P

โปรแกรมคำนวณระยะทางที่สั้นที่สุดบนทรงรี (Geodesic Distance)

  •  สวัสดีครับผู้อ่านกลับมาพบกันอีกครั้ง ครั้งนี้หอบเอาสูตรยาวๆมาฝากกัน เรื่องระยะทางบนทรงรีความจริงจัดอยู่ในหมวด  Geodesy ที่ถือว่าเป็นเรื่องยากสำหรับนักศึกษาสมัยก่อน เพราะคำนวณทีต้องเปิดตารางล็อก สมัยนี้ถ้าทำความเข้าใจก็ไม่ได้ยากแล้วครับ มีตัวช่วยมากมายเช่นเครื่องคอมพิวเตอร์
  • ระยะทางที่สั้นที่สุดบนทรงรีเรียกว่า Geodesic Distance ถือว่าเป็นะระยะทางที่สั้นที่สุดบนทรงรี จัดเป็นสูตรที่มีมานานนมแล้ว นักคณิตศาสตร์สมัยก่อนคิดค้นขึ้นมาเพื่อช่วยในการคำนวณระยะทางที่สั้นที่สุดเช่นสำหรับการเดินเรือเดินข้ามมหาสมุทร เพราะแผนที่ที่เราใช้กัน ถ้าเมืองท่าที่ต้องการเดินทางนั้นอยู่กันไกลหลายพันไมล์ทะเล จะเอาดินสอมาขีดตรงๆเชื่อมกันบนแผนที่เดินเรือ จะได้ระยะทางที่ไม่ใช่ใกล้ที่สุด จะกลายอ้อมไป
  • เคยสังเกตเวลานั่งเครื่องบินไปต่างประเทศไกลๆไหมครับ จะมีรูปเส้นทางบินบนจอมอนิเตอร์ให้ดู จะเห็นเส้นทางบินเป็นเส้นโค้งๆ ไม่ใช่ตรงๆ นั่นเป็นเพราะเส้นโครงแผนที่ ความจริงแนวเครื่องบินก็ไม่ได้เฉไปไหน แต่เมื่อเอาแนวบินมาวาดบนแผนที่ที่ใช้เส้นโครงแผนที่แบบรักษารูปร่าง(Conformal) ที่เราใช้กันในปัจจุบันเช่น UTM เส้นทางบินจะกลายเป็นเส้นโค้งไป

  • ก่อนจะไปต่อ ผมอยากจะพูดถึงระยะทางอีกระยะทางหนึ่งบนทรงกลม เรียกว่า Great Circle Distance คือระยะทางที่สั้นที่สุดบนทรงกลม คนโบราณนำระยะทางนี้มาคำนวณเส้นทางการเดินเรือ เส้นทางการบิน แต่เนื่องจากโลกเราไมได้กลมแต่ทรงคล้ายออกมาทางทรงรีมากกว่า Geodesic distance เลยแม่นกว่า Great circle distance แต่คนก็ยังนิยมใช้ Greate circle distance มากกว่าอยู่ดีถึงจะคลาดเคลื่อนจาก Geodesice distance ไปประมาณ 0.1% แต่ก็คำนวณง่ายกว่า ในสูตรไม่มีการวนลูป เรียกสูตรการคำนวณบนทรงกลมนี้ว่า “Haversine
  • ถ้าสนใจเรื่อง Geodesic distance และ Greate circle distance ในรายละเอียดและโปรแกรมคำนวณบนคอมพิวเตอร์ติดตามได้ในโปรแกรม Survey Pocket Tools ของผมได้ที่บล็อก priabroy.name

การประยุกต์ใช้งาน

  • บางคนอาจจะว่าไกลตัว แต่เวลาเราค้นหาเส้นทางสำหรับโปรแกรมนำทาง (Navigator) บนโทรศัพท์มือถือทั้งหลาย ทราบไหมว่าเขาคำนวณระยะทางได้อย่างไร อย่างของ google maps ไม่มีเอกสารเปิดเผย แต่หลักการคือเส้นทางต่างๆของกูเกิ้ลจะต่อกันเป็นจุดๆ เรียกว่า node แต่ละโหนดจะมีค่าพิกัดแลตติจูด/ลองจิจูด กำกับอยู่ โปรแกรมจะคำนวณหาระยะทางระหว่างแต่ละโหนดด้วยการนำค่าพิกัดดังกล่าวมาเข้าสูตรคำนวณระยะทางที่สั้นที่สุดบนทรงรี (geodesic distance) หรือไม่ก็ระยะทางบนทรงกลม (great circle distance) เมื่อนำระยะทางแต่ละเส้นมารวมๆกันก็จะได้เป็นระยะทางแสดงให้เราดูบนหน้าจอโทรศัพท์มือถือ
  • ส่วนการเลือกเส้นทางจากต้นทางไปจุดหมายปลายทางแต่ละสถานที่ ว่าไปตามถนนเส้นไหนจะสั้นที่สุดอยูในเรื่อง Travelling Salesman Problem (TSP) อันนี้ลึกซึ้งมากครับ ไม่ขอกล่าวถึง
  • ในฐานะช่างสำรวจ เราใช้กันมันเกือบทุกวันโดยที่ไม่รู้ตัว ก็ลองมาศึกษากันหน่อยว่ามันทำงาน คำนวณมาให้ได้อย่างไร แต่ก่อนจะไปกันต่อ มาลองซักซ้อมเรื่องความรู้เซอร์เวย์กันเล็กน้อยก่อน

เกร็ดความรู้เล็กน้อยสำหรับช่างสำรวจ

  • วันนี้มาว่ากันต่อเรื่องมุมอะซิมัทและฟังก์ชั่น Rec() บนเครื่องคิดเลข Casio FX-5800P ฟังก์ชัน Rec() เอาไว้คำนวณหาค่าพิกัดปลายทาง เมื่อทราบค่าพิกัดต้นทาง, ระยะทางและอะซิมัท
  • Rec(r,θ) เขียนใหม่เป็น Rec(ระยะทาง, อะซิมัท) ก่อนจะเข้าวิธีการใช้งาน มาเท้าความกันหน่อย

  • ลองมาดูรูปด้านบน กำหนดมุมอะซิมัท (θ) และระยะทาง (R) ต้องการหาระยะทางไปตามแกน X จากจุด A ไปหาจุด B หา ได้เท่ากับ  ระยะทาง x Sine (มุมอะซิมัท)
    • ΔX = R x Sin(θ)  เรียกว่า “Departure” คุ้นๆไหม
  • ระยะทางไปตามแกน Y จากจุด A ไปจุด B
    • ΔY= R x Cos(θ)  เรียกว่า “Latitude”
  • ดังนั้นค่าพิกัดจุด A หาได้จาก
    • XB  = XA + ΔX = XA + R x Sin(θ)
    • YB  = YA + ΔY = YA + R x Cos(θ) 
  • ถ้าจำสูตรยากหรือขี้เกียจจำ ฟังก์ชั่น Rec() ช่วยได้ มาดูตัวอย่าง

  • ต้องการทราบค่าพิกัด A เมื่อทราบค่า (X,Y) ของจุด B ดังรูปด้านบน ระยะทาง 100 เมตร อะซิมัทจาก B ไป A = 240º
    • แทนค่าลงไปในสูตร Rec(ระยะทาง, อะซิมัท) = > กดเครื่องคิดเลขเลย Rec(100,240) ผลการคำนวณได้ผลลัพธ์มาสองอย่างคือ ΔX เก็บไว้ในตัวแปร “J” ส่วนค่า ΔY เก็บไว้ในตัวแปร “I”
    •  ผู้อ่านจะสังเกตว่าทำไม  ΔX ไม่เก็บไว้ในตัวแปร “I” และ ΔY ไม่เเก็บไว้ในตัวแปร “J” อย่างที่มันควรจะเป็น ต้องไม่ลืมว่ามุมที่เขาเขียนฟังก์ชันตัวนี้มาคือมุมกวาดจากแกน X แต่เราใช้มุมกวาดจากแกน Y มันเลยสลับร่างสร้างรัก ด้วยประการฉะนี้
  • ลอง Recall (RCL) ค่ามาดูจะได้ I = -50 และ J = -86.603
    • XA  = XB + ΔX = 586.603 – 86.603 = 500
    • YA  = YB + ΔY =  550 – 50 = 500
    • คำตอบคือค่าพิกัดจุด A (500,500)
  • มุมอะซิมัทเป็นมุมที่มหัศจรรย์ครับ เวลาคูณ Cos กับ Sin มันจะไปตกควอดแรนท์ที่ถูกต้องให้ โดยที่หัวสมองเราไม่ต้องไปนึกตาม ลองคิดถึงุมุม Bearing สิครับ สยดสยอง แต่โชคดีบ้านเราไม่ได้ใช้
  • ยังมีเกร็ดเล็กเกร็ดน้อยเกี่ยวกับอะซิมัทอีกนิด มาว่ากันต่อตอนต่อไป

โปรแกรมคำนวณระยะทางที่ส้ั้นที่สุดบนทรงรี (Geodesic Distance)

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

  • การคำนวณจะมีการวนลูปด้วยคำสั่ง For … Next ทุกคร้้งจะมีการเปรียบเทียบค่าใหม่กับค่าเริ่มต้นถ้าค่าต่างกันน้อยกว่า สิบยกกำลังลบสิบสอง (10-12) การคำนวณจะหยุดทันทีแสดงว่าค่าใช้ได้ ผมลองจับจำนวนครั้งที่วนลูปดูประมาณ 3-4 ครั้งแค่นั้น ในตัวโปรแกรมตัวแปรไปดึงตัวแปรอนุกรม Z มาใช้ทั้งหมด 10 ค่า Z[1], Z[2], Z[3], …. Z[10] ตอนประกาศใช้ใช้คำสั่ง 10→DimZ ตอนเลิกใช้ตอนท้ายโปรแกรมประกาศ 0→DimZ เพื่อคืนเมมโมรีให้กับเครื่องคิดเลข
  • เวลาคีย์ชื่อโปรแกรมเนื่องจำกเครื่องคิดเลขจำกัดความยาวตั้งชื่อสั้นว่า “GEODESIC

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

  • ต้องการระยะทาง Geodesic distance
    • จากจุดที่ 1 ค่า latitude = 14°27’27.0″N longitude = 100°54’12.57″E
    • ไปหาจุดที่ 2 ค่า latitude = 14°36’49.53″N longitude = 98°1’39.63″E
  • เรียกโปรแกรมก่อน กดที่ “File” เลื่อนไปที่ “Geodesic

  • ป้อนค่าพิกัดจุดที่ 1 ค่า latitude = 14°27’27.0″N longitude = 100°54’12.57″E

  • ป้อนค่าพิกัดจุดที่ 2 ค่า latitude = 14°36’49.53″N longitude = 98°1’39.63″E

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

  • ผู้อ่านสังเกตไหมเวลากด “EXE” เพื่อคำนวณขั้นสุดท้าย เครื่องจะวูบไปหลายวินาที แต่ถ้าโปรแกรมนี้ถ้าย้ายไปเครื่อง Casio FX-9860G II คงใช้เวลาน้อยกว่าเพราะตามสเป็คแล้วแรงกว่า FX-5800P ประมาณสองเท่า มาดูผลลัพธ์กัน ได้ระยะทาง = 310432.516 เมตร หรือ 310.433 กม.

  • เทียบกับโปรแกรม Geodesic ใน Surveyor Pocket Tools ได้ค่าเท่ากัน ซึ่งหมายเหตุอีกนิดว่าอัลกอริทึ่มที่ใช้คำนวณในโปรแกรม Surveyor Pocket Tools ผมใช้ไลบรารีจาก GeographicLib ซึ่งผลลัพธ์การคำนวณตรงกับสูตรที่เราป้อนในเครื่องคิดเลข ก็ทำให้เรามั่นใจครับว่ามาถูกทาง สูตรถูกต้องแล้ว

  • ตอนหน้าคงเป็นตอนสุดท้ายแล้ว โปรแกรมที่ผมเขียนไว้คำนวณด้านพื้นฐานมีเยอะพอสมควร แต่เนื่องจากผมค้นดูในอินเทอร์เน็ตมีคนเขียนโปรแกรมขายพร้อมเครื่องอยู่หลายๆท่าน เกรงว่าจะไปปิดทางทำมาหากินกัน (พูดอย่างนี้ไม่ใช่โปรแกรมที่ผมเขียนขึ้นมาจะดีกว่านะครับ) ซึ่งผมเคารพในทรัพย์สินทางปัญญาของทุกๆท่าน ผมจึงพยายามเขียนโปรแกรมสำหรับเครื่องคิดเลขฉีกไปในด้าน advance ในประเด็นที่สูตรยากๆที่โปรแกรมคอมพิวเตอร์สามารถทำได้ เครื่องคิดเลขก็สามารถทำได้เช่นกัน ถึงแม้จะช้ากว่า แต่มีดีที่แบตเตอรีอึด ใช้ได้เป็นปี เครื่องก็เบาคุ้มที่จะพกพาไปไหนมาไหน
  • ถึงแม้จะแอพเครื่องคิดเลขบนโทรศัพท์มือถือ จะเอาบวกลบคูนหาร แต่ผมไม่เปิดแอพเครื่องคิดเลขอีกเลย เพราะหยิบโทรศัพท์มือถือมา มันทำให้เสียสมาธิพอสมควร เนื่องจากเปิดหน้าจอมาจะเห็น โปรแกรมต่างๆ เช่นด้านโซเชียลคอยดึงดูดให้กดตามมันไป จนบางครั้งลืมว่าหยิบโทรศัพท์มาทำอะไร
  • พบกันตอนหน้าตอนสุดท้ายครับ อย่าลืมแวะไปเยี่ยมเยียนผมได้ที่เดิม www.priabroy.name ขอบคุณครับ
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 โปรแกรมรวมเครื่องมือฉบับกระเป๋าสำหรับช่างสำรวจ (แจกฟรี) – ตอนที่ 3

Geodesic Distance

  • ผ่านไปแล้วสองโปรแกรม วันนี้มาว่ากันเรื่องโปรแกรมวัดระยะทางที่กำหนดค่าพิกัดให้สองจุด การวัดระยะทางไปตามผิวของทรงรีแนวที่สั้นที่สุดเรียกว่า Geodesic distance ใช้ค่าพิกัดภูมิศาสตร์ แลตติจูดและลองจิจูด ถ้าเป็นระบบกริดอยู่ในโซนเดียวกัน ศูนย์กำเนิดเดียวกันสามารถหาระยะทางได้จากสูตรง่ายๆ ที่ผมเรียนกันตอนมัธยมต้น (หลักสูตรสมัยใหม่ประถมก็เรียนแล้ว)  ระยะทาง = √((x2x1)²+(y2y1)²)
  • มาดูโปรแกรม Geodesic distance เรียงจากบนลงมาไอคอนที่สาม ใช้งานก็ดับเบิ้ลคลิกเลยครับ

spt_introduction

 

  •  ลักษณะรูปร่างของเส้น Geodesic (จาก Wikipedia) จากรูปเส้น s12 ก็คือเส้น geodesic จากจุด A ไปจุด B ส่วน N คือขั้วโลกเหนือ เส้น EFH คือเส้นศูนย์สูตร

440px-geodesic_problem_on_an_ellipsoid-svg

เปิดโปรแกรม

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

geodesic_dist01

  • และที่ไม่ลืมคือปักหมุดลง Google maps เพื่อดูว่าจุดอยู่ไหนบนโลกนี้ และปักหมุดลง Google earth

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

  • วันนี้จะพากลับไปที่โรงเรียนอีกครั้ง ไม่ทราบว่าหลักสูตรวิชาภูมิศาสตร์สมัยนี้เป็นยังไง สมัยผมยังโลว์เทค ครูเอาลูกโลกจำลองขึ้นมาวางโต๊ะหน้าห้อง แล้วครูก็ชี้ให้ดูทวีปต่างๆ แล้วก็ไล่เรียงมาแต่ละประเทศ สุดท้ายก็เมืองหลวงของแต่ละประเทศ ที่จำได้แม่นคือจำแบบรูปภาพ ประเทศอิตาลีทรงเหมือนรองเท้าบู๊ต ประเทศอินเดียทรงเหมือนรังผึ้ง ส่วนประเทศไทยทรงเหมือนด้ามขวาน
  • มีหลายเวปไซต์ที่เก็บค่าพิกัดคร่าวๆของเมืองสำคัญของโลกนี้ลองค้นดูจะเห็นหลายเวปไซต์ ผมจะใช้โปรแกรมลองหาระยะทางระหว่างเมืองหลวงแล้วปักหมุดลง google map และ google earth ตามลำดับ
  • จะลองหาพิกัดจากเมือง “Suva” เมืองหลวงของประเทศฟิจิ ค่าพิกัดแล็ต ลองดังนี้ครับ -18.13333333, 178.416667 อีกเมืองคือพนมเปญ “ភ្នំពេញ” ของบ้านใกล้เรือนเคียงเราครับ ค่าพิกัดแล็ต ลองคือ  11.55, 104.916667 เนื่องจากพิกัดเป็น degree ที่โปรแกรมปรับรูปแบบมุมให้ตรงกัน ค่าพิกัดนี้คร่าวๆนะครับ บางทีผม copy บางเมืองมาลองปักดู แต่ตกทะเลก็มีครับ ป้อนแล้วดังรูปด้านล่าง คลิกไอคอนลูกศรลงเพื่อคำนวณ

geodesic_dist02

  • จะได้ผลลัพธ์ 8,713.178 กม. ถ้าจุดอยู่ใกล้ๆกันลองเปลี่ยนหน่วยจาก Km.  เป็น m. ได้ จากนี้ลองคลิกที่ปักหมุดดู

geodesic_dist03

2016-11-08_21-23-38

  • จะเห็นเส้น geodesic เมื่อปรากฎบนแผนที่ในระนาบราบจะกลายเป็นเส้นโค้งๆบิดๆ
  • ต่อไปลองปักที่ google earth ตั้งชื่อไฟล์ก่อน ลองใช้เมาส์จับรูปลูกโลกของกูเกิ้ลเอิร์ทหมุนๆดู จะเห็นเส้นสีน้ำเงิน นั่นแหละครับเส้น geodesic  เบื้องหลังเส้น geodesic จะมีจุดทั้งหมดประมาณ 200 จุดต่อๆกันครับ ถ้าอยากดูเบื้องหลังลองเปิดไฟล์ kml  ด้วยโปรแกรม Notepad, Notepad++ดูครับ

2016-11-08_21-33-10

  • ลองซูมเข้าไปฝั่งกรุงพนมเปญ พิกัดจากเวปไซต์ตกย่านชุมชนหนาแน่น

2016-11-09_05-04-44

  • ซูมดูอีกฝั่งตกทะเลตามความคาดหมาย

googleearth_2016-11-09_05-03-44

ใช้ค่าพิกัดฐานข้อมูล

  • จะมาลองใช้ฐานข้อมูลที่เก็บค่าพิกัดไว้ เปิดตารางแล้วลากมาใช้งาน ดูรูปด้านล่าง คลิกเปิดตารางข้อมูลที่ไอคอนดัง (1) จะคลิกไอคอนจากด้านซ้ายหรือด้านขวาได้เหมือนกัน จากนั้นจะเห็นตารางข้อมูล ในที่นี้ผมเก็บค่าพิกัดไว้หลายจุด จะลองใช้เมาส์ลากค่าพิกัดจาก (2) ไปช่องตามลูกศรสีแดง วางค่าพิกัดไว้ที่ช่อง Coordinate point 1 การลากก็ธรรมดาครับต้องการค่าไหนในตารางก็กดค้างแล้วลากไปวางที่ช่องป้อนข้อมูลได้
  • เช่นเดียวกันลากค่าพิกัดจาก (3) ไปตามลูกศรสีน้ำเงิน ไปวางไว้ที่ Coordinate point 2 รูปแบบมุมที่เก็บไว้แบบไหน ลากมาแล้วโปรแกรมจะเปลี่ยนตามให้อัตโนมัติครับ

geodesic_dist04

  • คลิกคำนวณดูระยะทางบนทรงรี ได้ระยะทาง 308.548 กม.

geodesic_dist05

  • คลิกที่ไอคอนปักหมุดบน google maps ดูครับ หมุดทั้งคู่ได้จากหมุด GPS ครับ

firefox_2016-11-09_05-40-43

ตัวอย่าง Geodesic line ที่ยาวมาก

  • มาลองข้อมูลที่ผมเก็บไว้ในฐานข้อมูล ค่าพิกัดเมืองแรกเป็นเมือง Valparaíso อยู่ในชีลี ทวีปอเมริกาใต้ ค่าพิกัดที่สองเป็นเมืองเซี่ยงไฮ้ (上海) ประเทศจีนแผ่นดินใหญ่  เจอแล้วลอง drag and drop ค่าพิกัดมาที่ช่องป้อนได้เลย

geodesic_dist06

  • คำนวณดูได้ 18,752.494 กม. ลองปักหมุดดู จะเห็นเส้น  geodesic ยาวมาก ความยาวเกินครึ่งหนึ่งความยาวรอบโลก ลักษณะเส้นจะบิดเป็นเส้นโค้งบนระนาบราบ

firefox_2016-11-09_19-18-55

  • ลองปักดูบน google earth ปรากฎกูเกิ้ลเอิร์ท งง บิดอีกด้านมาให้ ใช้เมาส์จับลูกโลกหมุนไปอีกด้านจะเห็นเส้น geodesic สีน้ำเงิน เนื่องจากเส้นยาวมากไม่สามารถมองเห็นปลายเส้นทั้งสองพร้อมๆกันได้

2016-11-09_19-26-14googleearth_2016-11-09_19-26-44

 

  • ก็ขอจบตอนสำหรับการใช้งานโปรแกรม Geodesic Distance เพียงเท่านี้

โปรแกรมคำนวณหาระยะทางที่สั้นที่สุดบนทรงกลมของโลก (Great Circle Distance)

  • วิธีการนี้สูตรไม่ซับซ้อนเท่า geodesic distance ถือว่าละเอียดน้อยกว่า เพราะสัณฐานของโลกค่อนมาทางทรงรีมากกว่าทรงกลม โบราณใช้คำนวณหาแนวเดินเรือซึ่งเพียงพอ
  • โปรแกรมอยู่ตามลูกศรสีเหลือง เมื่อเปิดจะเห็นให้ป้อนรัศมีของโลกซึ่งค่าที่ใช้ประมาณนี้ครับ 6371-6373 กม. (แนะนำว่าไม่ต้องแก้ไข)

soffice-bin_2016-11-09_19-39-03

  • การใช้งานเหมือนกับโปรแกรมย่อย Geodesic distance เป๊ะเลยครับ ผมจะขอข้ามวิธีการใช้งานไป แต่จะลองคำนวณระยะทางระหว่างเมือง Valparaíso กับเซี่ยงไฮ้ (上海) ได้ระยะทาง 18,742.658 กม. แตกต่างวิธี Geodesic distance ประมาณ 10 กม.ครับ ดูเยอะนะครับแต่ต้องไม่ลืมว่าเส้นนี้ยาวมาก เทียบเป็นเปอร์เซ็นต์แล้วประมาณ 0.05% เท่านั้นsoffice-bin_2016-11-09_19-51-46

การป้อนรูปแบบของมุม

  • การป้อนมุมสำหรับโปรแกรมชุดนี้ ค่อนข้างต้องเป๊ะครับ ผมจะอธิบายให้พอเข้าใจ ถึงที่มาที่ไป ในทางโปรแกรมมิ่งผมใช้ที่เขาเรียกว่า Regular Express คอยสอดส่องว่าผู้ใช้กำลังป้อนอะไรเข้ามา ตรงไหนเป็นตัวเลข 0-9 ตัวไหนเป็นสัญลักษณ์เช่นองศา ° ลิปดา ‘ ฟิลิปดา ” หรือตรงไหนเป็นตัวอักษร d, N, S, E, W และต้องไม่มีช่องว่าง
  • รูปแบบ DD MM SS.SSSS เช่น 14°36’44.21988″N ต้องไม่มีช่องว่างและต้องป้อนสัญลักษณ์ให้ครบทั้งสาม แต่สัญลักษณ์องศาให้ใช้ตัว d แทนได้เช่น 14d36’44.21988″N 
  • โปรแกรมแก้ไขเรื่องป้อนมุม ดูที่  build 375 ขึ้นไป การป้อนมุมมีช่องว่างได้ครับ 14°36’44.21988″N สามารถป้อนแบบนี้ได้ 14d 36′ 44.21988″ N ถ้าป้อนไปแล้วผิดให้เอาเคอร์เซอร์มาไว้ที่ท้ายสุดแล้วกด backspace ไปเรื่อยๆ ดูโปรแกรมว่า build เท่าไหร่เปิดดูที่ About ครับ

surveyor-pocket-tools_2016-11-14_13-58-54

  • ก็ขอจบตอนแค่นี้ครับ ติดตามต่อตอนสุดท้าย การคำนวณหาความสูงจีออยด์ (Geoid separation)