2009-11-17 53 views
3

有沒有人有任何經驗編程地從連接到移動PC的GPS獲取緯度/經度?我正在開發一個團隊,目前正在尋找硬件選項 - 作爲程序員,他最終必須與所選的任何東西一起生活,我想知道有沒有人有過編寫與GPS接口的.Net程序的經驗?任何關於硬件和/或編程的推薦都將不勝感激。按照我的設想,我的應用程序需要向GPS詢問當前的經緯度,也許每10到20秒鐘一次。從.Net Winform應用程序訪問GPS數據

+0

你是說這將是連接到一臺筆記本電腦(而不是移動設備與GPS)一個GPS – HitLikeAHammer 2009-11-17 22:39:38

+0

那是正確的。平板電腦是確切的。 – Jeff 2009-11-23 14:30:59

+0

感謝所有的反饋意見。我會給所有回覆贊成的人。稍後當我開始編碼時,我會回來給我最喜歡的選擇回答。再次感謝。 – Jeff 2009-11-23 15:34:06

回答

1

我以前寫過這樣的應用程序。

正如亨克所說,你在一個COM端口上監聽。構建一個讀取com流的組件,例如1024緩衝區。那將足以包含至少1個完整的NMEA句子。從那裏開始,閱讀輸入內容,直到找到句子的開頭並對其進行解析。如果由於某種原因您沒有完整的句子,請閱讀另一個緩衝區,追加並繼續/再次嘗試。

+0

雖然NMEA是純ASCII,但我仍然建議將TextReader附加到Serialport的流並使用ReadLine()。 – 2009-11-17 22:42:07

1

如果您願意依賴於Windows 7,則會有一個Location API爲您處理NMEA解碼。

1

如果Gps集成在您的Windows CE PC或Windows Mobile手機中,您可以簡單地使用GPS中間驅動程序來獲取信息。 由於您處於.net環境中,因此可以爲此本機API創建.Net包裝器。

public class GpsHardware 
{ 
    private const string gpsLibraryName = "gpsapi.dll"; 
    private const string coreLibraryName = "coredll.dll"; 

    [DllImport(GpsHardware.coreLibraryName, SetLastError = false)] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    private static extern bool EventModify(IntPtr hEvent, uint function); 

    [DllImport(GpsHardware.gpsLibraryName, SetLastError = true, CharSet = CharSet.Unicode)] 
    private static extern IntPtr GPSOpenDevice(IntPtr hNewLocationData, IntPtr hDeviceStateChange, string szDeviceName, uint dwFlags); 

    [DllImport(GpsHardware.gpsLibraryName, SetLastError = true)] 
    private static extern uint GPSCloseDevice(IntPtr hGPSDevice); 

    [DllImport(GpsHardware.gpsLibraryName, SetLastError = true)] 
    private static extern uint GPSGetPosition(IntPtr hGPSDevice, IntPtr pGPSPosition, uint dwMaximumAge, uint dwFlags); 

    [DllImport(GpsHardware.gpsLibraryName, SetLastError = true)] 
    private static extern uint GPSGetDeviceState(IntPtr pGPSDevice); 

    ... 
} 

當然,你將不得不處理編組和所有偉大的互操作的事情:)

+0

或者您可以在SDK \\ Samples fiolder中使用Interop包裝器。 – 2009-11-18 23:06:40

相關問題