2009-11-17 8 views
3

Est-ce que quelqu'un a une expérience de la programmation de la lat/long depuis un GPS connecté à un ordinateur portable? Une équipe que je suis en train de regarder les options matérielles - en tant que programmeur qui devra éventuellement vivre avec tout ce qui est sélectionné je me demandais si quelqu'un là-bas a eu l'expérience de l'écriture de programmes .Net qui interfacent avec un GPS? Toute recommandation concernant le matériel et/ou la programmation serait grandement appréciée. Comme je l'imagine, mon application devra demander au GPS le lat/long actuel, peut-être une fois toutes les 10 à 20 secondes.Accès aux données GPS à partir d'une application .Net Winform

+0

Voulez-vous dire que ce sera un GPS attaché à un ordinateur portable (par opposition à un appareil mobile avec GPS) – HitLikeAHammer

+0

Ce est correct. Tablet PC pour être exact. – Jeff

+0

Merci à tous pour vos commentaires. Je vais donner à tous ceux qui ont répondu à un upvote. Plus tard quand je commencerai à coder je reviendrai et donnerai la réponse à mon choix préféré. Merci encore. – Jeff

Répondre

1

J'ai écrit une telle application auparavant. Comme l'a dit Henk, vous écoutez sur un port COM. Construire un composant qui lit le flux com dans, disons un tampon 1024. ce sera assez pour contenir au moins 1 phrase NMEA complète. De là, lisez l'entrée jusqu'à ce que vous trouviez le début d'une phrase et que vous l'analysiez. Si pour une raison quelconque vous n'avez pas la phrase complète, lisez dans un autre tampon, ajoutez et continuez/essayez à nouveau.

+0

Bien que NMEA soit un code ASCII, je recommanderais quand même d'attacher un TextReader au flux Serialport et utiliser ReadLine(). –

1

Si vous souhaitez être dépendant de Windows 7, il existe un Location API qui gère le décodage NMEA pour vous.

1

Si le GPS est intégré à votre ordinateur Windows CE ou à votre téléphone portable Windows, vous pouvez simplement utiliser le pilote intermédiaire GPS pour mettre en commun des informations. Étant donné que vous êtes dans un environnement .net, vous pouvez créer un wrapper .Net pour cette API native.

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

    ... 
} 

Bien sûr, vous aurez à traiter avec marshaling et toutes les grandes choses Interop :)

+0

Ou vous pouvez utiliser le wrapper Interop dans le dossier SDK \\ Samples. –

Questions connexes