模拟GPS或串行设备

时间:2009-11-02 13:26:29

标签: geolocation gps mapping google-latitude

是否可以从Google GearsGoogle Gelocation API或任何其他网站位置API(例如Fire Eagle)中获取位置数据,使其在其他软件中显示为GPS设备?

在我看到these answers关于WiFi位置查询的问题时,我发现,在超级用户身上,如果我可以模拟一个GPS单元,许多这些网络服务可以充当“穷人”的GPS否则不太有用的软件需要它。

GPSD是一个选项吗?

优选OSX& Python,但我会对任何实现感兴趣。

4 个答案:

答案 0 :(得分:4)

Python邮件列表上有一个very similar thread提到Windows virtual COM ports并讨论了Unix的伪tty功能。如果您要使用的应用程序允许您键入特定的tty设备文件,这可能是最简单的路线。 (如果要求作者为您要做的事情提供插件API,或者为自己购买$20 bluetooth GPS mouse,请不要这样做。)

您使用的是OS X吗?

Google代码上有一个项目macosxvirtualserialport,它提供了一个名为socat的实用程序的某些功能的图形包装。如果你看到伪tty路线的潜力,我建议看看socat。我相信你可以使用socat将Python程序中的管道链接到伪tty。

大多数原生Mac应用程序将查询带有kIOSerialBSDRS232Type的设备的IOServiceMatching,我怀疑伪tty将显示为IOKit服务。

在这种情况下,除非您能找到已经实现此类事物的项目,否则您需要按照此How to create virtual COM port线程中的描述实现驱动程序。如果您遇到创建设备驱动程序的麻烦,您可能希望将其基于IOKit,因为可能是IOServiceMatching查询。您可以在Apple's open source code list的顶部找到该帖子中提到的Apple16X50Serial项目(转到main page并选择较旧的操作系统版本,如果您想要定位10.6之前的版本)。

如果您的应用对实时数据最有用(例如Python邮件列表线程can log current positions中提到的RouteBuddy应用程序),那么您将需要从Web源获取更新(希望它们支持长轮询)并转换他们是基本的NMEA RMC句子。您不希望在驱动程序代码中执行此操作。相反,将您的工作划分为可以进行通信的内核域和用户域,并尽可能少地将代码放入内核部分。

如果您想让应用程序读取和写入这些Web服务,您最好的选择可能是模拟Garmin设备。 Garmin在他们的Device Interface SDK中包含的IntfSpec.pdf文件中或多或少地记录了他们的协议。同样,您希望尽可能多地拆分到用户空间代码中。

我无法找到实现基于IOKit的虚拟串行接口的内核端的项目或实用程序,但如果没有人隐藏在某处,我会感到惊讶。不幸的是,我发现这个问题的大多数答案都是这样的,开发人员被告知要忙碌writing a kext

答案 1 :(得分:2)

我不确定如何完成你所要求的内容,但我可以提供一些见解,了解你如何开始来完成它。所以这里:

GPS设备显示大多数系统只不过是一个串行设备 - 例如,如果您正在处理Windows,则为COM端口;如果您使用的是* nix,则为/ dev / ttySx。根据定义,串行端口的特定任务是通过总线流式传输数据,一次一个块。因此,从逻辑上讲,如果您想模拟GPS设备的存在,您应该收集您正在使用的数据并将其放入流中,以某种方式充当活动串行端口。

但是,您可能需要考虑一些并发症:

  • 大多数GPS设备不只是发送位置数据;还有关于卫星位置,固定质量,方位等的信息。然后,没有人制定任何规则说你来提供所有数据。可能还有更多,但我承认我需要在这个领域做更多的研究。
  • 我不确定在处理谷歌纵横等时你能以多快的速度接收数据,但接收的任何延迟肯定会导致你的“串口”数据流中出现明显的暂停。同样,这可能不像看起来那么复杂,因为众所周知GPS设备会在总线上“突发”数据,但我绝对会关注这一点。您希望确保始终存在过剩的数据,而不是短缺。

在此过程中,您还必须将收到的坐标转换为有效的GPS句子。你可以找到那些规格,但我肯定会与NMEA标准交朋友 - 即使它是一个有缺陷的标准,它仍然是每个人似乎都同意的。

希望这对你有所帮助,至少一点点。是否还有您认为可能有助于回答此问题的问题的具体细节?

答案 2 :(得分:1)

查看Franson GPS Gate,它可以让您连接到Google地球等(例如模拟GPS等)。虽然是Windows,但我认为你可以从中获得一些有用的想法。

答案 3 :(得分:0)

我没有深入研究过,但您是否考虑过使用Skyhook's SDK?它可能会为您提供一些您正在寻找的东西。它适用于所有主流桌面和移动操作系统。