Skip to content

Prajuab Riabroy's Blog

Survey Application – GNSS – UAV – Programing – Python – Dart&Flutter – Rust

Menu
  • Home
  • About Us
  • Survey Application
    • Surveyor Pocket Tools
    • Traverse Pro
    • XSection Plot
    • Geoid Height Pro
    • Spot Fire
    • โปรแกรมงานสำรวจสำหรับเครื่องคิดเลข Casio fx-5800P
    • โปรแกรมงานสำรวจสำหรับเครื่องคิดเลข Casio fx-9860G II SD
  • Download
  • Privacy Policy
Menu

การเขียนโปรแกรมต่อ GPS ด้วยคอมโพเน็นต์ OpenGPSX (ภาค 5)

Posted on 29/09/2010

ทดสอบ OpenGPSX บน Ubuntu

  • มาลองทดสอบกันบน Ubuntu Lucid ก็เริ่มจากดาวน์โหลดคอมโพเน็นต์ มาก่อน ทำการติดตั้งเหมือนในวินโดส์ ที่ผมกล่าวไปแล้ว เนื่องจากโค้ดของ Lazarus เป็น cross-platform โค้ดที่ใช้ใน Windows ก็สามารถนำมาใช้ได้เลยใน Linux แต่ติดขัดตรงโปรแกรมที่จะใช้ทดสอบ ผมจะแยกเวอร์ชั่นวินโดส์และเวอร์ชั่น Linux เพราะฟอร์มที่สร้างในวินโดส์ ถ้านำมาใช้ใน Linux ตัวหนังสือ object ที่เราแปะลงฟอร์มเช่น Label, Edit จะใหญ่มากเพราะปัญหาเรื่อง Font ที่ไม่ตรงกันของสอง OS

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

  • สนใจโปรแกรมทดสอบดาวน์โหลดได้ตามลิงค์นี้ OpenGPSProject.zip
  • เปิด Lazarus ติดตั้งคอมโพเน็นต์ OpenGPSX ก่อน แล้วค่อย unzip ไฟล์ทดสอบ OpenGPSProject.zip ของผมเองเก็บไว้ที่ /home/priabroy/Lazarus/OpenGPSProject
หน้าตาของ Lazarus ที่ติดตั้ง component OpenGPSX แล้ว
  • เปิดโปรแกรมทดสอบ OpenGPSProject เปิด project ไฟล์ opengpstest.lpi แล้วกด F9 เพื่อรันได้เลย สังเกตว่าการ compile & build ใน Linux จะเร็วมากกว่าบนวินโดส์เทียบกันไม่ติด แต่ตอนรันโปรแกรมดูเหมือนในวินโดส์ทำงานได้เร็วกว่า
  • เปิดไฟล์ NMEA ที่อยู่ในโฟลเดอร์ Data ชื่อไฟล์ gpslog-mod.txt แล้วคลิกปุ่ม “Play NMEA >>”
เปิดไฟล์ NMEA คือไฟล์ gpslog-mod.txt
  • ลองทดสอบกันอีกไฟล์คือไฟล์ griffith-park.nmea จะเห็นหน้าตาตอนรันโปรแกรมดังนี้
ทดสอบด้วยไฟล์ griffith-park.nmea

ปัญหาของโค้ด Cross-platform

  • ผมมีเกร็ดจะเล่าคือเรื่องปํญหาโค้ด cross-platform จากสโลแกนของ Lazarus ที่ว่า Write Once Compile Anywhere ผมเห็นว่าไม่ร้อยเปอร์เซ็นต์ อย่างเช่น Class TGPSSkyplot โค้ดที่ใช้ได้ในวินโดส์กลับไม่ work ใน Linux  TGPSSkyplot เป็น class ที่ผมใช้เขียนสัญลักษณ์ GPS บนท้องฟ้า ในวินโดส์ใช้การเขียน Sprite ได้ แต่กลับใช้ไม่ได้ใน Linux ต้องหันมาใช้วิธีอื่น ลองดูโค้ดกันครับ
      [sourcecode language=”delphi”]

 

      procedure TGPSSkyPlot.DrawGPSSkyPlot(ASatInfos : TGSVInfos);

 

      var

 

      rSat, rFull : TRect;

 

      r : TRect;

 

      sk1, img1 : TPoint;

 

      x, y : integer;

 

      i : integer;

 

      dDist : double;

 

      Sat : TGSVInfo;

 

      ts : TSize;

 

      begin

 

      if Assigned(ASatInfos) then

 

      begin

 

      FGSVInfos := ASatInfos;

rSat := Rect(0, 0, FSatSize, FSatSize);
rFull := Rect(0, 0, FBmpBackground.Width, FBmpBackground.Height);
//First Sat, Copy FBufferBackgroundImg to FBmpBuffer.
if (TGSVInfo(FGSVInfos.items[0]).FirstSat) then
FBmpBuffer.Canvas.CopyRect(rFull, FBmpBackground.Canvas, rFull);

for i := 0 to FGSVInfos.Count – 1 do
begin
Sat := TGSVInfo(FGSVInfos.Items[i]);
dDist := (90 – Sat.Elevation) * FSkyHalfW / 90;
sk1 := Polar2Cartesian(trunc(dDist),Sat.Azimuth);
img1 := Cartesian2Pixel(sk1, FTransfrm);
//Keep image coordinate system into TSatInfo.
Sat.X := img1.X;
Sat.Y := img1.Y;
{Draw Sprites works very well in WINDOWS, Not in Linux}
{$IFDEF WINDOWS}
BitBlt(FBmpSatDest[i].Canvas.Handle, 0, 0, FBmpSatDest[i].Width, FBmpSatDest[i].Height,
FBmpBuffer.Canvas.Handle, img1.X – FImgShift, img1.Y – FImgShift, SRCCOPY);
BitBlt(FBmpSatDest[i].Canvas.Handle, 0, 0, FBmpSatDest[i].Width, FBmpSatDest[i].Height,
FBmpMaskSat.Canvas.Handle, 0, 0, SRCAND);
if (Sat.SNR = 0) then
BitBlt(FBmpSatDest[i].Canvas.Handle, 0, 0, FBmpSatDest[i].Width, FBmpSatDest[i].Height,
FBmpRedSpriteSat.Canvas.Handle, 0, 0, SRCINVERT)
else
BitBlt(FBmpSatDest[i].Canvas.Handle, 0, 0, FBmpSatDest[i].Width, FBmpSatDest[i].Height,
FBmpGreenSpriteSat.Canvas.Handle, 0, 0, SRCINVERT);
{$ENDIF}
{$IFDEF LINUX}
BitBlt(FBmpSatDest[i].Canvas.Handle, 0, 0, FBmpSatDest[i].Width, FBmpSatDest[i].Height,
FBmpBuffer.Canvas.Handle, img1.X – FImgShift, img1.Y – FImgShift, SRCCOPY);
if (Sat.SNR = 0) then
FBmpSatDest[i].Canvas.Draw(0, 0, FRedSatImg)
else
FBmpSatDest[i].Canvas.Draw(0, 0, FGreenSatImg);
{$ENDIF}
BitBlt(FBmpBuffer.Canvas.Handle, img1.X – FImgShift, img1.Y – FImgShift,
FBmpSatDest[i].Width, FBmpSatDest[i].Height, FBmpSatDest[i].Canvas.Handle, 0, 0, SRCCOPY);

//************* Draw PRN ********************
with FBmpTxtDest[i] do
begin
//Assumed image size to valid for Canvas.Font.
Width := 10;
Height := 10;
Canvas.Font.Color := clBlack;
Canvas.Font.Style := [fsBold];
Canvas.Font.Name := ‘Sans’;
Canvas.Font.Size := trunc(8/20 * FSatSize);
ts := Canvas.TextExtent( Sat.Prn);
//The real size.
Width := ts.cx;
Height := ts.cy;
Canvas.Brush.Style := bsClear;
Canvas.Brush.Color := self.Color;
x := img1.X – Width div 2 – 2;
y := img1.Y + FSatSize div 2 – 2;
r := Rect(0 , 0, Width, Height);
BitBlt(Canvas.Handle, 0, 0, Width, Height,
FBmpBuffer.Canvas.Handle, x, y, SRCCOPY);
Canvas.TextOut(0, 0, Sat.PRN);
BitBlt(FBmpBuffer.Canvas.Handle, x, y, Width, Height, Canvas.Handle, 0, 0, SRCCOPY);
//Last Sat, Copy FBmpBuffer to TGPSSkyplot Canvas.
if (Sat.LastSat) then
BitBlt(self.Canvas.Handle, 0, 0, FBmpBuffer.Width, FBmpBuffer.Height, FBmpBuffer.Canvas.Handle, 0, 0, SRCCOPY);
end;
end; //for
end;
end;

[/sourcecode]

  • จะเห็นว่าผมต้องแยกโค้ดในวินโดส์และ Linux ด้วยการใช้ directive {$IFDEF} ที่ต้องแยกโค้ดแบบนี้ก็ไม่มากมายหรอกครับ บางครั้งก็สถานการณ์ก็บังคับเช่น hardware อย่าง serial port ในวินโดส์จะเริ่มตั้งแต Com1, Com2, Com3,… ส่วนในลินุกส์เริ่มจาก /dev/ttys0, /dev/ttys1, /dev/ttys2,…
  • ก็ขอจบตอนนี้ไว้ก่อน ตอนหน้ามาดูว่าถ้าต่อ GPS ผ่าน serial port ในวินโดส์และลินุกส์ บนวินโดส์ผมทดสอบเรียบร้อยแล้วใช้งานได้ดี แต่ในลินุกส์ยังไม่ได้ทดสอบ ก็มารอดูกันครับ ติดตามตอนหน้าซึ่งจะเป็นตอนสุดท้าย

Related

Leave a Reply Cancel reply

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

October 2026
M T W T F S S
 1234
567891011
12131415161718
19202122232425
262728293031  
« Sep    

Blog Stats

There was an issue retrieving stats. Please try again later.

Recent Posts

  • เร็วแรงทะลุนรกกับ POCUT (POint Cloud UTils)
  • อัพเดทแอพ “SurveyStar LDP Thailand” เพื่อรับกับยกร่างมาตรฐาน “TH-LDP”
  • ออกแอพใหม่ SurveyStar Traverse Pro สืบสานงานคำนวณวงรอบ ตอนที่ 2
  • ออกแอพใหม่ SurveyStar Traverse Pro สืบสานงานคำนวณวงรอบ ตอนที่ 1
  • โปรแกรมอรรถประโยชน์ Pocut (POint Cloud Utils)
  • โปรแกรมแปลงไฟล์แคดข้ามระบบพิกัด (Drawing Transformer)
  • มาตรฐานระบบพิกัดแผนที่แบบแอลดีพีของประเทศไทยสำหรับงานวิศวกรรมและการก่อสร้าง (Thailand Low Distortion Map Coordinate System for Engineering and Construction)
  • ประสบการณ์ใช้งาน Kimi K3 Code เขมือบแบบสยอง
  • สร้างแพลตฟอร์มดู Point Cloud บนเว็บด้วย Potree + CesiumJS — เรื่องเล่าจากสนามบินอู่ตะเภา
  • เมื่อวิศวกรสำรวจคำนวณเรื่องน้ำ – วิเคราะห์ระบบระบายน้ำบริเวณ RESA
  • แนะนำหนังสือ “จีออเดซี” ที่ยอดเยี่ยมของดร.พุทธิพล
  • ESPrtk ทำให้ ESP32 ใช้ไม่ได้? วิธีกู้คืน
  • กรณีศึกษา – คืนชีพ SDL30 ปี 2000 ด้วย ESP32 และแอพทำเอง SDL30 Collector
  • DIY RTK Base Station (survey-grade) รุ่น V3.21 ด้วย Raspberry Pi 2B + UM980 เมื่อคุณปู่กลับมาเป็นฮีโร่ ตอนที่ 4
  • รีวิวกูปรี (CoPre2) โปรแกรมประมวลผลไลดาร์จากค่าย CHCNav
  • DIY RTK Base Station (survey-grade) รุ่น V3.2 ด้วย Orange Pi 3 Zero + UM980 ตอนที่ 3
  • DIY RTK Base Station (survey-grade) รุ่น V3 ด้วย Orange Pi 3 Zero + UM980 ตอนที่ 2
  • เส้นทางและไทม์ไลน์ของใบรับรองความรู้ความชำนาญในการประกอบอาชีพวิศวกรรม(สำรวจ)ระดับวิศวกรวิชาชีพ
  • มัดแหนมรวมสามโปรแกรมไปใช้บนสโตร์ Snap ฝั่งลีนุกซ์
  • ปัดฝุ่น Traverse Pro เพิ่มรายละเอียดรายการคำนวณใหม่แบบแนวนอน (Landscape) และธีมมืด
  • DIY RTK Base Station (Survey-Grade) ด้วยชิป UM980 และบอร์ด ESP32 ตอนที่ 1
  • สร้าง NTRIP Caster ด้วย BNC บนคลาวด์แบบ DIY สำหรับ RTK Base Station ใช้ CHCNav P5
  • จับ AI มาไตรกรีฬา สร้างตัวติดตั้ง Snap สำหรับ Surveyor Pocket Tools กับประเด็นแฝงเร้นความเป็นส่วนตัวของผู้ใช้
  • ทดสอบรีด QGIS แบบโหดสัสด้วยชุดข้อมูล Open Building V3 โพลีกอน 74 ล้านหลัง
  • เมื่อ AI เป็นพิษชักจูงผู้ใช้ด้วยข้อมูลผิดๆ

Subscribe to Blog via Email

Enter your email address to subscribe to this blog and receive notifications of new posts by email.

Join 122 other subscribers

Archives

  • October 2026
  • September 2026
  • August 2026
  • July 2026
  • May 2026
  • April 2026
  • March 2026
  • January 2026
  • December 2025
  • November 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • July 2024
  • May 2024
  • April 2024
  • January 2024
  • November 2023
  • October 2023
  • September 2023
  • July 2023
  • June 2023
  • May 2023
  • March 2023
  • February 2023
  • January 2023
  • November 2022
  • October 2022
  • September 2022
  • July 2022
  • May 2022
  • December 2021
  • October 2021
  • September 2021
  • August 2021
  • May 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • September 2019
  • August 2019
  • July 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
  • January 2018
  • November 2017
  • July 2017
  • June 2017
  • May 2017
  • April 2017
  • March 2017
  • February 2017
  • January 2017
  • December 2016
  • November 2016
  • October 2016
  • August 2016
  • November 2015
  • March 2015
  • August 2014
  • March 2014
  • January 2014
  • December 2013
  • February 2012
  • January 2012
  • November 2011
  • October 2011
  • August 2011
  • April 2011
  • February 2011
  • December 2010
  • November 2010
  • October 2010
  • September 2010
  • June 2010
  • April 2010
  • March 2010
  • January 2010
  • December 2009
  • November 2009
  • October 2009
  • September 2009
  • August 2009

Recent Comments

  • priabroy on ออกแอพใหม่ SurveyStar Traverse Pro สืบสานงานคำนวณวงรอบ ตอนที่ 1
  • Konexana Yomleuangsa on ออกแอพใหม่ SurveyStar Traverse Pro สืบสานงานคำนวณวงรอบ ตอนที่ 1
  • เฟือง เถา on DIY RTK Base Station (survey-grade) รุ่น V3.21 ด้วย Raspberry Pi 2B + UM980 เมื่อคุณปู่กลับมาเป็นฮีโร่ ตอนที่ 4
  • priabroy on DIY RTK Base Station (survey-grade) รุ่น V3.21 ด้วย Raspberry Pi 2B + UM980 เมื่อคุณปู่กลับมาเป็นฮีโร่ ตอนที่ 4
  • ตรันฟองนาม on DIY RTK Base Station (survey-grade) รุ่น V3.21 ด้วย Raspberry Pi 2B + UM980 เมื่อคุณปู่กลับมาเป็นฮีโร่ ตอนที่ 4
©2026 Prajuab Riabroy's Blog | Design: Newspaperly WordPress Theme