读书人

关于 GPSGetPosition 的疑义

发布时间: 2013-01-05 15:20:40 作者: rapoo

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


}

return gpsPosition;
}


[解决办法]
我觉得应该是抛弃数据太多的原因
还有本来在室内定位应该就比较困难的
商业的一些软件都做的很好也很正常,我测试时也是这个问题
[解决办法]
这个和GPS的信号有关系,在窗口并不一定就行
[解决办法]
引用:
这个和GPS的信号有关系

我觉得是有关系的,我在做的时候发现一个问题 ,在室内定位不太可能,但是在外面一般来说都可以找到信号,还有一种情况,如果说在上公交车之前找到GPS信号,在公交车内可接收到信号,但是如果上车之前没有收到,则在车上一直都接收不到信号。
[解决办法]
在上公交前搜到GPS信号的话,已经把初期的星历下载工作都作了,上了车以后只要不是太靠车身中部,一般可以有信号的,只是有效卫星数会有所下降。如果在车外没搜到星就进入了车内,那更加微弱的信号就不利于星历的下载,运气不好的话就不会定位成功了,除非靠窗会好些。

但楼主所述的情况按说不至于的。即使是操作串口读到了数据,也应该是GPSID提供的串口吧,那与利用GPSID应该是一样的吧。有可能是GPSID驱动抛掉了一些定位的数据,也有可能是驱动程序引起的问题。

读书人网 >Windows Mobile

热点推荐