大虾们帮帮忙。
我在WM6系统下做的一个获取定位的程序,是通过API函数GPSGetPosition来获取定位信息的。
现在的问题是:手机是正常的,但GPSGetPosition获取定位信息的时间太长(有的一个晚上放窗台附近都不行)。手机里自己提供的GPS测试工具能很快获取到定位信息(有时候手机自带的GPS定位程序都获取到经纬度很长时间了但我的程序还是获取不到定位信息)。不知道是不是GPSGetPosition或者GPSOpenDevice这几个函数有什么地方需要设置的?又或者本来直接读取COM口的数据比GPSGetPosition来得快?
有没有碰到过同样问题的同行帮忙解答一下疑惑?
参照的是.Net自带的例子来做的。
下面截取的是获取定位信息的过程:
- C# code
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信号的话,已经把初期的星历下载工作都作了,上了车以后只要不是太靠车身中部,一般可以有信号的,只是有效卫星数会有所下降。如果在车外没搜到星就进入了车内,那更加微弱的信号就不利于星历的下载,运气不好的话就不会定位成功了,除非靠窗会好些。
但楼主所述的情况按说不至于的。即使是操作串口读到了数据,也应该是GPSID提供的串口吧,那与利用GPSID应该是一样的吧。有可能是GPSID驱动抛掉了一些定位的数据,也有可能是驱动程序引起的问题。