English 中文(简体)
Accessing GPS Data From a .Net Winform Application
原标题:

Does anyone out there have any experience programatically retreiving the lat/long from a GPS attached to a mobile PC? A team I m on is currently looking at hardware options--as the programmer who will eventually have to live with whatever is selected I was wondering if anyone out there has had experience writing .Net programs that interface with a GPS? Any recomendations for hardware and/or programming would be greatly appreciated.

As I envision it, my application will need to ask the GPS for the current lat/long perhaps once every 10 to 20 seconds.

最佳回答

I ve written such an application before.

As Henk said, you listen on a COM port. Build a component that reads the com stream in, in say a 1024 buffer. that ll be plenty to contain at least 1 complete NMEA sentence. From there, read the input until you find the start of a sentence and parse it. If for some reason you don t have the full sentence, read in another buffer, append and continue/try again.

问题回答

If you re willing to be dependent on Windows 7, there s a Location API that handles the NMEA decoding for you.

If the Gps is integrated within your windows CE PC or windows mobile phone, you can simply use the GPS Intermediate Driver to pool for information. Since you are in a .net environment, you could create a .Net wrapper to this native API.

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);

    ...
}

Of course you will have to deal with marshaling and all the great interop things :)





相关问题
Bring window to foreground after Mutex fails

I was wondering if someone can tell me what would be the best way to bring my application to the foreground if a mutex was not able to be created for a new instance. E.g.: Application X is running ...

How to start WinForm app minimized to tray?

I ve successfully created an app that minimizes to the tray using a NotifyIcon. When the form is manually closed it is successfully hidden from the desktop, taskbar, and alt-tab. The problem occurs ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

Handle DataTable.DataRow cell change event

I have a DataTable that has several DataColumns and DataRow. Now i would like to handle an event when cell of this DataRow is changed. How to do this in c#?

Apparent Memory Leak in DataGridView

How do you force a DataGridView to release its reference to a bound DataSet? We have a rather large dataset being displayed in a DataGridView and noticed that resources were not being freed after the ...

ALT Key Shortcuts Hidden

I am using VS2008 and creating forms. By default, the underscore of the character in a textbox when using an ampersand is not shown when I run the application. ex. "&Goto Here" is not ...

WPF-XAML window in Winforms Application

I have a Winforms application coded in VS C# 2008 and want to insert a WPF window into the window pane of Winforms application. Could you explain me how this is done.

热门标签