是否可以从Google Gears,Google Gelocation API或任何其他网站位置API(例如Fire Eagle)中获取位置数据,使其在其他软件中显示为GPS设备?
在我看到these answers关于WiFi位置查询的问题时,我发现,在超级用户身上,如果我可以模拟一个GPS单元,许多这些网络服务可以充当“穷人”的GPS否则不太有用的软件需要它。
GPSD是一个选项吗?
优选OSX& Python,但我会对任何实现感兴趣。
答案 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句子。你可以找到那些规格,但我肯定会与NMEA标准交朋友 - 即使它是一个有缺陷的标准,它仍然是每个人似乎都同意的。
希望这对你有所帮助,至少一点点。是否还有您认为可能有助于回答此问题的问题的具体细节?
答案 2 :(得分:1)
查看Franson GPS Gate,它可以让您连接到Google地球等(例如模拟GPS等)。虽然是Windows,但我认为你可以从中获得一些有用的想法。
答案 3 :(得分:0)
我没有深入研究过,但您是否考虑过使用Skyhook's SDK?它可能会为您提供一些您正在寻找的东西。它适用于所有主流桌面和移动操作系统。