Pergunta

É possível obter dados de localização de Google Gears, API do Google Gelocation ou qualquer outra API de localização da web (como Aguia de fogo) em tal formato que parece para outro software como um dispositivo GPS?

Ocorreu para mim lendo essas respostas Para minha pergunta sobre a descoberta de localização do WiFi, sobre o Super Usuário, de que, se eu pudesse imitar uma unidade GPS, muitos desses serviços da Web poderiam atuar como um GPS 'Poor-Mans' para um software menos útil que o requer.

É GPSD uma opção?

De preferência OSX & Python, mas eu estaria interessado em qualquer implementação.

Foi útil?

Solução

Existe um Tópico muito semelhante Em uma lista de mala direta do Python que menciona janelas portas com com COM virtual e discute os recursos pseudo-tty da Unix. Se os aplicativos que você deseja usar permitem digitar um arquivo de dispositivo TTY específico, essa pode ser a rota mais fácil. (Antes de pedir aos autores que forneçam uma API do plugin para o que você está tentando fazer ou comprando um Mouse GPS Bluetooth de US $ 20.)

Você está usando o OS X?

Existe um projeto MacosxvirtualSerialPort no código do Google que fornece um invólucro gráfico em torno de alguns dos recursos de um utilitário chamado Socat. Eu recomendo dar uma olhada no SOCAT se você vê o potencial na rota pseudo-tty. Eu acredito que você poderia usar o SOCAT para vincular um tubo de um programa Python a um pseudo-tty.

A maioria dos aplicativos Mac nativos consultará o IOSVICEMATCHING para um dispositivo com o KiosseialBSDRS232Type, e duvido que um pseudo-tty apareça como um serviço IOKIT.

Nesse caso, a menos que você possa encontrar um projeto que já tenha implementado tal coisa, você precisará implementar um motorista como descrito neste Como criar porta com compa virtual fio. Se você estiver indo para o trabalho de criar um driver de dispositivo, desejará baseá -lo no IOKIT por causa dessa provável consulta iServicematching. Você pode encontrar o projeto Apple16x50Serial mencionado nesse post no topo de Lista de código de código aberto da Apple (vou ao página principal e escolha uma liberação mais antiga do sistema operacional, se quiser segmentar algo antes de 10.6).

Se o seu aplicativo for mais útil com dados em tempo real (por exemplo, o aplicativo Routebuddy mencionado no tópico Python MailingList pode registrar posições atuais) Então você deseja buscar atualizações de suas fontes da Web (espero que elas apoiem a duas polegadas) e convertê-las para básico NMEA Frases RMC. Você não quer fazer isso de dentro do seu código de driver. Em vez disso, divida seu trabalho em peças de terra e terra do kernel que podem se comunicar e coloque o mínimo possível do código na parte do kernel.

Se você deseja deixar os aplicativos lerem e gravar esses serviços da Web, sua melhor aposta provavelmente seria simular um dispositivo Garmin. Garmin documentou mais ou menos seu protocolo no arquivo intfspec.pdf incluído com seus Interface do dispositivo SDK. Novamente, você deseja dividir o máximo possível no código do espaço do usuário.

Não consegui encontrar um projeto ou utilitário que implementa o lado do kernel de uma interface serial virtual baseada em Iokit, mas ficaria surpreso se não houvesse um escondido em algum lugar por aí. Infelizmente, a maioria das respostas que encontrei para essa pergunta era assim, com o desenvolvedor sendo instruído a ficar ocupado escrevendo um kext.

Outras dicas

Não sei exatamente como realizar o que você está perguntando, mas posso emprestar algumas dicas sobre como você pode começar Para fazer isso. Então aqui vai:

Um dispositivo GPS aparece até a maioria dos sistemas como nada mais que um dispositivo serial - também conhecido como uma porta COM, se você estiver lidando com Windows /dev /ttysx se você estiver no *nix. Por definição, o dever específico de uma porta serial é transmitir dados através de um barramento, um bloco por vez. Portanto, seguiria logicamente que, se você deseja imitar a presença de um dispositivo GPS, colete os dados que está consumindo e colocá -los em um fluxo que, de alguma forma, age como uma porta serial ativa.

Existem, no entanto, algumas complicações que você pode querer considerar:

  • A maioria dos dispositivos GPS não apenas envia dados de localização; Também há informações sobre locais de satélite, qualidade de fixação, rolamentos e assim por diante. Então, novamente, ninguém fez nenhuma regra dizendo você tenho Para disponibilizar todos esses dados. Provavelmente há mais nisso, mas admito que eu preciso fazer mais pesquisas nessa área.
  • Não tenho certeza da rapidez com que você pode receber dados ao lidar com o Google Latitude, etc., mas quaisquer atrasos no recebimento definitivamente resultariam em pausas visíveis no fluxo de dados da sua "porta serial". Novamente, isso pode não ser uma complicação tão grande quanto parece, porque os dispositivos GPS são conhecidos por "explodir" os dados do outro lado do ônibus, mas eu definitivamente ficaria de olho nisso. Você quer ter certeza de que sempre há um excedente de dados aparecendo, não uma escassez.

Ao longo do caminho, você também terá que transformar as coordenadas que recebe em frases GPS válidas também. Você pode encontrar especificações para elas, mas eu definitivamente faria amizade com o padrão da NMEA - mesmo que seja um padrão falho, é aquele que todos parecem concordar de qualquer maneira.

Espero que isso tenha ajudado você, pelo menos um pouco. Existem mais detalhes específicos para o seu problema que você acha que pode ser útil para responder a essa pergunta?

Dar uma olhada em Franson GPS Gate que permite que você se conecte ao Google Earth, entre outras coisas (como simular GPS e assim por diante). É apenas o Windows, mas acho que você pode obter algumas idéias úteis.

Eu não olhei muito para isso, mas você pensou em usar SDK de Skyhook? Pode fornecer um pouco do que você está procurando. Está disponível para todos os principais sistemas de computadores e sistemas móveis.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top