国土地理院 SVG 地図について

これまでのあらすじ

国土地理院 SVG 地図についてというサイトを作りました。

http://d.hatena.ne.jp/hfu/20070728#1185664728

注記が隣のタイルに流れない

この間,ある程度の数の国土地理院 SVG 地図を見てきました。いくつか気づいた点がある中で,注記が隣のタイルに流れない問題について取り組んでみましょう。

途切れた注記を持つタイル

この国土地理院 SVG 地図を見てみてください。「御在所ロー」と書かれています。しかし,ソースを見るとわかるのですが,この注記は本来「御在所ロープウエイ」です。(ちなみに,こういうとき,ウェイなのかウエイなのかは結構チェックポイントです。キヤノンみたいなもんだと思います。)
しかし,この注記は,隣のタイルであるこっちの国土地理院 SVG 地図には入ってくれないのです。

どうすれば良いのか?

では,どうすれば良いのでしょうか。

コンテナ方式では注記は途切れてしまう

頬のヒゲ抜くよりピンポイント脱毛では,

個々の地図のタイルのファイルは、図のようにそれらを纏める(タイリングする)SVGファイルによって、一枚の地図に合成されることにします。

http://blog.svg-map.com/2007/05/post_8a9a.html

としていますが,残念なことに,この方法では注記は途切れてしまうのではないでしょうか。image 要素でタイルの枠をきっちりはめ込んでしまっているからです。

注記データを重複させることはプラクティカルではない

一方で,両方のタイルに注記データを持たせることは,プラクティカルではない気もします。
一つには,データを重複させることによるデータセットの総量の増加が馬鹿にならなさそうであること,もう一つには,重複させた注記がうまく重ならない処理系もあるはずで,その場合には状況は非本質的な嫌らしい方向にむかってしまうためです。
一つ目の理由について。
重複させなければならない注記の発生確率は,このタイルの大きさではかなり高いでしょう。確率は,タイルの幅・高さ,注記の幅・高さを変数ウとする関数になるでしょう。簡単に計算してみたほうがいいのですが,今日は見送っておきます。
二つ目の理由について。
複数のタイルに重複させて書いた注記がぴったり重なるかどうかは,フォントだとか処理系の微妙な処理の都合だとかに依存してしまう可能性が感じられます。うまく重ならない処理系が一つでもあると,注記データを重複させるという工夫は,余計な失敗したお世話になってしまいます。

SVG データを JavaScript オブジェクトにして可塑的に使え

JavaScript が使える PC 上のブラウザを想定環境とするならば,コンテナの方法ではなく,SVG 要素をスクリプトを使って随時追加していく方法が考えられます。このようにすれば,コンテナ法の問題である,image 要素の境界による注記の途切れは回避できるはずです。この方法,carto.netの人たちが好んで使う方法ですね。SVG 要素を必要な大きさに分割して,XMLHttpRequest で持ってくる方法であると理解しています。
具体例はこちら:
Yosemite Hiking Map, Trail Information
XMLHttpRequest を使う方法では,same origin 制約の問題があり,利用の幅が狭くなります。そこで私は,データがいろいろなところに流しやすいように,国土地理院 SVG 地図を JavaScript オブジェクト化して使いやすくしてみたいと思います。次回に続く。