Open2

pri: 経路の空間・時間インデックスを静的に張る

okuokuokuoku

... なんかすごい難しいことに思えるが、やろうとしていることは単純で、

  1. GPS(GNSS)で記録した経路データをGoogle Plus Code(数メートル四方のメッシュ)単位、または1000点単位に区切る
  2. 区切った経路に256bitsのIDをSHA256で振って、jsonに保存する
  3. 区切った経路をそれぞれ 空間インデックス および 時間インデックス に保存する

空間インデックス

空間インデックスは、Plus Code (open location code) の番号が振られた矩形内に所属するオブジェクトのリストとなる。オブジェクトは常に 追加日時でソートされる 。オブジェクトは更新されないことが前提となっている。

オブジェクトは100オブジェクト毎に ページ を構成し、1ページ毎にjsonファイルが用意される。

時間インデックス

時間インデックスは、絶対時刻(UTC)を1時間単位に区切り、その区間に所属するオブジェクトのリストとなる。経路情報の場合、1オブジェクトが数秒〜数分の長さを占めることになるため1オブジェクトが複数の時間インデックスに所属する可能性がある。

オブジェクトは100オブジェクト毎に ページ を構成し、1ページ毎にjsonファイルが用意される。

インデックスのインデックス

... う〜ん。。良いアイデアが無い。。パスを適当に区切るので、その区切り毎に "下位に1つでもオブジェクトが存在する区切りのリスト" を保持するくらいか。。?

作成するファイルのまとめ

  • 8R72J2XJ+85 に対応する1ページは <root>/loc/8R/72/J2/XJ85/0.json
  • 2023-03-21T09:42:52Z に対応する1ページは <root>/tim/2023/03/21/09/0.json
  • 空間インデックスのインデックス <root>/loc/index.json<root>/loc/8R/index.json
  • 時間インデックスのインデックス <root>/tim/index.json<root>/tim/2023/index.json
okuokuokuoku

GPXファイルの分割

試しに千葉県に行ったとき https://twitter.com/priokuoku/status/1638160123121242115 の経路ログを分割してみる。収録はAndroidのGPSLogger https://github.com/BasicAirData/GPSLogger で行っていて、 lat lon ele の座標と time のISO時刻の他に、 sat としてGPS衛星の数も記録しているのでそちらも残すことにする。

適当にスクリプト書いて:

https://github.com/okuoku/diaryproc/commit/5195e3449c08efe10ecaef434ef9dfbec6fcc138

こんな感じ。

https://gist.github.com/okuoku/aa8c5bfa68031bde70881e365d64daaa

思ったより細切れになるな。。自動車とかの経路は扱わないから別にこれでも良いけど、これ全ての点で隣接するセグメントを含むように間を補完しないとダメかもな。。