タイル地図表示の仕組みをなるべくシンプルにしたい。まずは、SDカードに保存されたタイル画像を表示する。 その後、バックグラウンドでファイルが古いことが分かれば、最新のタイル画像をレンダリングあるいはダウンロードする。 レンダリングやダウンロードには時間がかかる。 その間は仮のファイル名として、準備ができた段階で、旧ファイルを削除して、仮の名を正式の名前に変更する。 そして、地図を再描画する。
地図のスクロールでも再描画が起きる。同じタイルに対してファイル更新リクエストは要らない。
Map4のマルチポリゴンのOSMバイナリレコードは以前より少し変更していた。 Map5では当面は Map4と同じとするが、いずれは、 以前のように、ポリゴン毎のノード数をまとめて前に置き、その後に全ノードの座標値データを置くようにしたい。 その方がプログラムが分かりやすくなる。
例えば、コンビニだけとか郵便局だけというように、指定した種類のアイコン/名称だけを地図に表示する 機能を設けたい。デフォルトでは全ての地物をレンダリングするため、タイル地図画像ファイルの保存は、 2種類とする。全てを描画したタイルとアイコン/名称なしのタイルの2種類とする。
アイコン/名称を描画するためだけのファイルは小さくてすむはず。 全体をメモリに読み込める大きさならば、全体を一つのファイルまたは数個のファイルとする。 フリーワード検索と共用する。
Map4の場合、レンダリングを二つに分けている。地のタイル画像ファイルのみを保存している。 地のタイル画像ファイルがあっても、OSMバイナリレコードファイルの読み込みや空間検索は必要となるため、 アイコン/名称の描画に時間がかかる。
自作地図システムは使い始めてまもなく10年になる。当初は japan.osm.pbf を osm2pgsql を使って、 PostgreSQL/PostGISに取り込み、Mapnikを使ってタイル画像ファイルを作成して、自作の地図ビュアーで 地図を表示していた。
地図ビュアーはC#によるWindows PC/Tablet版 から Anroid Javaによる Androidスマホ/Tablet版に変わった が、方式的には継承しているところが多い。
タイル画像の作成方法はWindows PC/Tablet版の途中から Mapnikの使用をやめ、 自作プログラムでレンダリングするようになった。同時だったか、少したってから PostgreSQL/PostGIS の使用もやめた。
10年前は osm2pgsql、Mapnik は Windows PCで動いた。しかし、バージョンアップにより、 Windows では動かない時期があった。現在、どうなのかは知らない。
そのため、Virtual Box 上の Ubuntu で osm2pgsql、Mapnik を動かした。 Mapnik はコンパイルからインストールを行う時期もあり、そこで使うフリーソフトが関係し、 バージョンアップが大変だった。
また、Mapnikによるレンダリングはカスタマイズが一苦労であった。
個人利用の地図アプリにこれほどの苦労はレンダリングを完全な自前プログラムに変更した。 C# はレンダリング機能も充実している。Java はやや劣るが、Mapnikに近いものを実現できる。 Mapnikと異なり、フリーソフトを一切使用していないため、インストールやバージョンアップの苦労はない。
しかし、頭の体操として、自作アプリの更新を続けている。
山を歩くときは等高線を見たくなる。 これまでは、OSM地図(等高線がない)を国土地理院地図(等高線がある)に切り替えていた。 その都度切り替える不便さを解消するために、自作OSM地図に等高線を描画することを企てた。
ネット検索で CORNEC[1] が見つかった。国土地理院の標高データ[2]を使って、 思ったより、簡単に、等高線が描画できた。
行政境界線の数値データは国土数値情報ダウンロードサイトからダウンロードできる。 日本の場合、OSMでは当初、このデータをインポートしたようである。 しかし、今は、商用禁止が明示されていることから、OSMへのインポートは禁止されている。
個人利用は問題ないので、とりあえず、東京都と神奈川県のファイルをダウンロードしてみた。
元の xmlファイルのサイズは 77.3MB、37.9MB であったが、境界線を描くためのバイナリファイルは 1.84MB、983KB となった。
ここに含まれるのは市区町村の境界線データである。横浜、川崎などの区の境界線データも含まれている。
精度については都市計画区域内では平面位置の誤差が2.5m以内、都市計画区域外では25m以内となっている[5]。 OSMの境界線と比較すると、市街地でもいたるところで 10~30m程度の誤差がある。行政境界線の誤差は標準偏差 というただし書きがあるため、部分的にたとえ、50~100mの誤差があっても、標準偏差は 2.5m以内に収まる可能性が高い。
OSMの多くは、インポート後に、マッパーが手作業で修正したものと思われる。OSMの方に何百mもの誤りがある所もあった。 これはインポートではなく、マッパーが境界線を誤解したものと推察される。
OSMの場合、誤解による誤りや誤まって境界線が消されることがあるが、全体としては、国土数値情報よりも精度が高いと言える であろう。
OSMの場合、地域によるが、大字、小字に相当する境界線も多く含まれているため、境界線レコードの総サイズは大きいが、 市区町村(ここでの区は東京都の23区)および大きな市にある区に限れば、日本全体でもメモリに常駐できるほどの大きさである。 一般のOSMレコードのようにタイル単位に分割する必要はない。