トップ地図アプリMap > 地図アプリMap開発記録

地図アプリMap開発記録

2025.12.21 国土地理院地図の低中ズームタイルの更新頻度を下げた

まず、zoom 18を基準として、zoom が1小さくなるにつれて、更新確率を半減した。 これにより、更新による画面のちらつきは感じられなくなった。

2025.12.20 オフラインレンダリング

gsiにあるタイルをosmにも含まれるように一括レンダリングを行った。

通常の地図表示では殆どのタイルが存在するため、表示は素早くなった。

スマホ   gsi   1.85GB   62,584tiles
スマホ   osm  11.09GB   68,016tiles
tablet   gsi   1.88GB   63,536tiles
tablet   osm   4.56GB   66,060tiles

低中ズームタイルの更新は殆どいらない。

例えば、zoom 18以上は確率1.0、zoom 17は確率 1/2、zoom 16は確率 1/4、 zoom 15は確率 1/8、zoom 14は確率 1/16、zoom 13は確率 1/32、... という風に 低ズームほど更新確率を下げるのが望ましいであろう。 これによって、通常は、パフォーマンスを損なうことなく更新が行われるであろう。

画面表示範囲の全タイルを更新するモードも用意しておきたい。

2025.12.19 Renderer::renderの引数 map を削除した

Map の static 変数は使用するが、オブジェクトの変数は使わない。 バッググラウンド更新でも同じ renderメソッドを使う。

2025.12.17 国土地理院地図タイル更新

まず、保存されたタイルを表示する。 現時点では半年以上たっていたら、サーバーの更新時間をチェックして、更新されていた場合 ダウンロード更新する。更新されていなかった場合、保存タイルの時刻だけを更新しておく。 これにより、再び半年たったとき、更新処理を行う。

サーバー上のタイルの更新時間が変わっていても実際は中身は同じケースが多い。 同じでも、描画をしなおすと画面がちらつく。 したがって、バイナリチェックを行い、変化がない場合、更新時間の変更だけでもよい。 しかし、日常利用が OSM地図が中心のため、当面、この対策は保留する。

2025.12.17 タイル更新、表示機能は概ね完成した

パフォーマンスについては5~10万タイルほどで判断する。

スマホ   gsi   1.83GB   62,413tiles
スマホ   osm   1.09MB    5,110tiles
tablet   gsi   1.87GB   63,405tiles
tablet   osm    571MB    5,899tiles

2025.12.17 更新(download/rendering)は最後に要求したものを先に実行するように変更した

画面からはずれたタイルは後回しでよい。

2025.12.15 町田の芹が谷公園の東南で、崖(閉ループ)のアイコンの向きが逆になっている。

標準OSM地図は正しいので、データの誤りではない。閉ループでない場所は正しく描画されている。

全ての閉ループを機械的に並び替えているのが誤りである。 natural=wood のようなエリアタグの場合は閉ループにする必要があるが、natural=cliffのような ラインタグの場合は例え閉ループでも polygon(type=2) とはせず、line(type=1)とする。

以前はこのようにしていたと思うが、現時点のプログラムではこの例外処理が漏れているのであろう。

Parser.java の修正がいる。現在は、最初に polygon 扱いにしてからタグ処理をしている。 polygon処理の前にタグ処理を移す。natural=cliff、man_made=embankment などは閉ループであっても、type=1 とする。

地図表示システムも 閉ループを polygon扱いとしており、修正は簡単ではない。 反転したことをフラグで記憶しておく方法もある。時間をかけて対策を考える。


reversedフラグを導入した。Parser.javaでは、polygon を反転した場合、この reversed フラグをオンにしておく。 地図レンダリングアプリではこのフラグがオンのときは、180度回転したアイコンを並べて描画するように 変更した。 この方法では Parser.java、地図アプリとも修正はシンプルで済んだ。

2025.12.12 zoomを変えたときレンダリングが起きないことがある

tile.zoom が更新されていないようだ。例えば map.zoom = 16、tile.zoom = 15。

zoom 14 から、すばやく 15、16 と変えたとき、map.zoom = 16、tile.zoom = 15 が起きるので、 このことは異常ではない。zoom 16 のタイルが描画されないのは問題であるが、最近はこの現象はあまり経験して いないので、様子見とする。

2025.12.11 森林の一部が描画されない

気づいたのは山梨県と神奈川県の境界付近の一部だけ。まずは、その領域の osm_id を調べよう。

osm_idは 967900(relation: natural=wood, type=multipolygon) であることが分かった。

OSM Inspectorにより、outer polygon の一部の way の role が inner になっていた。 これを outer に訂正した。これによって、正しく描画された。

2025.12.09 道路の描画順序が間違えていた

見たところ、ソーティングを忘れたわけではなさそう。

zorderの初期設定をコメントしていた。

2025.12.09 森林が一部しか描画されない

マルチポリゴンが描画されていないようだ。

順に実装しており、マルチポリゴンの一部は未実装のため、コメントアウトしていた。 この関係を実装して解決した。

2025.11.14 開発に着手した

リファレンス