1年余り前から歩数管理に SQLite を使用している。 規模が小さいことも関係しているであろうが、問題なく動作している。
新Mapアプリでは、GPSログ管理にも SQLiteを使い、プログラムを簡素化したい。
日別のGBSログファイルはこれまで通りとする。
データベース上の項目は以下のようにする。例えば、2026年1月18日 午後1時27分15秒の場合、 date=20260118、time=132715 とする。
step(歩数)はGPSログ表示では、徒歩か車(電車、バスなど)かの区別に使う。 室内自転車を漕いでいるときの記録も残るので、必要とあらば、日別の時間や歩数も算出できる。
CREATE TABLE gpslog (
date INTEGER,
time INTEGER,
lon INTEGER,
lat INTEGER,
step INTEGER,
type TEXT
)
数年分の過去ログを登録すると 2,165,676行、64.8MB となった。
下記、二つの空間検索を実行する。
select * from gpslog where (lon between 1360560619 and 1362290950) and
(lat between 350305590 and 351743760);
select * from gpslog where (lon between 1385238650 and 1392379750) and
(lat between 348814250 and 358629070);
初回の検索1は1秒強、そのあとは 検索1は 16行, 実行時間 221ミリ秒、検索2は 27行, 実行時間 221ミリ秒となった。
create index lonindex on gpslog(lon);
ファイルサイズは 91.7MB(+42%) に増加した。
検索1は 16行, 実行時間 11ミリ秒、検索2は 27行, 実行時間 48ミリ秒となった。
別途、lat および date にもインデックスを付与して検索時間を測定した。 ファイルサイズは更に40%以上増加するだけで、空間検索時間の短縮効果は殆どなかった。
期間としては約11年分の GPSログがある。Windowsタブレットの時は、主に出かけたときの記録だけであるが、 スマホになってからは基本的には毎日の記録がある。 コロナ禍では、殆ど遠出をしなかったため、記録のない期間もある。
自宅近くの GPSログデータは膨大なため、過去ログの表示に数秒かかるが、自宅から遠く離れた位置では 表示は瞬時である。
今のデータは少々間引きすぎのようである。精度を上げて、ファイルサイズが数倍に増えても、 実用上問題はないであろう。
全GBSログデータベースとは別に、遠出だけのデータベースを作れば、遠出の過去ログ表示は極めて迅速に なるだろう。
精度を上げて、パフォーマンスが問題になったときは、遠出だけのデータベースを作ることにする。
高尾山の過去ログを表示使用としたとき、多分、どこかで null エラーが起きたのであろう。 アプリがダウンした。
水戸近辺に一泊旅行したとき、ボタンは二日分表示されたが、二日目のGPSログが表示されない。 一日目のログにも精度の問題であろうか、間違いがある。
先日、兵庫県に出かけたときも、GPSログ表示の精度が前システムよりかなり悪かった。 データ量を絞り込みすぎが原因かもしれない。あるいは、何か、別の原因かもしれない。
いずれにせよ、問題がいくつか残っている。
色の数よりボタンの数が大きいときに対応していなかった。
修正前 Colors[n]) 修正後 Colors[n%Colors.length])
1日目(4月20日)のレコードは 8357行あるが、2日目(4月21日)が 98行しかない。
4月21日のレコードの先頭は実際は前夜のもので、データベースへの登録プログラムが 前夜(20日)の98行を 21日分として登録したものであろう。21日分が捨てられたのであろう。
このような場合、前日の深夜のレコードは無視してよい。
精度を上げることと、その日の先頭に前日深夜のデータがあればこれを無視するように改変する。 ホテルに泊まった日に、1日中GPSログをとり続けるため、起きるのであろう。 現在のプログラムでは自宅にいる場合、動きがなくなれば GPSログをとらないので、このような問題はおきない。
見つかったGPSログデータを下に示す。2021.3.26 から 2022.1.27 および 2023.7.15から2024.9.21 のデータは見つからない。
2023年末に昭和記念公園や高尾山に行ったが、そのGBS記録が見つからない。
Windowsタブレットから Androidスマホへの転換中であり、 部分的にはGPSログデータを採っていたが、スマホには見当たらない。 どこかにセーブしているかもしれない。見つかれば取り込むが、遠出は殆どないはず。
一部の区間はダブっている。これは、改造前と改造後のアプリを同時に動かしているからである。 一方を消してもいいが、ダブっていても不都合はさほどないので、ダブって読み込んでおく。
一時、Androidタブレットを持ち歩いていたので、実質的に有効なGPSログデータは5日分だけある。
/storage/9C33-6BBD/GIS/WT/gps_log_tb 2015.04.01~2021.03.25 WT /storage/emulated/0/GIS/gpslog 2022.01.27~2023.04.20 SP /storage/9C33-6BBD/MapData/SP/gpslogs 2023.04.15~2023.07.14 SP /storage/9C33-6BBD/Map5/SP/gpslogs 2024.09.22~2024.11.06 SP /storage/9C33-6BBD/GIS/SP/gpslogs 2024.11.02~現在 SP /storage/9C33-6BBD/GIS/AT/gpslogs 2024.11.08~2025.3.26 AT (有効データ5日分のみ)
自宅外での間引きはやめた。dateとlonにインデックスを付与したときの ファイルサイズは 205MB になった。
2024.9.22 の前のファイルでエラーがある。SPであっても歩数データがないからだろう。 この対策をしてデータ登録をやり直した。ファイルサイズは 218MB になった。