พอร์ท:โปรแกรมคำนวณวงรอบ Traverse Pro สำหรับแมคโอเอส

แมคโอเอส macOS Catalina

ผมไม่ได้ใช้แมคมาเนิ่นนานมากนับเป็นเวลา 6 ปีกว่า มาในปีนี้ได้จับแมค Catalina หรือว่า 10.15 รุ่นหลักคือโอเอสเท็น (OSX) รุ่นแรกออกมาในปี 2001 ส่วนรุ่นย่อยคือ 15 ที่มีระยะเวลาการพัฒนามายาวนานมากกว่า 18 ปีแล้ว จากความที่ห่างหายไปนานเมื่อมาลองใช้ระยะแรกๆจะขัดๆ แต่ไม่นานนักก็ชินไปเอง ส่ิงที่ผมยอมรับคือแมคนั้นมีสาวกที่เหนียวแน่น จากความดีที่เนียน สวยงาม เสถียร ลื่นไหล นั่นเอง ผมยังนั่งคิดว่าในอดีตยี่สิบปีที่แล้ว ถ้าราคาไม่แพงกว่า PC มากนัก อาจจะมีกลุ่มผู้ใช้งานมากกว่านี้ ช่วงระยะเวลา 20 ปีกว่า ทำให้โปรแกรมด้านวิศวกรรมเชิงพานิชย์ทั้งหลายพาเหรดไปลงที่วินโดส์เกือบทั้งหมด จะหาในแมคหรือลีนุกซ์ยากเต็มทน หมายเหตุอีกนิดนะครับว่าแมคโอเอสนั้นฟรีมาหลายปีแล้วไม่ได้คิดเงินแบบไมโครซอฟท์วินโดส์

สำหรับผมเองสิ่งที่ขาดไปคือเมื่อจะคำนวณงานด้านสำรวจทั้งหลายต้องไปเปิดวินโดส์ จะติดตั้งพวก VirtualBox หรือ VM ก็ไม่ค่อยสะดวกรุ่มร่าม เลยลองคิดจะเอาโปรแกรมที่พัฒนาบนวินโดส์ขึ้นมาใช้งานบนแมค ตัวแรกเลยที่คิดถึงคือโปรแกรมคำนวณวงรอบ Traverse Pro ที่ผมพัฒนาและใช้งานมาบนวินโดส์ 20 กว่าปีเหมือนกันและก็แจกจ่ายให้ใช้กันฟรี

พอร์ทโปรแกรม Traverse Pro

บนแมคโอเอส ผมใช้ Lazarus เป็นสภาวะแวดล้อมในการพัฒนาโปรแกรมเช่นเดียวกับบนวินโดส์ Lazarus ใช้ภาษาปาสคาลคือ free compiler pascal (fpc) เป็นหลักอยู่ ทั้งหมดเป็น open-source ที่มีระยะเวลาพัฒนามายาวนานเช่นกัน ทำให้มั่นใจได้ว่าในอนาคตไม่มีล้มหายตายจากกันง่ายๆแน่นอน

Lazarus IDE

การพอร์ตโค้ดจากวินโดส์มาบนแมคโอเอส ใช่ว่าจะราบรื่นนัก ใช้เวลาอยู่หลายวันทีเดียว โดยเฉพาะเรื่องโฟลเดอร์ที่จัดเก็บไฟล์ที่สองโอเอสนี้มีความต่างกันอยู่มากพอสมควร ปัญหาอีกอย่างคือเรื่องดีบักเกอร์ของ Lazarus ที่ผมยังไม่สามารถทำให้ใช้งานได้ เวลาดีบักโปรแกรมอาศัยการเดาเอาล้วนๆ โชคดีที่ผ่านมาได้ ความต่างเล็กๆน้อยๆที่ทำให้เสียเวลาได้แก่ อักขระขึ้นบรรทัดใหม่ในวินโดส์และแมคจะใช้ต่างกัน วินโดส์ใชัอักขระแอสกี้ 13 <CR> ส่วนแมคหรือลีนุกซ์ใช้ อักขระ 9 <LF> ทำให้เวลาดักจับข้อมูลจากที่ผู้ใช้ copy ผ่านคลิปบอร์ดจาก Excel หรือ LibreOffice Calc ในกรณีที่มีหลายบรรทัด ต้องใช้อักขระสิ้นสุดบรรทัดให้ตรง

การทำไฟล์ติดตั้ง (Installer)

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

ดาวน์โหลดและติดตั้งโปรแกรม (Installation)

ไปที่หน้าดาวน์โหลดตามลิ๊งค์ได้เลย ดาวน์โหลด​ (Download) เมื่อดาวน์โหลดไฟล์โปรแกรม Traverse Pro สำหรับแมคโอเอสจะเป็นไฟล์อิมเมจ dmg ถ้าเราดับเบิ้ลคลิกที่ไฟล์นี้แมคโอเอสจะทำการเมาท์ให้ทันทีด้วย Finder เมื่อคลิกเข้าไปดูจะเห็นโปรแกรมเป็นไอคอนอยู่เดี่ยวๆ มันคือแพคเกจที่ผมพูดไปแล้วเป็นโฟลเดอร์สามารถเข้าไปดูข้างในได้

ไฟล์อิมเมจ dmg
แพ็คเกจหรือแอปของโปรแกรม Traverse Pro

ในที่นี้การติดตั้งไม่ต้องทำอะไรมากมาย สามารถก๊อปปี้ไปวางไว้ที่ไหนก็ได้เพื่อรัน สะดวกวางไว้บน desktop ให้มองเห็นง่ายก็ลากลงไปเลย หรือถ้าเป็นธรรมเนียมนิยมก็ลากลงไปที่โฟลเดอร์ Applications (/Volume/Applications) ก็ได้เหมือนกัน

ลากโปรแกรมมาไว้ที่ Applications

ขนาดของ Traverse Pro ก็เล็กมากๆครับไม่ถึง 15 MB เพราะข้อดีการใช้ Lazarus + fpc คือไลบรารีที่โปรแกรมใช้จะละลายมาอยู่ในไฟล์ execute ทำให้การทำไฟล์ติดตั้งในวินโดส์หรือ app ในแมคโอเอส ไม่รุงรังมาก

ข้อมูลโปรแกรม

คลิปพาทัวร์การใช้งาน (Quick Guide)

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

พาทัวร์โปรแกรมโดยสังเขป

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


โครงการพอร์ทโปรแกรมตัวต่อไป

โปรแกรมต่อไปที่เริ่มทำมาบ้างแล้วคือ Surveyor Pocket Tools ที่พัฒนาด้วยไพทอน Python โดยใช้ PyCharm เป็นเครื่องมือพัฒนา ระบบติดต่อผู้ใช้แบบกราฟฟิค (GUI) เลือก PySide2 เกือบสำเร็จมาติดตรง app ไม่สามารถแสดงผลการปักหมุดบน Google Maps ได้ ก็คงต้องใช้ระยะเวลาสักพักใหญ่ๆเหมือนกัน

9 thoughts on “พอร์ท:โปรแกรมคำนวณวงรอบ Traverse Pro สำหรับแมคโอเอส”

  1. สวัสดีครับ สบายดีนะครับ?

      1. ผมสบายดีครับ
        ผมมี 1 เรื่องอยากให้ช่วยครับ
        ผมอยากได้สมการที่ให้คำตอบออกมาเป็นระยะห่างเป็นเมตรบนผิวโลก จากพิกัด 2 จุด (ไม่รวมความสูง) ที่ผมสามารถ Store ใส่เป็น SQL Query ได้ด้วย
        พอจะมีสมการแนะนำผมไหมครับ?

        1. มีครับใช้สูตรของ Vincenty ติดตามได้จากลิ๊งค์นี้ ดูโค้ดจากหัวข้อแรก “Distance/bearing between two points (inverse solution)” ด้านล่างติดกันมีโค้ดจาวาสคริปต์

        2. Input คงที่ a=6378137.0 b=6356752.314245 f=298.257223563 เป็นทรงรี WGS84 สากลที่เราใช้กันทั่วโลก รายละเอียดตามลิ๊งค์นี้
        3. Input ค่าพิกัดจุดที่ 1 (φ1,λ1 = latitude,longitude) ค่าพิกัดจุดที่ 2 (φ2,λ2)
        4. ผลลัพธ์ได้ ระยะทาง (s) และทิศทางไปและกลับ (ซึ่งทางพี่ไม่น่าจะได้ใช้) fwdAz และ revAz
          สูตรนี้มีข้อแม้ว่า latitude ทั้งสองจุดต้องไม่เท่ากัน (φ1 <> φ2) ถ้าเท่ากันให้ใช้ cos2σM = 0 ลงไปในสมการบรรทัด ==> const cos2σM = cosσ – 2*sinU1*sinU2/cosSqα
          ติดขัดอะไร ถามมาได้ครับ

          1. ขอบคุณมากครับ เดี๋ยวผมจะทำความเข้าใจตามที่แนะนำมา แล้วเขียนเป็น SQL Procedure ดู ถ้าติดขัดอะไรจะปรึกษาอีกครับ

          2. ผมลืมบอกไปนิด มุม latitude, longitude ต้อง input เป็นเรเดียน = มุมเป็นองศา * π / 180.0 ซึ่ง π คือ PI สามารถดึงได้จากไลบรารี math ตามแต่ภาษาที่ใช้ครับ

          3. ผมบอกค่าคงที่ f ไปผิดครับ ที่ถูกคือ f=1/298.257223563

          4. ต้องฝากที่คุณล่ะครับ ผมจะไม่รู้ถูกรู้ผิดใน constant ต่างๆ รวมทั้งตัวสมการเลย
            ตอนนี้ที่ผมทดลองแล้ว ยังได้ผลไม่เป็นที่น่าพอใจเลยครับ จับการคำนวน Floating point ไปใส่ SQL แล้ว ออกมาแย่กว่าที่คาดหวัง ไม่ว่าจะเป็น SQL จ้าวไหนก็ตาม ผมก็ลืมไปว่าทั้งหมดเป็น Interpreter กันทั้งสิ้น
            ตอนนี้เลยคิดว่าจะออกแบบ SQL Query เพื่อ filter หยาบๆ จากเส้นรุ้งเส้นแวงก่อน เพื่อให้ result เหลือน้อยลง แทนที่จะออกมาเป็น result ทั้งฐานข้อมูล ส่วนสมการคำนวนระยะห่างก็เขียนด้วย C เป็น Native ไป wrap result อีกที แบบนี้น่าจะได้ความเร็วดีที่สุดครับ

            ต้องทดสอบก่อน อาจจะมีวีธีที่ดีกว่านี้อีก แต่ผมยังไม่เกิดไอเดียครับ

            ผมขอถามอีกคำถามแล้วกันครับ ถ้าผมจะ filter หยาบๆ เนี่ย จากพิกัด φ,λ เนี่ย ให้ออกมาคร่าวๆ ±5km เนี่ย แนะนำผมหน่อยครับว่า φ และ λ ควรจะ + และ – เท่าไหร่? ผมจะเอาตัวเลขนี้ไป filter หยาบใน SQL ก่อนครับ เพื่อให้ SQL มีการคำนวนแค่การบวกและลบเท่านั้น

          5. พี่จักรนันท์ลองดูโค้ดภาษาซีที่มีคนไปลงไว้ที่ github ตาม ลิ๊งค์นี้ เลือกเอาสองไฟล์แค่นั้นครับ vincenty.c และ tool.h ก็สามารถใช้งานได้ ถ้าผมมีเวลาว่างผมจะช่วยทดสอบให้อีกทีครับ ใช้ฟังก์ชั่น double llh_deg_to_metres(const struct llh *p1, const struct llh *p2) ป้อนค่า lat,lon, h สองจุด โดยที่ h ใส่เป็นศูนย์มุมเป็นดีกรีครับ

Leave a Reply

Your email address will not be published. Required fields are marked *