Geolocation 模拟GPS或串行设备

Geolocation 模拟GPS或串行设备,geolocation,gps,mapping,google-latitude,Geolocation,Gps,Mapping,Google Latitude,是否有可能以其他软件认为是GPS设备的格式从或任何其他web位置API(如)获取位置数据 当我读到有关超级用户WiFi定位的问题时,我突然想到,如果我能模仿GPS装置,这些web服务中的许多可以充当“穷人”GPS,而不是那些需要它的不太有用的软件 这是一种选择吗 最好是OSX和Python,但我对任何实现都感兴趣。我不太确定如何完成您的要求,但我可能能够提供一些关于如何开始完成的见解。下面是: 在大多数系统中,GPS设备只不过是一个串行设备——如果您使用的是Windows,也称为COM端口;如果

是否有可能以其他软件认为是GPS设备的格式从或任何其他web位置API(如)获取位置数据

当我读到有关超级用户WiFi定位的问题时,我突然想到,如果我能模仿GPS装置,这些web服务中的许多可以充当“穷人”GPS,而不是那些需要它的不太有用的软件

这是一种选择吗


最好是OSX和Python,但我对任何实现都感兴趣。

我不太确定如何完成您的要求,但我可能能够提供一些关于如何开始完成的见解。下面是:

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

但是,您可能需要考虑一些复杂因素:

  • 大多数GPS设备不仅仅发送位置数据;还有卫星位置、定位质量、方位等信息。再说一次,没有人制定任何规则说你必须让所有的数据都可用。可能还有更多,但我承认我自己需要在这方面做更多的研究
  • 我不确定在处理谷歌纬度(GoogleLatitude)等问题时,你能以多快的速度接收数据,但接收过程中的任何延迟都肯定会导致你的“串行端口”数据流出现可见的暂停。再说一次,这可能不像看上去那么复杂,因为GPS设备无论如何都会在公交车上“突发”数据,但我肯定会注意这一点。您需要确保总是有多余的数据出现,而不是数据短缺
在此过程中,您还必须将收到的坐标转换为有效的GPS语句。你可以找到这些标准的规范,但我肯定会和NMEA标准交朋友——尽管这是一个有缺陷的标准,但它似乎是每个人都同意的标准


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

我没有详细研究过,但您是否考虑过使用?它可能会为你提供一些你正在寻找的东西。它适用于所有主要的台式机和移动操作系统。

看看它可以让你连接到谷歌地球和其他东西(比如模拟GPS等等)。只是windows,但我认为您可以从中获得一些有用的想法。

Python邮件列表中有一个提到windows并讨论Unix的伪tty功能。如果要使用的应用程序允许您键入特定的tty设备文件,这可能是最简单的方法。(除了要求作者提供一个插件API来实现您的目标,或者为自己购买一个新的API。)

你在使用OSX吗

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

大多数本机Mac应用程序都会查询iOServiceMatch以查找具有kIOSerialBSDRS232Type的设备,我怀疑伪tty是否会显示为IOKit服务

在这种情况下,除非您能找到一个已经实现了这样一个东西的项目,否则您将需要实现一个驱动程序,如本线程中所述。如果您在创建设备驱动程序时遇到了麻烦,那么您可能会希望它基于IOKit,因为可能存在IOServiceMatching查询。您可以在顶部找到该帖子中提到的Apple16X50Serial项目(如果您想针对10.6之前的版本,请转到并选择较旧的操作系统版本)

如果您的应用程序对实时数据最有用(例如Python mailinglist线程中提到的RouteBuddy应用程序),那么您将希望从web源获取更新(希望它们支持长轮询),并将其转换为基本的RMC语句。您不希望从驱动程序代码内部执行此操作。相反,将您的工作划分为可以通信的内核区域和用户区域,并将尽可能少的代码放入内核部分

如果你想让应用程序读写这些web服务,最好的选择可能是模拟Garmin设备。Garmin或多或少地将他们的协议记录在他们的产品附带的IntfSpec.pdf文件中。同样,您希望将尽可能多的内容拆分为用户空间代码


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

另请注意:我对GPSD不太熟悉,但如果我理解正确,这可能是您的一个选择,根据您在问题中提到的内容。这里有一些很好的细节-是否有任何现有的库/产品可以模拟串行端口?添加了更多细节。我的目标是回答最初的问题。说NMEA语言的GPS设备通常会在任何时候产生他们想要的任何信息,当他们没有信息时什么也不说,软件几乎必须解决这个问题。每隔几秒钟就有一个GGA/GLL/RMC三元组的句子(加上几个字段,如“使用的卫星数”)可能会愚弄大多数软件。马特,我把内特的问题标为答案,因为它提供了更多的细节,但我不想继续