0

より具体的には、Web サーバー (Linux/Raspberry Pi) で実行されている GPSd プロセスから現在/最新の出力を取得し、ライブの緯度/経度、速度、コースを表示したいと考えています。

gpspipe の出力を追跡し、最新のデータを取得する (jquery) を呼び出すことができる CGI スクリプトを作成しようとしましたが、それは少し遅く、呼び出しごとに最大 5 秒かかります。

数秒ごとに「top -b -n 1」を実行し、探しているデータの出力を解析する CGI スクリプトを呼び出すのと似ています。

誰かがもっと効率的な方法を持っていると思いました。

4

2 に答える 2

0

GPS ユニットが値を変換するのにかかる時間 (通常は約 1 秒程度) に応じて、GPS を継続的に読み取り、共有メモリまたはファイルに値を保存し、Rasp を呼び出すときにそれらの値を取得する小さなプログラムを実行できます。[Time+Geolocation] を取得すると、アプリケーションによっては役立つ場合があります。

より応答性の高いものが必要な場合は、GPS 変換が行われた後にロング ポーリングを使用できます。そうすれば、複数のクライアントまたはサービスを登録して、GPS 変換 Web サービスをリッスンすることができます。

于 2016-04-07T19:01:35.453 に答える
0

あなたに合ったPython 2.7-3.5 gpsdクライアントがあります。必要な方法とタイミングでデータを取得するために使用するスレッド アダプターがあります。4行で:

from agps3threaded import AGPS3mechanism

次に、糸の三頭政治に従事し、

agps_thread = AGPS3mechanism()  # This instantiate the mechanism, as I believe it's called.
agps_thread.stream_data()    #  Stream the data from host, port, devicepath.
agps_thread.run_thread()  #  Iterate stream as a thread with throttle control for empty look ups.

gpsd に期待されるほとんどの接続、通信、および制御を可能にする 4 行のコード。

while True:  # All data is available via instantiated thread data_stream attributes. Confur
             # lines #140-ff of the client /usr/local/lib/python3.5/dist-packages/gps3/agps.py
      print('----------------')
      print(                   agps_thread.data_stream.time)
      print('Lat:{}   '.format(agps_thread.data_stream.lat))
      print('Lon:{}   '.format(agps_thread.data_stream.lon))
      print('Speed:{} '.format(agps_thread.data_stream.speed))
      print('Course:{}'.format(agps_thread.data_stream.track))
      print('----------------')
      sleep(60)  # Sleep, or do other things for as long as you like.

括弧内に引数がない場合、スレッド化されたクライアントはデフォルトでhost='127.0.01'port=2947gpsd_protocol='json'、およびusnap=0.2に設定され、それぞれの空のソケット ルックアップ後に 10 分の 2 秒のマイクロ ナップという適切なデフォルトが設定されます。プロジェクトの残りの部分はDESCRIPTION.rstにあるか、ファイル自体に文書化されています。

gpsd の共有メモリ セグメントへの Python インターフェイスを探している場合は、それも利用できます。

于 2016-04-08T01:15:16.387 に答える