2009-11-17 47 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

相关问题