Tag: ฉบับกระเป๋า

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

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

python_2017-07-15_09-19-59

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

python_2017-07-15_09-24-21

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

Linear Precision

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

python_2017-07-15_10-47-21

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

python_2017-07-15_10-45-24

Angular Precision

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

python_2017-07-15_11-19-19

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

python_2017-07-15_11-22-39

python_2017-07-15_11-25-01

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

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

python_2017-07-15_11-27-06

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

python_2017-07-15_11-36-42

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

firefox_2017-07-15_11-36-59

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

python_2017-07-15_14-26-57

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

firefox_2017-07-15_14-32-18

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

python_2017-07-15_14-33-21

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

firefox_2017-07-15_14-36-03

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

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

python_2017-07-15_14-40-42

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

python_2017-07-15_14-43-03

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

googleearth_2017-07-15_14-47-59

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

explorer_2017-07-15_14-52-19

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

การออกแบบเส้นโครงแผนที่ความเพี้ยนต่ำ (Low Distortion Projection) ตอนที่ 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 ด้วยการเขียนโปรแกรมมาช่วย แต่พบว่ามันมีอะไรที่มากกว่าที่คิด ติดตามกันต่อไปครับ
Surveyor Pocket Tools – Update เพิ่มโปรแกรมคำนวณสเกลแฟคเตอร์ (Point Scale Factor) – ตอนที่ 2 (ตอนจบ)

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

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

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

psf_display_db

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

python_2017-02-20_19-01-41

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

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

introducttion_pointscalefactor

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

Surveyor Pocket Tools – เปิดตัวโปรแกรมแปลงไฟล์พิกัดข้ามพื้นหลักฐาน File Transform Coordinates

File Transform Coordinates

  • โปรแกรมแปลงพิกัดข้ามพื้นหลักฐาน Transform Coordinates ที่ผมนำเสนอมาก่อนนั้น แปลงพิกัดได้ทีละจุด อาจจะไม่สะดวกถ้าผู้อ่านมีจุดตั้งแต่ 5-10 จุดขึ้นไป ทางออกผมเลยเขียนโปรแกรมเพิ่มอีกตัวเข้ามา โดยอ่านไฟล์พิกัดที่ต้องการแปลง โดยที่ไฟล์นั้นจะเก็บไว้ในรูปแบบ CSV ที่มีตัวคั่นเป็นเครื่องหมายคอมม่า
  • ขอตั้งชื่อโปรแกรมเป็น File Transform Coordinates โดยใส่คำว่า File นำหน้าชื่อโปรแกรมตัวเดิม เพื่อให้สื่อความหมาย ว่าแปลงพิกัดจากไฟล์

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

  • ตอนนี้รุ่นโปรแกรม Surveyor Pocket Tools ที่มีโปรแกรมย่อย File Transform Coordinates มาด้วยนั้น ต้อง build 447 ขึ้นไป ให้ดูด้านขวาที่ช่องดาวน์โหลด (Download) คลิกและก็ดาวน์โหลดมา unzip และทำการติดตั้งได้ง่ายๆ ไม่กี่คลิก
  • เมื่อติดตั้งแล้วจะได้ไอคอน Surveyor Pocket Tools ออกมา เรียกใช้งานก็ดับเบิ้ลคลิกมาได้จะได้ดังรูปด้านล่าง จะสังเกตว่าโปรแกรมในรุ่นนี้มีโปรแกรมย่อยคือ “File Transform Coordinates

โฟลเดอร์ข้อมูลตัวอย่างทดสอบ

  • ก่อนจะไปต่อผมขอเกริ่นถึงโฟลเดอร์สำหรับข้อมูลตัวอย่างที่จะนำมาทดสอบในโปรแกรม ผมทำไอคอน “Example folder” ไว้ดังรูป

  • เมื่อดับเบิ้ลคลิกเข้าไป ข้อมูลนี้เมื่อโปรแกรมถูกติดตั้งแล้วจะไปอยู่โฟลเดอร์ที่ซ่อนของวินโดส์ “C:\Users\ชื่อผู้ใช้\Appdata\Roaming\Surveyor Pocket Tools” และจะเห็นโฟลเดอร์ “example folder” ให้ดับเบิ้ลคลิกเข้าไปจะได้ดังรูปด้านล่าง

วิธีการใช้งานโปรแกรม File Transfer Coordinates ในเบื้องต้น

  • เปิดโปรแกรม  File Transfer Coordinates แล้วจะเห็นหน้าตาโปรแกรมดังรูปด้านล่าง

  • หน้าต่างไดอะล็อกจะประกอบไปด้วยพาเนลด้านซ้ายและพาเนลด้านขวา ด้านซ้ายสำหรับนำไฟล์ข้อมูลเข้า (input) และด้านขวาสำหรับแสดงผลลัพธ์ (output) ที่ได้จากการแปลงพิกัด ผมทำตารางข้อมูลสไตล์ลายม้าลายให้ดูสวยงามและอ่านง่าย ด้านซ้ายจัดเป็นสี navy blue  ด้านขวาสีโทนเขียวๆ
  • แต่ละด้านจะประกอบไปด้วย ช่องเลือกระบบพิกัดเลือกกรุ๊ป (Group) ก่อนว่าเป็นพิกัดบนเส้นโครงแผนที่หรือพิกัดภูมิศาสตร์บนทรงรี จากนั้นจะเลือกพื้นหลักฐาน (Datum) ตามมา และสุดท้ายจะระบบพิกัด (System)
  • ส่วนการอ่านไฟล์ข้อมูลค่าพิกัดที่ต้องการแปลงจากไฟล์ CSV จะอ่านมาก่อน แล้วค่อยมากำหนดว่าคอลัมน์ไหนเป็นค่า Northing/Latitude หรือว่า Easting/Longitude ทีหลัง
  • และรูปแบบของมุม ว่าเป็นดีกรี (Degree) หรือ รูปมุมแยกมีทศนิยมที่ฟิลิปดา (DD MM SS.SSSS) หรือมุมแยกแบบทศนิยมที่ลิปดา (DD MM.MMMM)
  • ล่างสุดเป็นตารางสำหรับแสดงไฟล์นำเข้า CSV

  • ส่วน button มีปุ่มไอคอนเปิดไฟล์ข้อมูล ด้านบนขวามือ มีปุ่มสำหรับคำนวณรูปลูกศรชี้ไปทางขวา และปุ่มไอคอนรูปโลโก้ excel สำหรับ export จัดเก็บผลลัพธ์ออกเป็นไฟล์ในรูปแบบ Microsoft Excel

เปิดไฟล์ข้อมูลตัวอย่างเพื่อทดสอบ

  • สถานที่ของโฟลเดอร์ที่เด็บข้อมูลตามที่ผมเกริ่นไปตอนต้นบทความ ที่โปรแกรม File Transform Coordinates คลิกทีไอคอนรูปโฟลเดอร์ด้านบนขวา จะเห็นไดอะล็อกเลือกไฟล์ ให้เลือกปลายทางมาที่โฟลเดอร์ดังกล่าว

  • เลือกไฟล์ “boundary2-utm47n-indian1975.csv” เมื่อเปิดแล้วจะเห็นไออะล็อก แสดงว่าในไฟล์มีอะไรอยู่บ้างดังรูปด้านล่าง จะเห็น header “Name,Northing,Easting” ซึ่งผมในฐานะคนเขียนโปรแกรม แนะนำว่าการมี Header นั้นมาจะใช้งานโปรแกรมได้สะดวกที่สุด แต่การไม่ใส่ก็ไม่ได้ผิดอะไรครับ แต่ต้องคลิกมากกว่าเดิมเมื่อเปิดไฟล์มาแล้ว

แปลงค่าพิกัดจากพื้นหลักฐาน Indian 1975 ไปยังพื้นหลักฐาน WGS84

  • ค่าพิกัดในไฟล์ชุดนี้เป็นค่าพิกัดฉากในระบบ “UTM Zone 47N” อยู่บนพื้นหลักฐาน “Indian 1975”  ต้องการแปลงไประบบพิกัดฉาก “UTM Zone 47N” ของพื้นหลักฐาน “WGS84

  • ขั้นตอนต่อไปก็มาดูข้อมูลเมื่อเขียนลงตารางม้าลายแล้วจะเป็นอย่างไร ด้านซ้ายจะเขียนลงตารางให้ทั้งหมด ถ้ามี header โปรแกรมจะจัดคอลัมน์ให้ แต่ใน Header อย่างเช่นค่าพิกัด “Y” ต้องมีข้อความแบบนี้ “Northing/North/Latitude” ส่วนตารางด้านขวาจะลอกตารางด้านซ้ายมาทั้งหมด แต่มีคอลัมน์ว่าง ที่จะรอการแปลงพิกัดมาใส่ ดูรูปด้านล่าง

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

  • จะเห็นว่าตอนนี้ไฟล์ข้อมูลเป็นค่าพิกัดฉาก UTM ตามที่ผมกล่าวไปแล้ว แต่ในโปรแกรมยังเป็น “Geographic Coordinate System” แบบค่าพิกัดเป็น “Latitude/Longitude” อยู่ ดังนั้นเราจะมาเปลี่ยนระบบพิกัดเป็น
    • Group “Projected Coordinate System
    • System “UTM Zone 47N
    • Datum “Indian 1975

พิมพ์ค้นหาระบบพิกัดสะดวกรวดเร็ว

  • ก่อนหน้านี้เวลาค้นหาพื้นหลักฐาน Datum หรือว่า Projection เช่นพื้นหลักฐาน WGS84 ค่อนข้างจะใช้เวลาเพราะมีตัวย่อยๆเยอะมาก ต้องใช้เมาส์สกรอลล์ สลับกับการใช้คีย์บอร์ดกดตัวหน้าช่วย ตอนนี้ผมปรับปรุงเพิ่มตัวช่วย ขอแค่รู้คำก็ให้พิมพ์ลงไป ที่ด้านล่างตรง Datum ผมพิมพ์คำว่า Indian จะมีพื้นหลักฐานที่เกี่ยวข้องกันมาโผล่สามอย่างคือ “Indian 1960” , “Indian 1954”, “Indian 1975” ให้คลิกเลือกที่ “Indian 1975

  • เลือก Group ซึ่งจะมีแค่สองอย่าง ไม่ต้องพิมพ์ใช้เมาส์คลิกไปที่ “Projected Coordinate System” จากนั้นมาดูที่ System ซึ่ง Indian 1975 จะมี UTM แค่สองโซนคือ 47N กับ 48N ดังนั้นใช้เมาส์คลิกเลือก “Indian 1975 / UTM zone 47N

  • มาดูปลายทางด้นขวาบ้าง จะเปลี่ยนระบบพิกัดเช่นเดียวกัน ดังนี้
    • Group “Projected Coordinate System
    • System “UTM Zone 47N
    • Datum “WGS84
  • ที่ชอง Datum ผมพิมพ์ world จะเห็นมีสามรายการที่เกี่ยวข้องขึ้นมาดังรูป เราเลือก “World Geodetic System 1984

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

  • ต่อไปจะเลือกเส้นโครงแผนที่ ที่ช่อง System ผมพิมพ์ 47N จะเห็นมีรายการที่เกี่ยวข้องขึ้นมาสองรายการ รายการแรกที่เราต้องการคือ “WGS84 / UTM zone 47N” ส่วนรายการที่สองเป็นระบบพิกัดของเมียนมา ที่ใช้กับงานขุดเจาะแก๊สในอ่าวเมาะตะมะ ชื่อเต็มๆคือ “Moattama 92 / UTM zone 47N”

  • ต่อไปเลือกคอลัมน์ที่จะให้ผลลัพธ์ไปออกที่ตาราง จะเห็นคอลัมน์ว่างๆมารออยู่ 4 คอลัมน์ ส่วนชื่อเรียกเป็นหมายเลขคือ Col4, Col5, Col6 และ Col7 เรียงกันไป ตัวนี้โปรแกรมเลือกมาให้เป็นค่าปริยายครับ
  • ความหมายคือต้องการให้ค่า Northing ไปเขียนที่  คอลัมน์ที่ 4 (Col4) ต้องการให้ค่า Easting ไปเขียนที่ คอลัมน์ 5 (Col5) เป็นต้น แต่ถ้าผู้ใช้จะสลับก็ได้นะครับ

  • การตั้งรูปแบบมุมไม่มีครับ เพราะต้องการแปลงค่าพิกัดแค่ระบบพิกัดฉากเท่านั้น

คำนวณ Grid Scale Factor & Convergence

  • ผมได้เพิ่มรายการคำนวณ Grid Scale Factor (GSF) & Convergence สูตรคำนวณสองอย่างนี้ไม่มีไลบรารีตัวไหนทำให้ ต้องมาเขียนเอง เปรียบเทียบค่า Grid Scale Factor แล้วกับโปรแกรม Blue marble “Geographic Calculator” และ Trimble “Coordinates Calculator” ค่าใกล้เคียงกันมาก แตกต่างกันที่ทศนิยมที่ 9 
  • แต่กับ Convergence ทำให้ผมแปลกใจเนื่องจาก สองโปรแกรม Geographic Calculator & Coordinates Calculator และที่ผมคำนวณมา  ให้ค่าที่ต่างกันที่ทศยิมที่ 4 ทำไมเป็นอย่างนั้น ทำให้ผมไม่มั่นใจ ทั้งๆที่สูตรมีแค่บรรทัดเดียวเท่านั้น
  • เพิ่มเติมอีกนิดว่า Convergence เป็นมุมต่างระหว่างทิศเหนือจริงกับทิศเหนือในระบบพิกัดฉาก สมัยเมื่อ 20 กว่าปีที่แล้ว ที่ยังไม่มี GPS/GNSS ผมเคยไปรังวัดอะซิมัทภาคทิศจากดาวและดวงอาทิตย์ จำได้ว่าใช้มุม convergence ที่คำนวณด้วยมือสมัยนั้น แล้วเอาค่าอะซิมัทที่รังวัดมาได้มาลบออกด้วยมุม convergence จะได้อะซิมัทบนระบบพิกัดฉาก แล้วสมัยนี้เอาไปใช้อะไรกันบ้าง นึกไม่ออกครับ

คำนวณและแสดงผล

  • ตอนนี้ตั้งค่าทุกอย่างพร้อมแล้วจะทำการคำนวณ ก็คลิกที่ไอคอนรูปลูกศร คำนวณแปลงพิกัดจากซ้ายไปขวา ได้ผลลัพธ์ดังรูปด้านล่าง จะได้ค่าพิกัดฉาก UTM บน WGS84 พร้อมคำนวณ Grid Scale Factor และ Convergence

จัดเก็บไฟล์ผลลัพธ์ในรูปแบบ Excel

  • เมื่อคำนวณแล้ว สิ่งที่ต้องการก็คือไฟล์ที่เก็บข้อมูลค่าพิกัดที่ได้จากการแปลงพิกัดในรูปแบบ Excel ซึ่งเป็นโปรแกรมสามัญประจำเครืองคอม คลิกที่ไอคอนรูป Excel + ลูกศรสีเหลือง โปรแกรมจะแสดงไดอะล็อก เพื่อถามที่จัดเก็บไฟล์ ป้อนชื่อไฟล์
  • มาเปิดดูไฟล์ผลลัพธ์กัน ผมใช้ LibreOffice Calc เพื่อเปิดไฟล์ผลลัพธ์ดังกล่าว  (LibreOffice โปรแกรมเปิดซอร์สเดี๋ยวนี้เก่งกว่าแต่ก่อนมาก)

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

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

  • จะแปลงพิกัดจากระบบพิกัดฉาก UTM zone 48N ของ Lao National Datum 1997 ไปยังค่าพิกัดภูมิศาสตร์ บน WGS84
  • เปิดไฟล์ข้อมูลอีกครั้งที่โฟลเดอร์ไฟล์ตัวอย่างข้อมูล “example folder” เลือกไฟล์ “coordinates-lao 1997-utm 48n.csv

  • ในไฟล์นี้ผมใส่  header ไว้ด้วย

  • เลือกระบบพิกัดผมพิมพ์คำว่า lao โปรแกรมจะเลือกที่เกี่ยวข้องมาให้ดังรูป จะเห็นมีไอเท็ม “Lao 1993” และ “Lao National Datum 1997” เลือกอย่างหลังครับ

  • เลือกระบบพิกัดให้ได้ตามรูปด้านล่าง และรูปแบบของมุมเลือก DD MM SS.SSSS

  • คลิกที่ไอคอนรูปลูกศรเพื่อทำการคำนวณ จะได้ค่าพิกัดภูมิศาสตร์ บน WGS84

  • จัดเก็บเข้าไฟล์ excel แล้วเปิดดูที่ไฟล์ จะเห็นที่คอลัมน์ “Latitude”, “Longitude” ที่โปรแกรมคำนวณมาให้

  • ฟีเจอร์คำนวณ Scale Factor และ Convergence ได้เพิ่มไปในโปรแกรม Transform Coordinates ที่คำนวณจุดต่อจุด และการพิมพ์เพื่อเลือกระบบพิกัดก็ทำได้เช่นเดียวกัน

  • โปรแกรมในชุดแปลงพิกัดยังมีฟีเจอร์ที่จะปรับปรุงเพิ่มเติมในอนาคตพอสมควร จะเพิ่มเติมพื้นหลักฐานและครอบคลุมเส้นโครงแผนที่ให้มากกว่านี้
  • พบกันตอนต่อไปครับ

Surveyor Pocket Tools – คำนวณพื้นที่ เรื่องธรรมดาที่ไม่ธรรมดา (ตอนที่ 3 ตอนจบ)

ทดสอบข้อมูลค่าพิกัดรูปปิดบนพื้นหลักฐาน Indian 1975

  • ขอพูดเกี่ยวกับ work flow สักนิด เมื่ออ่านไฟล์รูปปิดจากไฟล์  CSV มาแล้ว โปรแกรมจะคำนวณหาจุด centroid หรือจุดศูนย์ถ่วงของพื้นที่ แล้วจะแปลงพิกัดเป็นค่าพิกัดในพื้นหลักฐาน WGS84 ทั้งค่าพิกัดของรูปปิดและจุดศูนย์ถ่วงด้วย จากนั้นโปรแกรมจะสร้างเส้นโครงแผนที่ Lambert Azimuthal Equal Area โดยการใช้จุดศูนย์ถ่วงเป็น latitude of origin, central meridian แล้วเรียกใช้ไลบรารี Proj4 เพื่อทำการแปลงพิกัดไปยังระบบพิกัดฉากของเส้นโครงแผนที่ LAEA สุดท้ายใช้สูตรผูกเชือกรองเท้า ทำการคำนวณหาพื้นที่ จะได้พื้นที่ออกมา แต่ยังเป็นพื้นที่บนทรงรีอยู่
  • ที่หน้าต่างโปรแกรมคลิก “Import” แล้ว browse… เพื่อนำไฟล์ CSV เข้า

compute_area_import2

  • จะใช้ข้อมูลที่ผมเตรียมไว้ให้ อยู่ในโฟลเดอร์ “C:\Users\ชื่อผู้ใช้\AppData\Roaming\Surveyor Pocket Tools\example data” เลือกไฟล์ “boundary2-utm47n-indian1975.csv

surveyor-pocket-tools_2016-12-26_17-06-30

  • เมื่อคลิก “ok” จะเห็น preview ไฟล์นี้ไม่มีชื่อหัวคอลัมน์ เราต้องไประบุทีหลัง

compute_area_import3_noheaders

  • เมื่ออ่านไฟล์เข้าตารางข้อมูล จะเห็นตรงกรอบสีแดงด้านบนเป็น “Col1” ทั้งหมด

compute_area_noheaders

  • ตั้งหัวข้อคอลัมน์ให้ตรงกับ ชื่อจุด Northing Easting

compute_area_set_headers

  • ต่อไปก็ตั้งระบบพิกัดเป็น “Indian 1975 / UTM Zone 47N”

compute_area_set_crs

  • คลิกคำนวณที่ไอคอนเครื่องคิดเลข โปรแกรมจะคำนวณหาพื้นที่ให้ มาลองปักหมุดดูกันครับ บน google maps คลิดที่ทูลส์บาร์ด้านขวา

nvidia-share_2016-12-26_20-27-43

  • ปักหมุดที่ google earth

2016-12-26_20-30-02

การส่งออกไฟล์เป็น Shape file

  • ใครที่ไม่ได้ใช้งานจำพวก GIS ก็ข้ามหัวข้อนี้ไปนะครับ อย่างที่ผมบอกไว้ว่าเส้นโครงแผนที่ Lambert Azimuthal Equal Area รักษาพื้นที่แต่ไม่รักษารูปร่าง แต่ข้อดีคือการจุด origin ไปแปะอยู่ที่จุดศูนย์ถ่วง ทำให้รูปร่างไม่น่าจะเพี้ยนมากนัก ต่อไปคลิกที่ “Export…”

compute_area_export_to_shape_file

  • จะเห็นไดอะล๊อก เลือกปลายทางไฟล์ที่จะเก็บ เลือกรูปแบบเป็น “ESRI Shape file

surveyor-pocket-tools_2016-12-26_21-23-27

  • ผมตั้งชื่อว่า “Boundary2” โปรแกรมจะสร้างไฟล์ให้ มีทั้งหมด 4 ไฟล์คือ  Boundary2.dbf, Boundary2.shx, Boundary.shp และ Boundary.prj ผมจะลองเปิด QGIS แล้วเปิดไฟล์ชุดนี้เข้าไป ที่ QGIS ที่เมนู “Project => New” เพื่อสร้าง project ใหม่ จากนั้นคลิกที่เมนู “Project => Project Proterites” เลือกหน้า CRS (Coordinate Reference System) ตั้งค่าตามรูปด้านล่าง คือเราจะให้ QGIS แปลงพิกัดเป็น WGS84 ในขณะนำเข้า

qgis-bin_2016-12-27_05-36-35

  • แต่หลายครั้งผมพบว่า QGIS รู้สึกจะเอ๋อๆ ไม่ยอมแปลงพิกัดแบบทันทีทันใดตอนนำเข้า จากนั้นเลือกเมนู “Layer => Add Layer => Add Vector Layer…” เลือกไฟล์ชือ “Boundary2.shp”
  • เข้ามาแล้ว ผมตรวจดู QGIS แปลงพิกัดให้เรียบร้อย ไปที่เมนู Setting => Custom CRS… จะเห็นร่องรอยระบบพิกัดที่นำไฟล์เข้าไป QGIS

qgis_user_defined_crs

  • ข้อควรจำ ระบบพิกัดของเส้นโครงแผนที่ LAEA  ที่ผมทำขึ้นมาช่วยหาพื้นที่ ตัวนี้ควรใช้ชั่วคราวเท่านั้นนะครับ เพราะไม่ได้เป็นมาตรฐาน ถ้านำเข้าโปรแกรมด้าน GIS ควรรีบแปลงระบบพิกัดไปหาตัวมาตรฐานอื่นทันที
  • แต่ถ้าผู้อ่านต้องการส่งออกไฟล์ Shape file บนระบบค่าพิกัดเป็น UTM แต่จำกัดเฉพาะบน WGS84 เพราะว่า Indian 1975 ที่อยู่ตามโปรแกรม GIS ทั้งหลายค่าพารามิเตอร์ Transformation ไม่ตรงกับประเทศไทย ที่เราใช้กัน ค่าที่เราใช้กันคือ dx = 204.5, dy = 837.9, dz = 294.8 ตามกรมแผนที่ทหารปี 2551 ดังนั้นถ้ามีการแปลงพิกัดบนโปรแกรมเหล่านี้ไปหาระบบพิกัดอื่นจะไม่ถูกต้อง เว้นเสียแต่ว่าเราสามารถกำหนดตัวแปรพารามิเตอร์เองได้
  • ที่โปรแกรมคลิก “Export…” ด้านขวา เลือกโฟลเดอร์ปลายทางแล้วป้อนขื่อไฟล์ แล้วลองเปิดบนโปรแกรมด้าน GIS ดู

compute_area_export_shapefile_utm

การเปลี่ยนหน่วยพื้นที่

  • ผ่านมาหลายตอนแล้วผมลืมบอกไปว่า สามารถเปลี่ยนหน่วยพื้นที่ได้จาก ตร.ม. ไปยัง หน่วยไร่ของบ้านเรา หรือแม้แต่หน่วย hectare หรือ acre รอบๆบ้านเรายังใชหน่วยพวกนี้อยู่ เช่นเมียนมา ยังใช้หน่วย เอเคอร์อยู่

compute_area_changed_unit

ปัญหาของแปลงที่ดินอยู่คร่อมเส้นแบ่งโซน

  • ปัญหาของระบบพิกัดฉากอีกอย่าง คือตรงบริเวนเส้นแบ่งโซน ที่ศูนย์พิกัดอยู่คนละที่กัน ถ้าเป็นงานก่อสร้างบริเวณช่วงแบ่งโซนนี้ อาจจะทำหมุดไว้อย่างน้อยหนึ่งคู่ พร้อมกับมีพิกัดอิงอยู่ทั้งสองโซน
  • สำหรับแปลงที่ดิน ถ้าไม่ล้ำโซนไปหากันไกลมากนัก ก็น่าจะอนุโลมในการใช้โซนข้างใดข้างหนึ่ง  การคำนวณพื้นที่ถ้าจะต้องมาแบ่งพื้นที่ตามโซนแล้ว นำพื้นที่มารวมกันทีหลัง ค่อนข้างยุ่ง
  • แต่ถ้าแปลงที่ดินเก็บค่าพิกัดแบบภูมิศาสตร์ ก็ง่ายครับ มาดูข้อมูลทดสอบแปลงรูปปิด อยู่บนพื้นที่ระว่างโซน 47 และโซน 48 ค่าพิกัดเป็นแบบภูมิศาสตร์
  • คลิก “Import…” ที่ทูลส์บาร์ด้านขวา เลือกไฟล์ชื่อ “boundary4-crossed-zone47n-zone48n.csv

python_2016-12-27_11-06-49

  • ดู preview ไฟล์มีหัวชื่อคอลัมน์ ค่าพิกัดเป็นแลตติจูด ลองจิจูด

python_2016-12-27_11-07-01

  • ที่ตารางข้อมูล ตั้งระบบพิกัดเป็น “WGS84 / Geographic” คลิกที่ไอคอนเครื่องคิดเลขทำการคำนวณ ที่นี้ผลการคำนวณพื้นที่ในระบบพิกัดฉาก โปรแกรมจะพบว่ามีการข้ามโซน จะคำนวณพื้นที่ให้ทั้งสองโซน ค่าจะต่างกันเพราะว่าค่า scale factor ไม่เท่ากัน พื้นที่แปลงนี้เมื่อคำนวณบนระบบพิกัดฉากโซน 47 จะได้ค่าออกมา = 291 ไร่ 2 งาน 87.47 ตารางวา 

compute_area_crossed_zone_comparison1

  • ลองคลิกเลือกเป็นโซน 48 ตามรูปจะได้พื้นที่ 291 ไร่ 2 งาน 86.61 ตารางวา สองโซนต่างกัน = 87.47 – 86.61 = 0.86 ตารางวา ถือว่าต่างกันน้อยมาก แต่ถ้าเทียบกับพื้นที่บนทรงรีแล้ว ต่างกัน 2 งานกว่าๆ ถือว่ามากพอสมควร

compute_area_crossed_zone_comparison2

ตรวจสอบพื้นที่บนทรงรี

  • ที่จุดศูนย์ถ่วง latitude = 13.9468690 longitude = 102.0021300  ค่าระดับเฉลี่ยเทียบกับรทก. (H) ประมาณ 30 เมตร ความสูงจีออยด์(N) =-26.653 เมตร ความสูงเทียบกับทรงรี (h) = H + N = 30-26.653 = 3.347 เมตร รัศมีทรงรีบริเวณนี้ = 6,376,910 เมตร หาค่า ESF = 6376910/(6376910+3.347) = 0.999999475
  • ค่า บน UTM Zone 47N GSF = 1.00090202 บน UTM Zone 48N GSF = 1.000898320
  • พื้นที่ในระบบพิกัดฉาก UTM Zone 47N = 466749.898 ตร.ม. คิดเป็นพื้นที่บนทรงรี =  466749.898 /  1.00090202² = 465909.000 ตร.ม. พื้นที่บนทรงรีที่ได้จากเส้นโครงแผนที่ LAEA = 465909.007 ตร.ม. ต่างกันที่ทศนิยมตำแหน่งที่ 3 ถือว่าน้อยมาก
  • พื้นที่ในระบบพิกัดฉาก 48N = 466746.458 ตร.ม. คิดเป็นพื้นที่บนทรงรี  = 466746.458/1.000898320 = 465909.011 ตร.ม. ต่างกันที่ทศนิยมตำแหน่งที่ 3 เช่นเดียวกัน อย่างไรก็ตามค่าที่ได้จาก LAEA ผมถือว่าให้ค่าที่ถูกต้องที่สุด
  • คิดเป็นพื้นที่จริง = 465907.007 / 0.999999475² = 465907.496 ตร.ม.
  • ลองปักหมุดดูบน google earth เส้นสีน้ำเงินหนาๆคือเส้นแบ่งโซน ด้านซ้ายคือโซน 47 ด้านขวาคือโซน 48

googleearth_2016-12-27_11-27-45

สรุป

  • การคำนวณพื้นที่บนทรงรีจากเส้นโครงแผนที่ Lambert Azimuthal Equal Area มีความน่าเชื่อถือ ทำให้การคำนวณพื้นที่จากระบบพิกัดฉาก UTM สามารถหาพื้นที่ได้โดยไม่ต้องอาศัยการคำนวณหาค่า Grid Scale Factor
  • ก็หวังว่าทูลส์ตัวนี้จะช่วยช่างสำรวจคำนวณพื้นที่ได้โดยสะดวกและสามารถนำผลลัพธ์ไปใช้งานอื่นๆได้ง่าย

เครดิต

  • ผมได้เพิ่มไลบรารีภาษา python มาช่วยอีกสองไลบรารีคือช่วยในการเขียน Excel และเขียน shape file ทำให้งานยากๆกลายเป็นเรื่องง่ายๆ
  • เขียนไฟล์ Excel ใช้ openpyxl พัฒนาโดย Eric Gazoni, Charlie Clark ใช้งานง่าย มีทุกอย่างที่ต้องการ ไม่ต้องอ่านคู่มือมาก
  • เขียนไฟล์ ESRI Shape file ใช้ pyshp พัฒนาโดย Joel Lawhead ใช้งานง่ายมาก อ่านคูมือไม่กี่บรรทัดก็ใช้งานได้แล้ว

ก้าวเล็กๆต่อไปของ Surveyor Pocket Tools

  • ในภายภาคหน้า ผมจะเขียนทูลส์เล็กๆมาช่วยคำนวณเรื่อง scale factor ทั้ง ESF, GSF และ CSF  ให้มาใช้งานได้ง่ายๆสะดวก อานิสงส์ของโปรแกรมคำนวณพื้นที่ตัวนี้ ทำให้ผมสามารถเอาสูตรแปลงพิกัด Geographic => UTM และแปลงจาก UTM => Geographic และการคำนวณ ESF & GSF ลงเครื่องคิดเลข Casio Fx5800p เนื่องจากติดตามสูตรเขียน scale factor แต่ไปเจอสูตรทั้งหมดอยู่ด้วยกัน ก็เลยเอามาลงที่เครื่องคิดเลขได้ทั้งหมดแบบนึกไม่ถึง
  • ทุกโปรแกรมบนเครื่อง desktop pc & notebook ของผมยังฟรีเหมือนเดิม ร่วมแบ่งปันกัน โลกนี้จะน่าอยู่มากยิ่งขึ้น” ติดตามตอนต่อไปครับ

Surveyor Pocket Tools – คำนวณพื้นที่ เรื่องธรรมดาที่ไม่ธรรมดา (ตอนที่ 2)

คำนวณพื้นที่ polygon จากไฟล์ในระบบพิกัดฉาก UTM

  • ตอนแรกได้สาธยายเรื่อง Scale factor ของเส้นโครงแผนที่ที่มีผลต่อการรังวัดของช่างสำรวจไปแบบพอหอมปากหอมคอ และท้ายสุดได้ใช้โปรแกรมเปิดไฟล์ CSV ที่เก็บค่าพิกัดแบบภูมิศาสตร์ของรูปปิด polygon คำนวณหาพื้นที่บนระนาบ UTM และพื้นที่บนทรงรี ก็เห็นไปแล้วว่าสองพื้นที่นี้มีความแตกต่างกัน เพราะสืบเนื่องจาก  Scale factor เบื้องหลังการทำงานของโปรแกรมก็คือ เมื่ออ่านพิกัดภูมิศาสตร์เข้ามาก็ใช้ไลบรารี  Proj4 ทำการแปลงย้อนกลับไปค่าพิกัดฉาก UTM แล้วทำการคำนวณหาพิกัดทั้งสองแบบ
  • ตัวอย่างต่อไปจะอ่านไฟล์ที่เก็บในรูประบบพิกัดฉาก UTM บน WGS84 ที่โปรแกรมที่ทูลส์บาร์ด้านขวา คลิก “Import” เพื่อเปิดนำเข้าไฟล์ CSV

compute_area_import2

 

  • ไปที่โฟลเดอร์โปรแกรมที่ผมกล่าวไปแล้วในตอนที่ 1 เลือกไฟล์ “boundary1-utm47n-wgs84.csv

 

surveyor-pocket-tools_2016-12-25_10-44-50

  • โปรแกรมจะ  preview ให้ดูก่อนว่าที่เลือกมานั้นใช่หรือไม่  ถ้าใช่ก็คลิก “OK” ไปต่อ

surveyor-pocket-tools_2016-12-25_10-56-05

  • โปรแกรมจะนำค่าพิกัดของรูป polygon มาใส่ไว้ในตารางข้อมูล พร้อมกับจัดคอลัมน์ Northing/Easting ให้ อย่าลืมตรวจสอบด้วยว่าถูกต้องไหม

compute_area_example2

  • ไฟล์นี้ทราบดีว่าระบบพิกัดฉากเป็น UTM Zone 47N WGS84 ตั้งระบบพิกัดที่ Reference Coordinate System ดังรูป เลือก “WGS84 / UTM Zone 47N” จากนั้นคลิกที่ไอคอนรูปเครื่องคิดเลข

compute_area_calc2

  • จะได้ผลลัพธ์ จะเห็นว่าพื้นที่บนทรงรี = 85129.846 ตร.ม. พื้นที่บน UTM = 85061.867 ตร.ม.ต่างกัน 67.979 ตร.ม. ขอพักผลลัพธ์ตรงนี้ไว้ก่อน

compute_area_result2

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

  • การคำนวณพื้นที่ของระบบพิกัดฉาก จะใช้สูตรเชือกรองเท้า (Shoelace’s formula) ที่ผมกล่าวไปในตอนที่ 1 ง่ายๆครับ ยิ่งถ้าใช้ excel แล้วยิ่งง่าย จากข้อมูลข้างต้นผมแปลงค่าพิกัดรูปปิดทั้งหมดไปยังค่าพิกัดภูมิศาสตร์ด้วยไลบรารี Proj4 พอได้ค่าพิกัดภูมิศาสตร์ (แลตติจูด ลองจิจูด)มาแล้ว จะคำนวณหาพืนที่ได้อย่างไร ใช้สูตรเชื่อกผูกรองเท้าไม่ได้แล้ว และพื้นผิวไม่ใช่ระนาบราบแบบ UTM แต่เป็นพื้นผิวโค้ง
  • สำหรับสูตรที่ใช้คำนวณพื้นที่บนทรงรี ค่อนข้างซับซ้อนเป็นเรื่อง math หนักๆ ถ้าสนใจลองอ่านของ Charles F. F. Karney, Geodesics on an ellipsoid of revolution,Feb 2011. http://arxiv.org/abs/1102.1215 ตำราสามารถดาวน์โหลดได้ที่หน้าเวปเพจนี้ แต่สำหรับผมไม่ไหวครับหนักเกิน Charles F.F. Karney  เป็นผู้พัฒนา GeographicLib มีโมดูล PolygonArea ผมจะใช้ฟังก์ชันนี้ลองคำนวณหาพื้นที่เพื่อเปรียบเทียบกับวิธีที่ผมจะใช้
  • วิธีการที่ผมจะใช้คำนวณหาพื้นที่จะใช้เส้นโครงแผนที่ (Map Projection) มาช่วย แต่เป็นเส้นโครงแผนที่ที่รักษาพื้นที่ (ไม่รักษารูปร่าง) เลือกใช้ “Lambert Azimuthal Equal Area” ดูชื่อแล้วเหมือนจะเป็น 2 in 1 คือรักษาทิศทาง (Azimuthal) จากจุดศูนย์กลางที่สัมผัสออกไปยังจุดต่างและยังรักษาพื้นที่ (Equal Area) ด้วย คือได้พื้นที่จริงๆมาแน่นอนบนทรงรี แต่ความรู้สึกผมถ้าพื้นที่ประมาณไม่เกิน 100 ตร.กม. (ประมาณ 10 กม. x 10 กม.) น่าจะยังรักษารูปร่างได้ดี
image4
ภาพจากเวป http://ayresriverblog.com/2011/05/19/the-world-is-flat/
  • จากรูปด้านบนรูปซ้ายสุด จะเป็นการเอา plane ราบๆ ไปสัมผัสที่ขั้วโลกเหนือ การสัมผัสเลือกสัมผัสได้ตามที่ต้องการ ดูสามรูปด้านขวา แต่ที่ผมจะใช้งานจะเลือกเอา plane มาสัมผัสที่จุด centroid คือจุดศูนย์ถ่วงของพื้นที่ จากนั้นตั้ง latitude of origin, central of meridian ที่ค่าพิกัดภูมิศาสตร์ของจุดสัมผัสนี้ และตั้ง False Northing, False Easting เป็น 0.0
  • จากนั้น จะใช้ไลบรารี Proj4 แปลงพิกัดจากค่าพิกัดภูมิศาสตร์บนทรงรีเป็นค่าพิกัดบนระบบพิกัดฉากของ Lambert Azimuthal Equal Area (LAEA) เมื่อได้ค่าพิกัดฉากแล้วก็สามารถนำไปคำนวณด้วยสูตรเชือกผูกรองเท้าได้

ข้ามการคำนวณ Grid Scale Factor

  • ปกติถ้าเป็นระยะทางการจะทอนจากระบบพิกัดฉากไปยังระยะทางบนทรงรี จะต้องนำระยะราบมาหารด้วย GSF แต่ถ้าเป็นพื้นที่บนระบบพิกัดฉากต้องการทอนไปเป็นพืนที่บนทรงรีจะต้องหารด้วยค่า GSF ยกกำลังสอง
  • พท.บนทรงรี = พื้นที่บนระบบพิกัดฉาก UTM / GSF²
  • แต่เมื่อเลือกใช้เส้นโครงแผนที่ LAEA แล้ว ไม่ต้องใช้ GSF แต่เราจะคำนวณหา GSF  ในภายหลังเพื่อเปรียบเทียบว่าผลลัพธ์พื้นที่ที่คำนวณด้วยสองวิธีนี้แตกต่างกันอย่างไรบ้าง

เพิ่มเติม

  • เส้นโครงแผนที่ที่เราใช้กันอยู่บ่อยๆคือ UTM จะเป็นเส้นโครงแผนที่รักษารูปร่าง (Conformal) รูปร่างจะเหมือนเดิมไม่ว่าขยับไปอยู่ตรงไหน แต่ข้อเสียคือขนาดจะเป็นเปลี่ยนไปคืออาจจะใหญ่ขึ้นหรือเล็กลง เอาง่ายๆคือถ้ารูปร่างเป็นวงกลมไม่ว่าจะขยับไปบนลงล่าง รูปร่างจะยังเป็นวงกลม แต่อาจมีขนาดที่ใหญ่ขึ้น ด้วยเหตุนี้แผนที่บนเส้นโครงแผนที่นี้จึงดูเกาะ Greenland มีขนาดใหญ่โตมโหฬาร ทั้งๆที่ขนาดเล็กกว่าทวีปอาฟริกาหลายเท่า ดูรูปด้านล่างจะเข้าใจดี
ภาพจาก http://geokov.com/education/map-projection.aspx
ภาพจาก http://geokov.com/education/map-projection.aspx
  • ส่วนเส้นโครงแผนที่ที่รักษาพื้นที่ (Equal Area) ไม่ว่าจะขยับไปอยู่ตรงไหน ขนาดพื้นที่ของมันยังเท่าเดิม แต่รูปร่างจะเพี้ยนไป วงกลมจะกลายเป็นวงรี ดูรูปด้านล่างจะเห็นว่าเกาะ Greenland มีขนาดนิดเดียว
450px-tissot_indicatrix_world_map_lambert_cyl_equal-area_proj-svg
ภาพจาก https://en.wikipedia.org/wiki/Lambert_cylindrical_equal-area_projection

การส่งออกไฟล์ผลลัพธ์ (Export file)

  • เมื่อคำนวณแล้วต้องการผลลัพธ์ที่เป็นรูปธรรม นอกจากปักหมุดที่ google maps และ google earth แล้ว โปรแกรมเตรียมส่งออกไฟล์ผลลัพธ์ไปได้สามรูปแบบคือ CSV, Excel และ Shape file
  • มาดูการส่งออกไฟล์ Excel คลิกที่ไอคอน “Export”

compute_area_export

  • ไดอะล๊อกจะถามชื่อไฟล์ แต่ก่อนอื่นเลือกชนิดไฟล์ที่จะส่งออกก่อน ในที่นี้เลือก Excel

surveyor-pocket-tools_2016-12-25_15-21-16

  • เมื่อจัดเก็บไฟล์ excel แล้ว ก็ถึงเวลาเปิดมาดูไฟล์ผลลัพธ์ ผมใช้ Libreoffice Calc เปิดไฟล์ excel ตรงด้านล่างที่แสดง sheet จะมีอยู่สาม sheet คือ “area”, “projection” และ “ellipsoid” อันดับแรกดูที่ sheet “area” ก่อน

soffice-bin_2016-12-25_15-40-56

  • ลองเลื่อนลงมาที่ด้านล่าง

soffice-bin_2016-12-25_15-48-19

  • สองคอลัมน์ด้านขวา “Cross-Multiplying” จะเป็นคอลัมน์สำหรับคูนค่า X,Y ไขว์ คลองคลิกดูที่เซลล์จะเห็นสูตรที่โปรแกรมเขียนฝังไว้ในไฟล์ จากนั้นจะทำการบวกผลรวมแต่ละคอลัมน์ จับมาลบกันแล้วคูนด้วย 0.5 จะได้พื้นที่เป็นตร.ม. ออกมา
  • พื้นที่ค่าที่คำนวณได้ตัวนี้เป็นพื้นที่บนเส้นโครงแผนที่ Lambert Azimuthal Equal Area ซึ่งเป็นระบบพิกัดฉากแบบหนึ่ง จะสังเกตว่าค่าที่คำนวณในโปรแกรม excel หรือที่ผมใช้ Libreoffice Calc จะเป็นค่าที่คำนวณจากในโปรแกรมเสปรตชีตในนี้นี้เอง ไม่ได้เอาค่าที่คำนวณจากโปรแกรม “Area” มาใส่แต่อย่างใด
  • มีอีกสอง sheet คือ “projection” เป็นรายละเอียดของเส้นโครงแผนที่ที่เราใช้ และอีก sheet “ellipsoid” เป็นค่าพารามิเตอร์ทรงรี WGS84 ผมเขียนไว้เพื่อต้องการนำค่า flattening (f) ไปใช้ใน sheet “area” เพื่อคำนวณหารัศมีของทรงรี ณ ค่าแลตติจูดที่กำหนด มาดู sheet “ellipsoid” กัน

soffice-bin_2016-12-25_19-47-01

  • ก็เป็นค่าพารามิเตอร์มาตรฐานของ WGS84 ได้แก่ค่า a, b, f, e, e’ ดู  sheet ถัดไปคือ “projection”

soffice-bin_2016-12-25_19-49-47

  • สำหรับเส้นโครงแผนที่ Lambert Azimuthal Equal Area (LAEA) ผมใช้ Plane มาสัมผัสที่จุดศูนย์ถ่วงของพื้นที่ จากนั้นจะโปรเจคจุดต่างๆบนพื้นทรงรีมาที่ plane นี้
  • จุดศูนย์ถ่วงนี้คำนวนในโปรแกรม “Area” ดังนั้นจะเห็นค่า Lattitude of origin = 13.943866348 ค่า central meridian = 99.067227167 และจะเห็น ESRI WKT ซึ่งข้อความนี้จะถูกเขียนไปตอนส่งออกไฟล์ Shape file นามสกุล .prj ซึ่งไฟล์ .prj คน GIS คงทราบดีว่าเป็นไฟล์กำหนดระบบพิกัด สามารถอ่านได้โดยโปรแกรม GIS ทั่วๆไป และผมแถม Proj4 string ด้วยค่านี้ผมใช้งานในโปรแกรมตอนแปลงพิกัด สังเกตดูว่ากระชับกว่า ESRI WKT

คำนวณหาพื้นที่บนพื้นผิวภูมิประเทศ (Surface Area)

  • มาดูขั้นตอนการหาพื้นที่ Surface Area จากพื้นที่บนทรงรี (Ellipsoidal area) ขั้นตอนนี้คือการหาค่า Elevation Scale Factor(ESF)  นั่นเอง แต่ที่นี้เราย้ายการคำนวณมายัง Excel

compute_area_excel1

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

surveyor-pocket-tools_2016-12-25_20-09-37

  • นำค่า -34.7246 มาป้อนที่ช่องสีเหลือง และสูตรที่ฝังในสเปรตชึตจะคำนวณค่า Ellipsoid Height = 180 + (-32.7246) = 145.275 เมตร สุดท้ายสูตรจะคำนวณหาค่ารัศมีทรงรี ณ แลตติจูด = 13.943866348 ได้เท่าก้บ 6376911 เมตร
  • คำนวณหาค่า ESF = R/(R+h) = 6376911/(6376911+145.275) = 0.999977219
  • คำนวณหาพื้นทีจริง Ground-base area หรือ Surface area = Ellipsoidal Area  / ESF² (พืนที่บนทรงรีหารด้วย ESF ยกกำลังสอง)
  • พื้นที่จริง = 85129.846 / (0.999977219²) = 85133.725 ตร.ม.

ทบทวนสูตรการแปลงพื้นที่

  • แปลงจากพื้นที่บนระบบพิกัดฉาก (Grid-based Area) ไปยังพื้นที่บนทรงรี และจากพื้นที่ทรงรี (Ellipsoidal Area) ไปยังพื้นที่บนพื้นที่ผิวภูมิประเทศบนพื้นโลก (Surface Area)

soffice-bin_2016-12-25_20-30-14

  • หรือถ้าทราบ ESF แบะ GSF ก็รวบรัดดังนี้

soffice-bin_2016-12-25_20-35-31

  • ช่างรังวัดกรมที่ดินกับช่างรังวัดเอกชน เห็นสูตรนี้แล้ว คงคุ้นๆกัน ESF ก็คือ ค่าคูนสัมประสิทธ์ (C) นั่นเอง ส่วน GSF คือค่าคูนมาตราส่วน(K)

soffice-bin_2016-12-25_20-54-14

ตรวจสอบความถูกต้องของพื้นที่บนระบบพิกัดฉาก Lambert Azimuthal Equal Area

  • ตอนที่สั่งคำนวณจะเห็นผลลัพธ์บนหน้าต่างของโปรแกรม ขอทบทวนอีกครั้ง พื้นที่บนทรงรี = 85129.846 ตร.ม. และ พื้นที่บน UTM = 85061.867 ตร.ม. ต่างกัน 67.979 ตร.ม.
  • ค่าพิกัดจุดศูนย์ถ่วง แลตติจูด = 13.943866348 ค่าลองจิจูด = 99.067227167 ผมหา GSF ได้ 0.99960065 ลองสูตรแรก Ellipsoidal Area = Grid-based Area / GSF² = 85061.867/0.99960065² = 85129.847 ตร.ม. ต่างจากค่าที่คำนวณด้วยเส้นโครงแผนที่ LAEA 85129.846 ตร.ม. น้อยมากตำแหน่งทศนิยมที่ 3 สรุปว่าวิธีการใช้เส้นโครงแผนที่ Lambert Azimuthal Equal Area ใช้ได้ดี
  • ขอจบตอนนี้ พบกับตอนที่ 3 ตอนสุดท้าย จะมาเก็บตกกัน  ถ้าพื้นที่อยู่ในเขตแบ่งโซน UTM จะทำยังไง และลองค่าพิกัดยูทีเอ็มของรูปปิดในระบบของ Indian 1975 ดู