我知道在GeoCoordinateWatcher对象的构造函数中有可能指定准确性(默认或高),但对于我的大学项目,我需要了解更多。
我的教授让我搜索并指定GeoCoordinateWatcher使用的算法或启发式方法来选择他的来源。
我已经知道MSDN上的文章
了虽然位置服务使用多个位置信息源,并且在任何给定时间可能无法使用任何来源(例如,无法访问GPS卫星或手机信号塔),但本机代码层处理工作评估可用数据并选择最佳来源集。您的所有应用程序需要做的是在高精度或默认的功耗优化设置之间进行选择。初始化主要位置服务类GeoCoordinateWatcher时可以设置此值。
但我需要更准确地了解本机代码层如何处理源的评估。
任何人都可以帮我这个或者给我一些更详细的文章?
答案 0 :(得分:1)
如果您查看System.Device程序集的源代码(使用dotPeek之类的反编译器),您可以看到它是如何工作的。
实际上GeoCoordinateWatcher
只是一个小包装器,它创建了一个ILocation
类型的COM对象。此接口是Microsoft在Windows 7中引入的Location API的一部分。这本身是Sensor API的一部分,也是从Windows 7开始的。
如果您仔细阅读本文档,您将找到此introduction article,其中介绍了此API的工作原理。这篇介绍中的一句话是:
传感器制造商可以创建设备驱动程序来连接传感器 Windows 7.传感器设备驱动程序使用Windows实现 便携式设备(WPD)驱动程序模型,它基于Windows 用户模式驱动程序框架(UMDF)。许多设备驱动程序已经 使用这些框架编写。
因此,GPS设备的制造商将提供将安装在系统上的Windows驱动程序。该驱动程序将宣布自己为系统的定位设备。
当您创建GeoCoordinateWatcher
时,它会通过位置api询问所需数据。操作系统检查哪些驱动程序已宣布自己有能力并启动这些驱动程序。然后,这些驱动程序将打开与设备的连接,读取数据并将其转发给所需的消费者。