7

Google GearsGoogle Gelocation API、またはその他のWebロケーションAPI(Fire Eagleなど)から、GPSデバイスとして他のソフトウェアに表示されるような形式で位置データを取得することは可能ですか?

スーパーユーザーでのWiFi位置検出に関する質問に対するこれらの回答を読んだときに、GPSユニットをエミュレートできれば、これらのWebサービスの多くが「貧乏人」のGPSとして機能し、他の方法ではあまり役に立たないソフトウェアを必要とする可能性があることに気付きました。それ。

GPSDはオプションですか?

できればOSXとPythonですが、どんな実装にも興味があります。

4

4 に答える 4

4

Pythonメーリングリストには、Windows仮想COMポートについて言及し、Unixの疑似tty機能について説明している非常によく似たスレッドがあります。使用するアプリで特定のttyデバイスファイルを入力できる場合は、これが最も簡単な方法です。(作成者に、実行しようとしていることのためのプラグインAPIを提供するように依頼するか、20ドルのBluetooth GPSマウスを購入することはできません。)

OS Xを使用していますか?

Googleコードにプロジェクトmacosxvirtualserialportがあり、 socatと呼ばれるユーティリティのいくつかの機能のグラフィカルラッパーを提供します。pseudo-ttyルートに可能性がある場合は、socatを確認することをお勧めします。socatを使用して、Pythonプログラムから疑似ttyにパイプをリンクできると思います。

ほとんどのネイティブMacアプリは、kIOSerialBSDRS232Typeを備えたデバイスをIOServiceMatchingにクエリしますが、疑似ttyがIOKitサービスとして表示されるとは思えません。

この場合、すでにそのようなものを実装しているプロジェクトが見つからない限り、この仮想COMポートスレッドの作成方法で説明されているようにドライバーを実装する必要があります。デバイスドライバーを作成する際に問題が発生する場合は、IOServiceMatchingクエリが発生する可能性があるため、IOKitに基づいてドライバーを作成することをお勧めします。その投稿で言及されているApple16X50Serialプロジェクトは、Appleのオープンソースコードリストの上部にあります(10.6より前のものをターゲットにする場合は、メインページに移動して古いOSリリースを選択してください)。

アプリがリアルタイムデータで最も役立つ場合(たとえば、Pythonメーリングリストスレッドで言及されているRouteBuddyアプリが現在の位置をログに記録できる場合)、Webソースから更新をフェッチして(できればロングポーリングをサポートしている)、それらを基本的なNMEAに変換する必要がありますRMCセンテンス。ドライバーコード内からこれを実行することは望ましくありません。代わりに、作業をカーネルランドとユーザーランドに分割して通信できるようにし、カーネル部分にコードをできるだけ少なくします。

アプリにこれらのWebサービスの読み取りと書き込みの両方を許可する場合、最善の策はおそらくGarminデバイスをシミュレートすることです。Garminは、多かれ少なかれ、デバイスインターフェイスSDKに含まれているIntfSpec.pdfファイルにプロトコルを文書化しています。繰り返しになりますが、できるだけ多くをユーザースペースコードに分割する必要があります。

IOKitベースの仮想シリアルインターフェースのカーネル側を実装するプロジェクトやユーティリティを見つけることができませんでしたが、どこかに隠れているものがなかったら驚きました。残念ながら、その質問に対する私が見つけた答えのほとんどはこのようなもので、開発者はkextを書くのに忙しくするように言われました。

于 2009-11-12T07:55:45.360 に答える
2

あなたが求めていることをどのように達成するかは正確にはわかりませんが、あなたがそれをどのように達成し始めるかについての洞察を与えることができるかもしれません。だからここに行きます:

GPSデバイスは、ほとんどのシステムでシリアルデバイスとして表示されます。Windowsを使用している場合はCOMポート、*nixを使用している場合は/dev/ttySxと呼ばれます。定義上、シリアルポートの特定の役割は、一度に1ブロックずつバスを介してデータをストリーミングすることです。したがって、GPSデバイスの存在をエミュレートする場合は、消費しているデータを収集して、何らかの形でアクティブなシリアルポートのように機能するストリームに入れる必要があります。

ただし、考慮したいいくつかの問題があります。

  • ほとんどのGPSデバイスは、位置データを送信するだけではありません。衛星の位置、修正品質、方位などに関する情報もあります。繰り返しになりますが、すべてのデータを利用可能にする必要あるというルールは誰も作成していません。これにはおそらくもっと多くのことがありますが、私はこの分野でもっと研究をする必要があることを認めます。
  • Google Latitudeなどを処理するときにデータをどれだけ速く受信できるかはわかりませんが、受信が遅れると、「シリアルポート」のデータストリームに目に見える一時停止が発生することは間違いありません。繰り返しになりますが、GPSデバイスはとにかくバス全体でデータを「バースト」することが知られているため、これは見た目ほど大きな問題ではないかもしれませんが、私は間違いなくそれを監視します。不足ではなく、常に過剰なデータが発生するようにする必要があります。

途中で、受け取った座標も有効なGPS文に変換する必要があります。それらの仕様を見つけることができますが、私は間違いなくNMEA標準と友達になります-それは欠陥のある標準ですが、とにかく誰もが同意しているようです。

これが少なくとも少しはお役に立てば幸いです。この質問に答えるのに役立つと思われる、問題に固有の詳細はもうありますか?

于 2009-11-05T14:29:55.090 に答える
1

とりわけGoogleEarthに接続できるFransonGPSGateをご覧ください(GPSのシミュレーションなど)。ウィンドウだけですが、そこからいくつかの有用なアイデアを得ることができると思います。

于 2009-11-12T07:34:11.893 に答える
0

あまり調べていませんが、SkyhookのSDKの使用を検討しましたか?それはあなたが探しているもののいくつかをあなたに提供するかもしれません。すべての主要なデスクトップおよびモバイルOSで利用できます。

于 2009-11-11T17:19:27.110 に答える