Доступ к данным GPS из приложения .Net Winform - PullRequest
3 голосов
/ 18 ноября 2009

Есть ли у кого-нибудь опыт программно получать широту / долготу с GPS, подключенного к мобильному ПК? Команда, в которой я сейчас работаю, изучает аппаратные опции - как программисту, которому в конечном итоге придется жить с тем, что выбрано, мне было интересно, имел ли кто-нибудь опыт написания .Net программ, взаимодействующих с GPS? Будем весьма благодарны за любые рекомендации по аппаратному обеспечению и / или программированию.

Как я предполагаю, моему приложению нужно будет запрашивать у GPS текущий широту / долготу, возможно, раз в 10-20 секунд.

Ответы [ 3 ]

1 голос
/ 18 ноября 2009

Если вы хотите зависеть от Windows 7, есть Location API , который обрабатывает декодирование NMEA для вас.

1 голос
/ 18 ноября 2009

Если Gps встроен в ваш ПК с Windows CE или Windows Mobile, вы можете просто использовать промежуточный драйвер GPS для объединения информации. Поскольку вы находитесь в среде .net, вы можете создать оболочку .Net для этого собственного 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);

    ...
}

Конечно, вам придется иметь дело с маршалингом и всеми великими вещами взаимодействия:)

1 голос
/ 18 ноября 2009

Я написал такое заявление раньше.

Как сказал Хенк, вы слушаете COM-порт. Создайте компонент, который читает поток com, например, в буфере 1024. этого будет достаточно, чтобы содержать хотя бы 1 полное предложение NMEA. Оттуда читайте ввод, пока не найдете начало предложения и не проанализируйте его. Если по какой-то причине у вас нет полного предложения, прочитайте в другом буфере, добавьте и продолжите / попробуйте снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...