Pregunta

¿Es posible obtener datos de ubicación de engranajes de google, API de geolocalización de Google o cualquier otra API de ubicación web (como águila de fuego) en un formato tal que a otros programas les parezca un dispositivo GPS?

Se me ocurrió leyendo estas respuestas A mi pregunta sobre la ubicación WiFi, en Superusuario, encontré que si pudiera emular una unidad GPS, muchos de estos servicios web podrían actuar como un GPS para "pobres" para un software que de otro modo sería menos útil y que lo requiere.

Es GPSD ¿una opción?

Preferiblemente OSX y Python, pero me interesaría cualquier implementación.

¿Fue útil?

Solución

Hay una hilo muy similar en una lista de correo de Python que menciona href="http://en.wikipedia.org/wiki/COM_port_redirector#Virtual_Serial_Port" rel="nofollow noreferrer"> puertos COM de Windows y discute las capacidades de pseudo-tty de Unix . Si la aplicación (s) que desea utilizar le permiten escribir en un archivo específico dispositivo TTY, éste puede ser el camino más fácil. (Corto de pedir a los autores para proporcionar una API de plugins para lo que estamos tratando de hacer, o comprarse un $ 20 Auricular Bluetooth ratón GPS .)

¿Está utilizando OS X?

Hay un proyecto macosxvirtualserialport el código de Google que proporciona una envoltura gráfica en torno a algunos de las características de una utilidad llamada socat . Yo recomiendo echar un vistazo a socat si usted ve potencial en la ruta pseudo-tty. Creo que se podría utilizar para enlazar socat una tubería de un programa Python para una pseudo-tty.

La mayoría de las aplicaciones de Mac nativo será consultar IOServiceMatching para un dispositivo con kIOSerialBSDRS232Type, y dudo que un pseudo-tty se mostrará como un servicio IOKit.

En este caso, a menos que pueda encontrar un proyecto que ya ha puesto en práctica tal cosa, tendrá que implementar un controlador como se describe en este Como crear puerto COM virtual hilo. Si vas a la molestia de crear un controlador de dispositivo, que se quiere basar en IOKit debido a que la consulta probable IOServiceMatching. Puede encontrar el proyecto Apple16X50Serial mencionado en ese puesto en la parte superior de la de código abierto de Apple lista de códigos (ir a la página principal y recoger una versión del SO mayores si se desea orientar algo pre-10.6).

Si su aplicación es más útil con datos en tiempo real (por ejemplo, la aplicación RouteBuddy mencionado en la lista de correo Python hilo puede registrar posiciones actuales ), entonces tendrá que ir a buscar a sus actualizaciones de fuentes web (esperemos que apoyan largo de votación) y convertirlos a básica NMEA frases RMC. Usted no quiere hacer esto desde dentro de su código del controlador. En su lugar, dividir su trabajo en pedazos kernel-tierra y tierra-usuario que se pueden comunicar, y poner la menor cantidad de código posible en la parte del núcleo.

Si desea permitir que las aplicaciones de lectura y escritura a estos servicios web, lo mejor sería probablemente para simular un dispositivo de Garmin. Garmin tiene más o menos documentado su protocolo en el archivo IntfSpec.pdf incluye con sus href="http://garmin.com/support/commProtocol.html" SDK . Una vez más, usted quiere dividir todo lo que pude en código de espacio de usuario.

No he podido encontrar un proyecto o utilidad que implementa el lado del núcleo de una interfaz serie virtual basado en IOKit, pero me sorprendería si no había un escondido en algún lugar por ahí. Por desgracia, la mayoría de las respuestas que he encontrado a esa pregunta fuera así, con el desarrollador se le dijo a ponerse a trabajar escribir un kext.

Otros consejos

No estoy exactamente seguro de cómo llevar a cabo lo que estás pidiendo, pero que puede ser capaz de prestar una cierta penetración en cuanto a cómo es posible que iniciar para lograr que se haga. Así que aquí va:

Un dispositivo GPS aparece para la mayoría de los sistemas como nada más que un dispositivo serial - también denominado un puerto COM si usted está tratando con Windows, / dev / ttySx si estás en * nix. Por definición, el derecho específico de un puerto serie es para transmitir datos a través de un bus, a una cuadra a la vez. Por lo tanto, sería entonces el resultado lógico que si se quiere emular la presencia de un dispositivo GPS, debe reunir los datos que está consumiendo y lo puso en una corriente que de alguna manera actúa como un puerto serie activa.

Hay, sin embargo, algunas complicaciones es posible que desee considerar lo siguiente:

  • La mayoría de los dispositivos GPS no solo envían los datos de localización; también hay información sobre las ubicaciones de satélites, fijar la calidad, el rumbo, y así sucesivamente. Por otra parte, nadie ha hecho ninguna regla que dice que Tienes para hacer que todos los datos disponibles. Probablemente hay más a esto, pero voy a admitir que tengo que hacer más investigación en esta área de mi mismo.
  • No estoy seguro de lo rápido que puede recibir datos cuando se trata de Google Latitud, etc., pero cualquier retraso en la recepción, sin duda lugar a pausas visibles en su "puerto serie" 's flujo de datos. Una vez más, esto puede no ser tan grande como una complicación parece, ya que los dispositivos GPS son conocidos por los datos "ráfaga" a través del bus de todos modos, pero definitivamente me gustaría mantener un ojo en eso. Usted quiere asegurarse de que siempre hay un excedente de datos que vienen a través de, no una escasez.

En el camino también tendrá que transformar las coordenadas que recibe en frases GPS válida, también. Puede encontrar especificaciones para ellos, pero definitivamente me gustaría hacer amigos con el estándar NMEA -. A pesar de que se trata de una norma inadecuada, es el que todo el mundo parece estar de acuerdo en todos modos

Espero que esto le ayudó, al menos un poco. ¿Hay más detalles específicos a su problema que usted piensa que podría ser útil para responder a esta pregunta?

Tome un vistazo a Franson Puerta GPS que le permite conectarse a Google Earth, entre otras cosas (como la simulación de GPS y así sucesivamente). Es sólo para Windows, pero aunque creo que se podría obtener algunas ideas útiles de la misma.

No he estudiado mucho, pero ¿ha considerado el uso de de Skyhook SDK ? Puede ser que le proporcionará algo de lo que busca. Está disponible para todos los grandes escritorio y sistema operativo móvil.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top