有鑑於許多先進對小弟的此篇GPS2KML的程式碼有興趣,希望小弟能夠分享source code。
小弟先提出說明,由於小弟不希望我的程式被作為商業用途,並且在本程式碼有使用他人著作權(讀取comport的部份)的情況下,小弟不可能在公開網頁中公佈我的程式碼;但本著希望大家能夠互相交流並且討論的前提下,小弟寫了一個簡單的sample code,這個sample是用.NET Compact Framework2.0寫的,並且使用SerialPort的元件,所以不會有著作權的問題。希望藉由小弟的拋磚引玉,能夠吸引更多同好來互相切磋。

也希望以後各位大大想要討論programing GPS大大就在這個討論串下討論。

以下是本source code的binary執行畫面:
GPS2KML的SourceCode部分分享
GPS2KML的SourceCode部分分享

編譯環境:WinXP Pro SP2, Visual Studio 2005 with .NET Compact Framework 2.0, Visual Basic 8.0
程式說明:按下"Start Record"並且定位成功後,每三秒記錄一次GPS座標,按下"Stop Record"後,會將紀錄檔儲存在/My Documents/record.tmp檔案中

source code下載:
附加壓縮檔: 200607/mobile01-b42920887250618a4a87fc2b459eb508.zip
謝謝hbsc大大,我原本是學civil engineering的,但是自學了一些VB,現在喜歡上寫GPS的program了,您真是我的學習榜樣和校外導師啊
我先在用的是hp 2210 + 406BT
我的想法是,不同的gps可能有時候有些錯誤的信息返回,我就打算分開兩個部分,先是全盤照收,然後另外一個peogram再對錄製下來的信息,進行處理(不正確的去掉),然後再生成各種格式的數據文件。
在此感謝hbsc大大的無私教導
喔喔喔 感謝分享。
剛剛稍微看過這個範例,有幾個問題想請教您:
1. Me.Timer1.Interval = 250,每讀3次GPS訊號就寫入檔案一次。但是您說每隔3秒寫入檔案一次? 這兩者有關嗎?
2. 時區是直接把GMT+8對嗎?
3.
GPS_X1 = CInt(Math.Floor(GPS_X / 100))
GPS_X2 = CInt(Math.Floor(GPS_X - 100 * GPS_X1))
GPS_X3 = Math.Round(((GPS_X - 100 * GPS_X1) - GPS_X2) * 60, 2)
GPS_X_final = GPS_X1 + ((GPS_X2 * 60 + GPS_X3) / 3600)
這段是把DDD.DDD 換成度分秒對嗎? 但是沒有投影? google earth的座標不是投影,但是papago我記得是,所以您的GPS2KML裡面一定有投影的計算,才能把軌跡丟給papago看對嗎^^?

4. 其實我是想寫個小程式,能夠在一段時間之內(例如5分鐘)統計平均速度與航向,同時又能紀錄軌跡給GE看,所以有這些問題。。。如果要統計平均速度,不知道您建議是直接平均GPS給的速度呢,還是用距離除以時間比較準確呢?
謝謝囉!!

billcow18 wrote:
1. Me.Timer1.Interval = 250,每讀3次GPS訊號就寫入檔案一次。但是您說每隔3秒寫入檔案一次? 這兩者有關嗎?
2. 時區是直接把GMT+8對嗎?
3.
這段是把DDD.DDD 換成度分秒對嗎? 但是沒有投影? google earth的座標不是投影,但是papago我記得是,所以您的GPS2KML裡面一定有投影的計算,才能把軌跡丟給papago看對嗎^^?
4. 其實我是想寫個小程式,能夠在一段時間之內(例如5分鐘)統計平均速度與航向,同時又能紀錄軌跡給GE看,所以有這些問題。。。如果要統計平均速度,不知道您建議是直接平均GPS給的速度呢,還是用距離除以時間比較準確呢?
謝謝囉!!


1.Timer的作用是讀取NMEA資料,因此每250毫秒就會讀一次comport裡的資料,由於NMEA常用的有六種格式,每種格式輸出的頻率不太一樣,而小弟主要是要讀取GPRMC的部分,原則上GPRMC預設頻率為1Hz(也就是每秒輸出一次),因此我就設定每1/4秒抓取一次。
至於設定每3秒儲存一次等於就是讀3次的GPRMC後再寫入record.tmp這個檔案裡

2.目前的確小弟很單純的就是將GPS時間+8小時而已~未來改版小弟會做成全球時區皆可用的版本。

3.原則上NMEA的輸出格式就是WGS84,而且如果我記得沒錯的話,GE和Papago都是用WGS84,只是格式不太一樣,小弟也不過做個轉換罷了。

4.小弟認為都可以,只是前者需要用一個變數記錄數量,後者要用Timer來記錄時間,我想就看各人喜好吧。另外您提的這個功能我會在下此改版加進去。(其實這個功能我已經構思很久了,只是還在苦思版面配置)

hbsc wrote:


1.Timer的作用是讀取NMEA資料,因此每250毫秒就會讀一次comport裡的資料,由於NMEA常用的有六種格式,每種格式輸出的頻率不太一樣,而小弟主要是要讀取GPRMC的部分,原則上GPRMC預設頻率為1Hz(也就是每秒輸出一次),因此我就設定每1/4秒抓取一次。
至於設定每3秒儲存一次等於就是讀3次的GPRMC後再寫入record.tmp這個檔案裡

2.目前的確小弟很單純的就是將GPS時間+8小時而已~未來改版小弟會做成全球時區皆可用的版本。

3.原則上NMEA的輸出格式就是WGS84,而且如果我記得沒錯的話,GE和Papago都是用WGS84,只是格式不太一樣,小弟也不過做個轉換罷了。

4.小弟認為都可以,只是前者需要用一個變數記錄數量,後者要用Timer來記錄時間,我想就看各人喜好吧。另外您提的這個功能我會在下此改版加進去。(其實這個功能我已經構思很久了,只是還在苦思版面配置)

1. 鳥解!!!
2. 鳥解!!!!
3. 抱歉我搞笑,剛剛查說明書,GPS訊號,Google earth,papago都是使用無投影的WGS84
4. 喔喔喔喔 期待啦
好奇怪喔 小弟用HP6515來執行此程式不能使用,是因為我用它內建的關係嗎 ?
他是com7 / 9600 小弟應該沒有設定錯吧
應該說是可以執行 但是沒有顯示任何lable的殉息
小弟最近忙傻了

在大大的鼎力相助下,已經可以記錄nmea文件了

但是在連接BT GPS的過程我就不知道該怎麽寫了

請教hbsc應該如何測試com口可否連接 gps並自動連接呢?

iJas wrote:
小弟最近忙傻了在大大...(恕刪)


小弟也很想知道這要怎麼做, 因為在Dopod裡, 看不到配對好的BT GPS用的是那個Port,
而PAPAGO G10在Smartphone裡, 是可以直接對配對好的BT GPS序列埠開啟, 不知道
是怎麼做的?
我也想瞭解如何抓取GPS的衛星信號,
可否請大大為大家講解一下呢?
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!