Month: June 2017

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

input_geo

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

output_utm1

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

output_utm2

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

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

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

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

วิธีใช้งาน

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

20170108_122613

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

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

20170108_123456

20170108_123609

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

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

20170108_130154 20170108_130205

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

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

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

20170108_132745
20170108_132903

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

20170108_132916
20170108_132923

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

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

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

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

โปรแกรม “UTM2Geo” สำหรับเครื่องคิดเลข Casio FX 5800P

  • สวัสดีครับผู้อ่านทุกท่าน พบกันตอนนี้เป็นตอนที่ 2 แล้วครับ ตอนแรกนำเสนอโปรแกรม “Geo2UTM” แปลงพิกัดจากคาพิกัดภูมิศาสตร์ (แลตติจูด/ลองจิจูด) ไปเป็นค่าพิกัดบนระบบพิกัดฉาก UTM มาตอนนี้กลับกันครับ เราจะมาเขียนโปรแกรมที่แปลงพิกัดจากระบบพิกัดฉากยูทีเอ็มไปเป็นค่าพิกัดภูมิศาสตร์
  • มาเขียนบทความที่นี่ให้กับ kns-engineering เป็นการเฉพาะกิจ สำหรับเพื่อนพี่น้องชาวสำรวจแวะไปเยี่ยมเยียนผมได้ที่บล็อกประจำ priabroy.name

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

  • ก่อนจะเข้าไปว่าเรื่องโปรแกรมมิ่งบนเครื่องคิดเลข ขอซักซ้อมความรู้เซอร์เวย์สักเล็กน้อย มีสองอย่างคือมุม อะซิมัท (Azimuth) และฟังก์ชัน Atan2 สองอย่างนี้เกี่ยวพันกับเรื่องโปรแกรมในด้านการสำรวจเสียส่วนใหญ่ (แต่งานคำนวณแปลงพิกัดนี้ไม่ได้ใช้)
  • มุมอะซิมัทเป็นมุมที่แสดงทิศทางในด้านงานสำรวจของเรา เป็นมุมที่กวาดจากทิศเหนือตามเข็มนาฬิกา สมมติว่ามีจุด A มีค่าพิกัด (x,y,) = (500,500) และจุด B มีค่าพิกัด (x,y) = (586.603,550) คำถามพื้นฐานก็คือ
    • อะซิมัทจากจุด A ไปจุด B เท่าไหร่
    • อะซิมัทจากจุด B ไปจุด A เท่าไหร
    • ระยะทางหรือระยะราบเท่าไหร่ระหว่างจุดทั้งสอง

  • ระยะราบหาได้จากสูตรตรีโกณมิติสามัญพื้นฐาน ระยะราบ = √((500-586.603)² + (500-550)²) = 100 เมตร
  • แล้วอะซิมัทละคำนวณอย่างไร การคำนวณจะมาเกี่ยวพันกับเครื่องคิดเลขของเราอย่างแนบแน่น ฟังก์ชัน Atan2 เรียกกันบนเครื่องคอมพิวเตอร์ (ใครเขียนโปรแกรมบนเครื่องคอมพิวเตอร์จะรู้จักฟังก์ชั่นนี้ดี มีทุกภาษา) เที่ยบเท่าบนเครื่องคิดเลขก็คือ Pol() คือฟังก์ชั่นการที่จะมาช่วยย่นการคำนวณนี้
  • Atan2 ดั้งเดิมจะคำนวณหามุมที่กวาดจากแกน X ทวนเข็มนาฬิกา ดังนั้นในคู่มือคาสิโอ จะเขียนฟังก์ชั่น Pol() แบบนี้ครับ ในวงเล็บ x มาก่อน  y สังเกตว่ามุม θ กวาดจากแกน X

  • แต่สำหรับมุมที่ต้องการสำหรับงานสำรวจคือมุมอะซิมัท(Azimuth) คือมุมคือกวาดจากแกน Y ลงมาตามเข็มนาฬิกา จะทำอย่างไร
  • เทคนิคเวลาใช้งานสลับเอาไว้ค่า Y มาก่อนและ X ตามหลังครับ >> Pol(y,x) จะได้มุมอะซิมัท ผมเขียนรูปใหม่ดังนี้

  • ถ้ามีเครื่องคิดเลขก็ลองกดดูเลย Pol((550-500),(586.603-500))  ผลการคำนวณเครื่องคิดเลขเอาค่าระยะทางไปเก็บไว้ในตัว “I” และมุมอะซิมัทไว้ในตัว “J” ลอง RCL (recall) มาดูจะได้ I = 100.000 และ J = 60.000 มุม 60 ก็คืออะซิมัทจาก A ไป B นั่นเอง
  • จากโจทย์ข้างบนก็ตอบได้นะครับ อะซิมัทย้อน (Backward) ก็ให้เอาอะซิมัทไป (Forward) ± 180 ถ้ามากกว่า 180 ให้เอา 180 ไปลบ ถ้าน้อยกว่า 180 ให้เอา 180 ไปบวก ดังนั้นอะซิมัทจาก B มา A จะได้ = 60 + 180 = 240 
  • มุมอะซิมัทเป็นมุมมหัศจรรย์สำหรับช่างสำรวจ มหัศจรรย์ยังไงตอนหน้ามาว่ากันต่อ ตอนนี้ไปต่อเรื่องโปรแกรมกัน

โค๊ดโปรแกรม UTM2Geo

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

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

  • สำหรับท่านที่ต้องการป้อนโปรแกรมลงในเครื่องคิดเลข วิธีป้อนโปรแกรมเลงเครื่องคิดเลขคงไม่ต้องสาธยายนะครับเพราะคงคุ้นเคยกันอยู่ มาดูการใช้งาน สมมติว่ามีหมุดที่มีค่าพิกัดฉาก UTM ดังนี้
    • Northing = 1,615,517.540 Easting = 395,698.272 Zone 47N อยู่บนพื้นหลักฐาน WGS84
  • เรียกโปรแกรม ด้วยการกด “Prog” แล้วเลือกโปรแกรม “UTM2Geo

  • ป้อนค่าพิกัด Norhting, Easting

  • ต่อไปโปรแกรมจะถาม Zone No ลำดับโซนหมายเลขที่เท่าไหร่ ถ้าโซนอยู่ด้านเหนือเส้นศูนย์สูตรให้ป้อนค่าบวกเช่น 47N ก็ป้อนตัวเลขธรรมดาไปครับ แต่ถ้าอยู่ใต้เส้นศูนย์สูตรป้อนเป็นตัวเลขลบ ในที่นี้ป้อนตัวเลข 47 เข้าไปดังรูป

ผลลัพธ์ของโปรแกรม

  • มาดูผลลัพธ์กันครับ

  • ผมเอาค่าพิกัดฉากนี้ไปป้อนในโปรแกรมแปลงพิกัด UTM-Geo Converter ที่อยู่ใน Surveyor Pocket Tools ก็ได้ตรงกันครับ แต่ทศนิยมในเครื่องคิดเลขที่ฟิลิปดาได้เต็มที่สองตำแหน่ง (น่าเสียดาย ทศนิยมของฟิลิปดาตำแหน่งที่สอง เทียบเป็นหน่วยเมตริกแล้วได้แค่ระดับหลักสิบเซนติเมตร) ถ้าต้องการหลักมิลลิเมตรก็ต้องบนคอมพิวเตอร์แล้วครับ แต่สำหรับเครื่องคิดเลขคิดมาได้ขนาดนี้ผมก็โอเคแล้วครับ

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

  • สมมติว่าผู้อ่านมีโอกาสไปทำงานต่างประเทศไกลๆ มาลองค่าพิกัดที่อยู่โซนตะวันตกและอยู่ใต้เส้นศุนย์สูตรกันดูครับ สมมติว่าค่าพิกัดนี้อยู่ในบราซิลครับ ชีวิตจริงไม่เคยไปถึงทวีปอเมริกาครับ ไกลสุดแค่ยุโรปกับทวีปอาฟริกา
    •  Northing = 7,721,526.876 Easting = 505,464.207 Zone 24S บนพื้นหลักฐาน WGS84
  • พร้อมแล้วเรียกโปรแกรมป้อนตัวเลขกันเลย

 

  •  ต่อไปหมายเลขโซนให้ป้อนตัวเลขเป็นลบ -24 เพราะอยู่ใต้เส้นศูนย์สูตร

  • มาดูผลลัพธ์กัน จะได้ค่า Latitude = -20°36’19.28″ ค่าเป็นลบแสดงว่าอยู่ใต้เส้นศูนย์สูตร ได้ค่า Longitude = -38°56’51.220″ ได้ค่าเป็นลบแสดงว่าอยู่ทางด้านตะวันตกของตำบลกรีนนิช ของอังกฤษ (ตำบลกรีนนิชค่าลองจิจูด = 0)

  • เปรียบเทียบกับ Surveyor Pocket Tools เท่ากัน

  • ทรรศนะส่วนตัวผมมีโปรแกรมแปลงพิกัดติดเครื่องคิดเลขรุ่นนี้ FX – 5800P ทำให้เครื่องคิดเลขดูเทพขึ้นมาทันตาเห็น 🙂 สองโปรแกรมนี้กินเม็มไปจิ๊บๆครับ
  • ตอนหน้ามาว่าเรื่องยากขึ้นไปอีกนิด การคำนวณระยะทางที่สั้นที่สุดบนทรงรี (Geodesic distance) สูตรลากกันยาวเฟื้อย ตัวแปรบนเครื่องคิดเลขใช้หมดเกลี้ยงต้องไปดึงตัวอนุกรมมาช่วยด้วย ถ้าพิมพ์โปรแกรมตามผมต้องร้องว่า เจ็บกว่านี้มีอีกไหม
  • ตอนหน้ามาว่ากัน แต่ผมบอกก่อนว่าในฐานะช่างสำรวจ เรื่อง  geodesic distance บางครั้งเราใช้มันอย่างไม่รู้ตัว และไม่ใช่เรื่องไกลตัว ขอฝากน้องๆไว้ครับ มีความรู้ก็ใส่ตัวก็ใช่ว่าจะต้องไปเหนื่อยแบกหามตามโบราณที่ว่าไว้

ติดต่อขอลิ๊งค์โปรแกรม

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

สนุกกับโปรแกรมเครื่องคิดเลขสำหรับงานสำรวจ ตอนที่ 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 ขอบคุณครับ

การออกแบบเส้นโครงแผนที่ความเพี้ยนต่ำ (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 ข้อดังกล่าวข้างต้น