从.Net Winform应用程序访问GPS数据

时间:2009-11-17 22:31:56

标签: c# .net vb.net winforms gps

那里有没有人以编程方式从连接到移动PC的GPS上转发lat / long?我正在研究的一个团队目前正在研究硬件选项 - 作为程序员最终不得不接受所选择的任何内容我想知道是否有人有编写.Net程序与GPS接口的经验?任何对硬件和/或编程的建议都将不胜感激。

正如我所设想的那样,我的应用程序需要每10到20秒向GPS询问当前的纬度/长度。

3 个答案:

答案 0 :(得分:1)

我之前写过这样的应用程序。

正如Henk所说,你在COM端口上听。构建一个读取com流的组件,比如1024缓冲区。这将足以包含至少1个完整的NMEA句子。从那里,读取输入,直到找到句子的开头并解析它。如果由于某种原因你没有完整的句子,请在另一个缓冲区中读取,追加并继续/再试一次。

答案 1 :(得分:1)

如果您愿意依赖Windows 7,那么Location API会为您处理NMEA解码。

答案 2 :(得分:1)

如果Gps集成在您的Windows CE PC或Windows手机中,您只需使用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);

    ...
}

当然,你将不得不处理编组和所有伟大的互操作事件:)