ホームページにIE5.5でもPS3でも動く地図窓を組み込もう!

ホームページにInternet Explorer 5.5でも、PlayStation 3でも動作してしまう地図窓を組み込む(埋め込む)方法を紹介します!

ひととおり読んでからの利用を推奨しますが、手っ取り早く組み込みコードが欲しい人は呪文じぇねれーたーへどうぞ。

他の呪文じぇねれーたーを探す

地図窓とは

地図窓とは、ホームページやブログなどに地図を埋め込み表示できる便利なツールです。
場所によってインラインマップ、埋め込みマップ、組み込み地図ほか様々な名称で呼ばれていますが、ここでは俗称の「地図窓」で統一します。

これはサンプル画像ですので動作しませんが、こういう形式のフレームで、地図窓を埋め込めます。
検索バー、座標表示バー、表示範囲の中心を示す十字は非表示にもできます。

主要な地図窓の問題点

大手商用サービスも地図窓を提供していますが、どれも無料で利用するには参照(呼び出し)回数に制限があったり(特にGoogle Maps)、古いブラウザーや特殊なブラウザーで動作しない問題を抱えています。
有料のプランに申し込めば参照制限をそれなりに緩和できたりしますが、それでも無制限ではありません。
IE5.5やPlayStation 3で閲覧しようとしても表示されず、地図の表示に対応しているブラウザーで閲覧しても、地図の閲覧者が多いと表示されないのです。
おまけに多くのマップサービスは印刷しての利用を許可していません。
つまり必然的に、印刷物とホームページで雰囲気を統一したくても、それぞれ異なるマップを用いなければならなくなってしまいます。
それでは何のために埋め込んだ地図なのか全くわかりません。
そこで、本ホームページでは、この問題を鮮やかに解決するための代案を紹介しています。

代案

ここで説明する地図窓の組み込みには、例によって総合情報通信技術研究機関 ADS(通称ソフトハウス ADS、ADS)と呼ばれるNGO、民間の工学研究機関がサービスしているシステムを流用します。

ツイ窓の一件で反省しまして、今回は最初に了承を頂きました。
利用した結果について自己責任であることを条件に、黙認して頂けるそうです。

ADS式地図窓の長所

ADS式地図窓の短所

組み込み方法

ADSのマップ・システムのURL(http://ads.selfip.com/map/)に対し、組み込みたい地図窓の仕様をクエリに記述して投げると、仕様に沿った地図が出力されます。
サーバーへクエリを渡す手段には様々な方法がありますが、ここで解説するクエリとは、URLの末尾に付与する文字列のことです。
URLの末尾に?を加え、その後に名=値の形式(いずれも半角)でデータを渡します。
各データは半角の&で区切り、例をあげると次のようになります。

http://ads.selfip.com/map/ ? x=137.0175&y=35.0573&mk=1
クエリ

この場合、x=137.0175&y=35.0573&mk=1がクエリ文字列です。
つまり、この例では、要素xの設定が137.0175、要素yの設定が35.0573、要素mkの設定が1ということになります。

データを受け取ったADSのマップ・システムが、クエリで指定した地図を、クエリで指定した仕様に沿い、PlayStation 3でも正常に表示できる形式で出力してくれます。
ホームページ製作者は、それをホームページ内の地図窓を表示したい位置に <iframe> で組み込んでやればいいだけです。
たったそれだけで、PlayStation 3だろうがIE5.5だろうが、正常に表示される地図窓をホームページに組み込むことができます。
複雑なプログラミング言語を習得する必要は一切ありません。

各要素名と意味は次のとおりです。

x 緯度(X座標) z 縮尺(初期値)
y 経度(Y座標) vm 航空写真
xm マーカー緯度(X座標) vl 地図形式
ym マーカー経度(Y座標) c 座標等の表示
mk マーカー表示 sc 検索機能
zn 縮尺(最小値) q 検索文字列
zx 縮尺(最大値) n 検索の実行

nはシステム・クエリのようです。
色々と試した結果、q要素にキーワードが設定されていても、n要素の値が1に設定されていないと検索が実行されませんでした。
仮にn要素の値が0で地図形式を切り替えても、q要素を含む他要素の値は全て引き継がれるので、切替後の検索窓には元のキーワードが代入されます。
地図窓を読み込む際、n要素の値に1を設定してしまうと、地図窓を表示するたびに検索が実行され、表示が遅くなってしまいます。
そのため、恐らく、地図形式を切り替える際にいちいち検索を実施しないようにして高速化し、サーバー負荷も軽減させる仕組みになっているのでしょう。
検索窓へ地名を入力し、送信するとn要素の値が自動的に1となりますので、ユーザーがn要素を意識する必要はなく、むしろサーバー負荷を高めたり、誤動作を防ぐためにも、n要素の初期値は0にしておくのが良さそうです。

ほかにも以下の特殊な要素がありました。

ns 非JavaScriptモード ts 窓サイズ
tx タイルナンバーX ty タイルナンバーY

上記はIE5.5よりも古いブラウザーや、JavaScriptが実行できないブラウザーで閲覧した際に機能する「非JavaScriptモード」で有効に働く要素です。
「非JavaScriptモード」は、解説にあたって私が勝手に付けた名称ですので、ご容赦ください。
正式名称が何なのか、あるいは無いのか全くわかりませんが、ここでは便宜上「非JavaScriptモード」と表記します。

ADSのマップ・システムはIE3.0などで開いても弾かずに、なんとJavaScriptに頼らない「非JavaScriptモード」で地図を簡易的に表示してくれます。
ns要素に1を設定すると、非JavaScriptモードでの描画を強制することも可能なようです。
ただし、非JavaScriptモードでは描画サイズが固定され、縮尺の幅が狭まり、シームレスなスクロールや地図形式の変更、最大化など、あらゆる機能が利用できません。
表示は縦横3x3の9タイルのみで構成され、上下左右の方向ボタンによる1タイルずつの移動と、四隅の拡大・縮小ボタンによる縮尺の変更のみが行えるようです。
PNG画像を表示できないブラウザーのために、タイルを1枚ずつJPEG形式へ変換するプロセスが差し込まれるので、描画に遅延も生じます。
IE3.0とか、本来ならウェブ地図など絶対に利用不可能な環境なのですから、見捨てられないだけでも奇跡です。

tx、ty要素はタイルナンバーで、緯度や経度ではありません(システム・クエリですので気にする必要もありません)。
初期表示の際には、サーバーが初期値の緯度・経度からタイルナンバーを算出してくれますが、移動や拡大・縮小時には中央に表示されたタイルのナンバーが基準となるようです。
ts要素に1を入れると小窓サイズ(315x330px固定)、何も指定しないと480x495px固定で表示されます。
数値を変更して検証しましたが、非JavaScriptモードの画面サイズ(ts要素)の設定は、どうやら0=480x495px、または1以上=315x330pxの2種類です。
横320pxに収まるサイズも用意されているのは、スマホ対応を考えるホームページ製作者にとっても嬉しい配慮ですね。
IE5.5より古いブラウザーにも対応させたい場合には、とりあえず <iframe> のサイズを315x330px固定にしておけば問題なさそうです。
一応、以下の呪文じぇねれーたーでは、表示サイズのデフォルト値を315x330pxにしてある(非JavaScriptモード以外ではts要素が無視される)ので、表示サイズを変更しなければ、あらゆる環境で閲覧者に美味しく食べてもらえる地図窓が完成します。

トラブル対策

糞ブラウザーとして名高いiPhoneやiPadのSafari等は <iframe> のサイズをうまく調整しないので、その問題を解決するために <div> で囲ってゴニョゴニョしておく必要があります。
具体的には以下のようにします。

  <style>

  .outer_frame {
 
     width: 315px;
     height: 330px;
     overflow: auto;

  }

  .inner_frame {

     width: 100%;
     height: 100%;

  }

  </style>


  <div class="outer_frame">

     <iframe scrolling="no" src="hogehoge" class="inner_frame"></iframe>

  </div>

内側にある <iframe> のサイズをwidth、height共に100%とした上で、外側の <div> に狙ったサイズを指定する形です。
このコーディングなら、多くのブラウザーでトラブルなく表示されると思われます。

これとは別の問題として、ADSのマップ・システムがメンテナンスやトラブル等で正常に動作しないとページの読込が完了せず、貼り付けるホームページの仕様によっては、そのタイミングでホームページが表示されない事態が考えられます。

※メンテナンスは毎日、主に早朝に行われているようで、その時間帯は地図窓の読み込みが終わりません。

トラブルやメンテナンス中などでページ全体の表示が遅れる事態を回避するため、以下のように、ひととおりページの表示を終えてから地図窓の中身を読み込むようにしたほうが良さそうです。

window.onload = function() {

     document.getElementById("map").src = "http://ads.selfip.com/map/?hogehoge";

}

つまり <iframe src="" id="map"> のように最初は <iframe> 側のsrcを空にしておき、ページを読み込み終えたタイミングで map のsrcを設定すれば問題は解決します。
この方法なら、地図の読み込みに時間がかかるか、何らかの事情で地図窓が読み込めない場合でも、ページ自体は表示を完了できます。
自分で工夫したように偉そうに書いていますが、どちらもADSの実装を丁重にパクらせて頂きました。
ただ、これはJavaScriptの実行を前提とした手法なので、JavaScriptを利用しないで動くようにしたい場合には上記の手法が使えません。
その場合には呪文を直接srcに記述しましょう。

呪文じぇねれーたー

いずれかの項目を変更するたび、下段のテキストボックスへ、呪文を含む、組み込みに必要なソースコード(窓サイズも反映)全体がジェネレートされます。
プレビューを押すと実際の地図窓が表示(窓サイズは固定)されますので、完成品の雰囲気を確認できます。
「呪文をコピー」ボタンを押すと、ジェネレートされたコードがクリップボードにコピーされるので、ホームページの地図窓を組み込みたい位置にペーストすれば(貼り付ければ)、簡単に検索窓が組み込めます。

※ソフトハウス ADS公式地図窓の値(ADSの本部、名古屋電算技術室の位置)がデフォルトになっていますので、カスタマイズしたい部分を変更してください。

特定位置の緯度や経度を調べるには「座標」の設定を「表示」にしてプレビューを押しましょう。
地図の中心点に十字が現れ、地図の上部に、十字の地点の緯度・経度と、表示中の縮尺値がx,y,zの形式で表示されます。

縮尺の最小値は2、最大値は18で、最小値が最大値を上回っているなど、矛盾がある場合は、最小2、最大18を指定したのと同義になります。

非JavaScriptモードでの縮尺の最小値は5、最大値は17で、最小値が最大値を上回っているなど、矛盾がある場合は、最小5、最大17を指定したのと同義になります。

縮尺の初期値が最小値を下回っていたり、最大値を上回っている場合は、最大値に指定されている値の範囲で、表示できる最大の縮尺に設定されます。

ここで1点、申しわけありませんが「IE5.5でも動くぞヤッホぅ!」と散々語っておきながら、呪文じぇねれーたーをIE5.5に完全対応させられませんでした(うぉい)。
一応IE5.5でも動作するようには作っていますが、何かの拍子にスクリプト・エラーが生じるかもしれません。
入力エラーのチェックは一切行っていません。
正直IE8対応も完璧にはできなかったので、IE5.5とかマジ無理、マジ勘弁で、このへんが私の技術の限界のようです。
旧ブラウザー対応に足を突っ込んでみると、いかにADSの技術力が ”ありぇんてぃ” なのか、「謎」と形容されている理由を痛感されられます。
恐らくADSでは、数十人の優秀なエンジニアが、総掛かりで研究開発しているものと思われます。
動かなければ最新のブラウザーで試して頂くか、呪文を直接編集してください(ホントごめん)。
ジェネレートされる完成品は安心のADS製となりますので、IE5.5でもちゃんと動作します。

プレビュー

固定サイズ
 
横幅 px
 
縦幅 px
 
緯度
 
経度
 
マーカー緯度
 
マーカー経度
 
罫線色#
 
非JavaScript
検索機能
 
縮尺
 
縮尺(最小)
 
縮尺(最大)
 
マーカー
 
航空写真
 
地図タイプ
 
座標
 

呪文(ソースコード)

ソフトハウス ADSに感謝して使いましょう。

《 十文字 じゅもんじぇねれーたー 》

inserted by FC2 system