当前位置: 代码迷 >> Windows Mobile >> 关于 GPSGetPosition 的疑义
  详细解决方案

关于 GPSGetPosition 的疑义

热度:7055   发布时间:2013-02-26 00:00:00.0
关于 GPSGetPosition 的疑问
大虾们帮帮忙。

我在WM6系统下做的一个获取定位的程序,是通过API函数GPSGetPosition来获取定位信息的。

现在的问题是:手机是正常的,但GPSGetPosition获取定位信息的时间太长(有的一个晚上放窗台附近都不行)。手机里自己提供的GPS测试工具能很快获取到定位信息(有时候手机自带的GPS定位程序都获取到经纬度很长时间了但我的程序还是获取不到定位信息)。不知道是不是GPSGetPosition或者GPSOpenDevice这几个函数有什么地方需要设置的?又或者本来直接读取COM口的数据比GPSGetPosition来得快?

有没有碰到过同样问题的同行帮忙解答一下疑惑?

参照的是.Net自带的例子来做的。

下面截取的是获取定位信息的过程:


    public GpsPosition GetPosition(TimeSpan maxAge)
    {
        GpsPosition gpsPosition = null;
        if (Opened)
        {
            // GPS 信息存放的指针
            IntPtr ptr = Utils.LocalAlloc(Marshal.SizeOf(typeof(GpsPosition)));

            // fill in the required fields 
            gpsPosition = new GpsPosition();
            gpsPosition.dwVersion = 1;
            gpsPosition.dwSize = Marshal.SizeOf(typeof(GpsPosition));

            // 将 GpsPosition 结构初始化为指针
            Marshal.StructureToPtr(gpsPosition, ptr, false);

            // 读取 GPS 设备中的数据到内存中
            int result = GPSGetPosition(gpsHandle, ptr, 500000, 0);
            if (result == 0)
            {
                // 读取成功时将指针转换为 GpsPosition 结构
                gpsPosition = (GpsPosition)Marshal.PtrToStructure(ptr, typeof(GpsPosition));

                if (maxAge != TimeSpan.Zero)
                {
                    // 检测数据有效性
                    if (!gpsPosition.TimeValid || DateTime.Now - maxAge > gpsPosition.Time)
                    {
                        gpsPosition = null;
                    }
                }
            }

            // 释放指针
            Utils.LocalFree(ptr);