本文へスキップ

Z-Maps Car

機能

運転画面に表示される内容と、設定で変更できる項目。

運転画面

走行中に画面に出ているもの

運転処理はすべて Activity ではなくフォアグラウンドサービスにあります — ヘッドユニットでは Activity はいつでも止められるからです。バックギアに入れればカメラが画面を占有し、電話が来れば通話アプリが前面に出ます。走行記録と警告はそれを越えて生き延びる必要があります。

速度は深刻度に応じて色が変わります

制限内は白、余裕幅の中は黄、超過はオレンジ、大幅超過は赤。文字を読まなくても、ひと目で分かります。

本物の標識に見える制限速度表示

白い円に赤い縁 — 路上の R.127 標識そのままです。アプリが推定した値には下に「~ 推定値」が付きます。

GPS の状態は常に見えます

GPS 待ち、GPS 良好、あるいは速度をドライバからではなく測位から算出中 — 表示の数値が何に基づくのか常に分かります。

描画中の範囲に対する道路一致

RoadMatcher は現在描画されている道路データを問い合わせ、走行中の区間、その名称と種別を判定します。

車内から制限速度を直せます

推定が外れている場所では制限速度の編集を開いて正しい値を選ぶと、その地点の周辺として記憶されます。「既定値に戻す」で取り消せます。

走行を計測し、そして残します

距離、走行時間、平均速度と最高速度、超過回数が走行中に積み上がり、終了時に履歴へ書き込まれます。

設定

あなたの車と運転に合わせて

余裕幅

制限速度にこの値を足した速度を超えて初めて警告します。GPS に数 km/h の誤差があるため初期値は +5 km/h です。0 にすると鳴りっぱなしになります。

音声かビープ音か

端末にベトナム語の音声がない場合はビープ音に切り替わります — vi-VN の TTS エンジンを持たないヘッドユニットは少なくありません。

推定した制限速度を切る

オフにすると、制限速度データのない道路では推定値に対して警告するのではなく、警告そのものを出しません。

地図スタイル

詳細に見るなら Liberty、夜間走行なら Dark、落ち着いた淡い画面なら Positron。

画面を常時点灯

走行中に画面が消えてしまうヘッドユニットがあります。この設定で走行中ずっと点灯させます。

地図キャッシュを消去

走った道を最大 512 MB までキャッシュします。空き容量が厳しくなったら設定から消去してください。

走行履歴

設定から開きます。総回数、総距離、総時間に加え、各走行の平均速度、最高速度、超過回数。1 件ずつでも全件でも削除できます。

修正した制限速度を消去

上書きした数値をすべて破棄し、地図データと推定値に戻します。

2 つはアプリの推定であり、法律ではありません

どちらも標識に出る数値に直接影響するため、ここで明記します。

  • 市街地の判定OSM は R.420 / R.421 の標識を記録しないため、地図の landuse レイヤーから推定しています。標識を読んだものではなく、あくまで推定です。
  • 道路種別による上限法律上は市街地外の対面通行路なら幅 3 m の村道でも 80 km/h が許されます。本アプリは道路種別で頭打ちにするため、法定より低い数値を出すことがあります — 遅い警告より早い警告のほうが安全だという判断で、意図的にそうしています。

実際に起きた 3 つの問題

難しかった箇所と、その扱い方

走っているのにヘッドユニットが速度 0 を報告する

多くの GPS モジュールは $GPGGA しか解析せず $GPRMC を読まないため、Location.hasSpeed() は true を返しながら値は 0 のままになります。これを信じると速度計は永久に固まったままです。

SpeedEstimator は 2 つのソースを並行して動かします — ドライバの報告値と、連続する測位から求めた速度です。「移動中」の標本が 8 つほど続いてもドライバが 0 のままなら、ドライバが壊れていると判断して恒久的に切り替えます。この場合の単体テストもあります。

location/SpeedEstimator.kt

公開タイルは maxspeed タグを持たない

OpenMapTiles スキーマには maxspeed の項目がなく、生の OSM ではタグ付けされている道路であっても失われます。無料タイルでは制限速度のほぼ 100% を推定する必要があります。

VietnamSpeedRules が乗用車と 3.5 t までの貨物車について通達 31/2019/TT-BGTVT を実装しています。市街地では 50〜60 km/h、市街地外では中央分離の有無に応じて 80〜90 km/h。推定値はすべて「~ 推定値」を付けて表示します。

speedlimit/VietnamSpeedRules.kt

煩わしい警告は 10 分でアプリを切られる

GPS のゆらぎで点滅する警告や、同じ文句を繰り返す警告は、速度警告アプリを切られて二度と戻らなくする最短経路です。

OverspeedEngine は 3 km/h のヒステリシス、重大度別に 30/20/12 秒の間隔、既定 +5 km/h の余裕幅を持ちます — ただし段階が悪化したときは即座に話します。VoiceAlerts は一時的なダッキングのオーディオフォーカスを要求するので、音楽は下がってから元に戻ります。

alert/OverspeedEngine.kt

ご自身の車で試してください

APK は CPU アーキテクチャ別に分かれており、最小構成は 10 MB です。