วันนี้มาพูดถึงไลบรารี Proj.4 แบบลึกๆกันหน่อย บทความตอนนี้จะเป็นเรื่องโปรแกรมมิ่งนะครับ ไลบรารีตัวนี้ผมใช้เป็นแกนหลักในโปรแกรมรวมเครื่องมือฉบับกระเป๋าสำหรับช่างสำรวจ (Surveyor Pocket Tools) เอามาแปลงพิกัดกับระบบพิกัดที่ใช้กันในโลกนี้ (อาจจะได้ไม่ทั้งหมด) และไม่นานนี้ผมได้นำมาคำนวณ Vertical Datum คือสามารถหาความสูงจีออยด์ได้ ในความเป็นจริงถ้ามี Vertical Grid Shift หลายๆอันสามารถแปลงค่าระดับข้ามไปมาได้แบบที่ใช้ในอเมริกา ก็ใช้มาหลายปีแล้ว ในตอนนี้ไลบรารีนี้ ตั้งแต่รุ่น 5.0.0 มาถึงรุ่นปัจจุบันรุ่น 6.0.0 ทางผู้พัฒนา Proj.4 ได้เริ่มวางรากฐานใหม่ ผมในฐานะคนนำมาใช้งานก็ติดตามลุ้นด้วยความระทึกละครับ เพราะถ้าแก้ใหม่แบบถอนรากถอนโคน ผมก็ต้องออกแรงมากหน่อยเพื่อมาปรับให้โปรแกรมสามารถใช้ไลบรารีรุ่นใหม่ได้เต็มประสิทธิภาพ กว่าสองทศวรรษของการพัฒนา…
Category: python
Update : โปรแกรม Surveyor Pocket Tools คำนวณความสูงจีออยด์ จากไฟล์ค่าพิกัดภูมิศาสตร์
ในกรณีที่ต้องการค่าความสูงจีออยด์จากจุดที่มีจำนวนมากตัวอย่างเช่นเป็นสิบจุดขึ้นไป การมานั่งคำนวณทีละจุดคงไม่ใช่เรื่องที่สะดวกนัก ผมปรับปรุงโปรแกรมให้สามารถอ่านไฟล์ค่าพิกัดภูมิศาสตร์ (ละติจูดและลองจิจูด) ในรูปแบบ CSV ที่ใช้ตัวแบ่งด้วยเครื่องหมายคอมมา “,” ค่าพิกัดละติจูดและลองจิจูด ต้องเป็นรูปแบบทศนิยม (degree) เท่านั้น การจัดเรียงค่าพิกัดของให้ขึ้นต้นด้วยค่าลองจิจูดตามด้วยเครื่องหมายคอมม่าและค่าละติจูด ไฟล์ทดสอบ ไฟล์ที่จะมาทดสอบโปรแกรม ผมสร้างจากโค้ดภาษาไพทอน ให้สุ่มจำนวนจุดค่าพิกัดขึ้นมา 10000 จุด โดยให้ค่าพิกัดที่สุ่มอยู่ในกรอบสี่เหลี่ยมนี้คือ ละติจูด เริ่มที่ 3 องศา ไปสุดที่ 22.9833333333333 องศา ค่าลองจิจูดเริ่มที่ 95 องศา ไปสิ้นสุดที่ 107.9833333333…
โปรแกรมรวมเครื่องมือฉบับกระเป๋าสำหรับช่างสำรวจ Surveyor Pocket Tools : Update คำนวณพื้นที่และ Scale Factor ด้วย TGM2017
สำหรับการคำนวณ Scale Factor ไม่ว่าจะเป็นจุดเดี่ยว (Point scale factor) หรือแบบเส้นตรงเฉลี่ย (Line scale factor) หรือไม่ว่าจะคำนวณพื้นที่จริงที่ทอนจากพื้นที่ตามระบบพิกัดฉากกริด ก็ตามผมเปิดโอกาสให้ผู้ใช้สามารถเลือกใช้ TGM2017 (Precise Geoid Model of Thailand 2017) เพื่อให้ค่าออกมาเนียนๆมากกว่าเดิม ที่เดิมทีใช้เฉพาะ EGM2008 เท่านั้น การประยุกต์ใช้แบบจำลองความสูงจีออยด์ต่างๆ นอกจากใช้ในงานรังวัด GNSS ยังนำมาประยุกต์ใช้สำหรับคำนวณหาสเกลแฟคเตอร์ แบบ Elevation Scale Factor…
Update : โปรแกรม Surveyor Pocket Tools คำนวณความสูงจีออยด์ TGM2017
มาตามสัญญาที่ผมบอกว่าจะอัพเดท Surveyor Pocket Tools โปรแกรมช่างสำรวจฉบับกระเป๋า ให้สามารถใช้งานคำนวณความสูงจีออยด์ TGM2017 (Thailand Precise Geoid Model 2017) ดั้งเดิมสามารถคำนวณบนโมเดล EGM96 และ EGM2008 เพียงเท่านั้น เปลี่ยนวีธีการคำนวณโดยใช้ไลบรารี Proj4 ดั้งเดิมตอนคำนวณหาความสูงจีออยด์บน EGM96 และ EGM2008 ผมพัฒนาโค้ดโปรแกรมมาจากการดัดแปลงของโค้ดดั้งเดิมภาษาซีของผู้พัฒนาท่านอื่นมาเป็นภาษาไพทอน ขณะนี้ได้ยกเลิกโค้ดชุดนี้หันมาใช้ไลบรารี Proj4 คำนวณให้ทั้งหมดเพราะสะดวกมาก และไลบรารี Proj4 สามารถจัดการเมมโมรีได้ดีกว่าของผมมาก สังเกตก่อนหน้านี้ถ้าใครเข้าไปดูใน Task…
ทดสอบคำนวณหาความสูงจีออยด์ TGM2017 ด้วยไลบรารี Proj.4
ไม่นานมานี้มีผมดาวน์โหลดไฟล์โปรแกรมและข้อมูลของ TGM2017 เรียกเต็มๆคือ Thailand Geoid Model 2017 ที่เป็นโครงการร่วมมือจากหลายๆฝ่ายของทางราชการ ผมยังไม่มีโอกาสได้นำไปใช้งาน โดยเฉพาะจะนำมาประยุกต์ใช้ในงานรังวัด GNSS ถือว่าเป็นสิ่งที่พวกเรารอคอยมานานที่จะได้มี local geoid model มาใช้งานกัน โดยเฉพาะงานรังวัด GNSS เมื่อคำนวณแล้วจะได้ค่าพิกัดทางราบ และทางดิ่งจะได้ความสูง (h – Ellipsoid height) ที่เทียบกับทรงรี WGS84 ถ้าเรามีแบบจำลองความสูงจีออยด์สามารถคำนวณหาความสูง (H – Orthometric height) หรือระดับน้ำทะเลปานกลางได้…
แก้ไขจอดับ: Surveyor Pocket Tools แสดงแผนที่บน Google Maps (สัจธรรมโลกนี้ไม่มีอะไรฟรี)
ตั้งแต่วันที่ 16 มิถุนายน 2018 ที่ผ่านมา ถ้าผู้ใช้ใช้งาน Surveyor Pocket Tools ลองปักหมุดผ่านโปรแกรมนี้ จะเห็นว่าจอดับแสดงข้อความว่า “For development purpose only” เพราะว่ากูเกิ้ลเปลี่ยนมาเก็บเงินผู้ใช้โดยเฉพาะผู้พัฒนาโปรแกรม โดยที่ผู้พัฒนาจะต้องขอ API Key จากทางกูเกิ้ลก่อน แล้วมาลงนามในบัญชีพร้อมจะเป็นหนี้กูเกิ้ล ถ้าใช้เกินกำหนด ผมมานั่งพิจารณาหลายเดือนว่าจะเอาไงดี โปรแกรมแจกให้ใช้ฟรีไม่มีเงื่อนไข แต่การที่ต้องไปจ่ายเงินให้กูเกิ้ลเพื่อการนี้ก็ดูกระไรๆ (ถึงแม้จะมีแบบ premium ให้องค์กรไม่หวังกำไรใช้ฟรี แต่ก็ยุ่งยากเกินไปสำหรับผม) เอาละครับเมื่อคิดได้ปลงตก ก็มาดูว่ากูเกิ้ลเขาให้ใช้ฟรีได้เท่าไหร่เมื่อใช้แผนที่แบบ static…
ทดสอบเขียนโปรแกรมไพทอน (Python) บนเครื่องคิดเลข Casio fx-cg50 Prizm
ไพทอนบนเครื่องคิดเลข ช่วงนี้ผมมีโอกาสทำงานใกล้ชิดกับภาคสนาม ทำให้มีโอกาสได้จับและใช้เครื่องคิดเลขมากกว่าปกติ ในเวลาที่ผ่านมาไม่ถึงเดือนผมได้ซื้อเครื่องคิดเลข Casio fx-CG50 Prizm เคสสีขาว ที่ซื้อมาเพราะทราบว่าถ้า update OS เป็นรุ่น 3.20 จะสามารถใช้ ไพทอน (Python) ได้ ก็ขอหมายเหตุสักนิดว่าเป็นไมโครไพทอน (Micropython) ที่ทางทีมงาน Micropython ได้พอร์ตออกมาให้มีขนาดเล็กเพื่อเอาไปรันในบอร์ด iOT ได้ หรือบอร์ดที่เป็นไมโครคอนโทรลเลอร์ทั้งหลาย เน้นขนาดเล็ก หน่วยความจำต่ำ กินไฟน้อย ต่ออินเทอร์เน็ตได้ในตัว ผมจะไม่มุ่งไปทางนี้หรอกครับ ในบทความนี้ แต่จะพูดถึงเครื่องคิดเลขคาสิโอ…
คอมไพล์ Python Script เป็นไฟล์ Executable ด้วย PyInstaller
PyInstaller คือเครื่องมือที่ช่วยการแปลงโปรแกรมที่เขียนด้วยไพทอนเป็น execute binary file ที่สามารถนำไปรันได้โดยที่เครื่องคอมพิวเตอร์ปลายทางไม่ต้องติดตั้งไพทอน สำหรับ PyInstaller เป็น cross-platform สามารถใช้งานได้บนวินโดส์ แมค และลีนุกซ์ สนับสนุนไพทอนรุ่น 2.7 และ ไพทอน รุ่น 3.3 ถึง 3.6 จุดมุ่งหมายของ PyInstaller คือต้องการช่วยผู้ใช้ในการแปลงโปรแกรมไพทอน ที่ใช้โมดูลไลบรารีภายนอกเช่น Matplotlib, DJango, wxPython, PyQt เป็นต้น ให้สามารถทำได้ง่ายสะดวก ติดตั้ง…
ก้าวไปอีกหนึ่งก้าวกับ XSection Plot
สวมวิญญานใหม่ด้วย PySide2 หลังจากผมคอมไพล์ XSection Plot ใหม่ด้วยสภาวะแวดล้อมพัฒนาของ Qt5 platform ด้วย PySide2 ผมเปลี่ยนลิขสิทธิ์ของโปรแกรมเดิมที่กำกวมออกมาฟรีสมบูรณ์แบบเหมือนกันกับ Surveyor Pocket Tools สามารถนำไปทำซ้ำแจกจ่ายได้ตามอัธยาศัย แต่ห้ามดัดแปลง ห้ามนำไปจำหน่ายหรือให้เช่า แก้ไข bugs นอกจากย้ายโค้ดมาใช้ PySide2 แล้ว ผมเลยถือโอกาสแก้บั๊กเล็กน้อยไปหลายอย่าง เช่น เวลาคลิกขวาเพื่อเรียกเมนูในช่องป้อนข้อมูล โปรแกรมจะ terminate ทันที ใน Section Layout ตรง Horizontal…
แนะนำการย้ายโค้ดจาก PyQt5 เป็น PySide2
ย้ายโค้ด XSection Plot ในขณะนี้ทำงานอยู่ที่บังคลาเทศ โครงการก่อสร้างรถไฟฟ้าที่กรุงธากา มีโอกาสกลับมาพัก ก็พอมีเวลาว่างพยายามย้ายโค้ดของโปรแกรม XSection Plot จากของเดิมที่พัฒนาด้วย PyQt5 ที่ยังติดเรื่องลิขสิทธิ์บางส่วน โดยย้ายมาใช้ PySide2 ที่เปิดกว้างกว่า ความจริงทั้งคู่ใช้เครื่องยนต์ (Engine) เดียวกันคือ Qt5 platform ดังนั้นเมื่อย้ายโค้ดสำเร็จแล้วเวลารันก็หน้าตาเหมือนกันเป๊ะดังรูปด้านล่างที่คอมไพล์ด้วย PySide2 จัดการปลั๊กอิน PySide2 การย้ายโค๊ดใช้เวลาไม่นานนัก ใช้เวลาประมาณ 2 ชั่วโมง เนื่องจากผมเคยย้ายโค้ด Surveyor Pocket Tools…