電子国土ポータルとCANVASタグの組み合わせ(前編)

この地図はおなじみのダイヤモンド富士とパール富士の計算のサイトで使われている電子国土ポータルの地図です。 私のホームページでは電子国土ポータルとCANVASタグを使っていますが、サイトを起動する際にグラフィックさせようとすると意外と面倒なことが起こるのですね。 KHTML系のブラウザとIEとfirefoxで微妙に仕様が異なるためどのブラウザでも同じように表示させるのにかなり苦労しました。 CANVASでグラフィックさせる際IEだけGoogleの発行するexcanvas.jsをはじめとしたCANVAS要素を実装するスクリプトを読み込む以下のようなハックが必要なのは有名な話ですね。

<!--[if IE]><script type="text/javascript" src="./../js/excanvas.js"></script><![endif]-->

./は現在のフォルダ、../は一つ上のフォルダをあらわす相対指定のコードですがexcanvas.jsの場所は実際とは異なります。 どうも、excanvas.jsを読み込むのに時間がかかるようなのです。 firefoxやGoogleCromeとかは地図の表示に使われているapp_mainという関数からグラフィックの関数を呼び出せばグラフィックができますが、IEだとそれではできずにonloadイベントでグラフィックを起動しないといけないようです。 その際、電子国土ポータルとの相性が悪いとなかなかグラフィックが表示できない問題もありますが、それが一番確実だと思います。 逆にKHTML系のブラウザではonloadでグラフィックさせるのはやや難しくなります。 そこで、IEとそれ以外のブラウザを判別してIEの仕様の違いを吸収するという方法が考えられます。 グラフィックの関数がstartgraphicのとき、app_main内で以下のようにします。

if (document.uniqueID) {
window.onload = startgraphic;
} else {
startgraphic();
}

以前はdocument.allで判別できたそうですが、現在ではdocument.allを実装したブラウザが他にも出てきているそうなので、こちらの方がいいそうです。 ブラウザごとに固有の識別関数が約束されていたらいいのですが、なかなか難しいですね。 このサンプルは皆様が時々使っているダイヤモンド富士とパール富士の計算で使われています。

ダイヤモンド富士とパール富士の計算(2008年3月22日のパール富士)

このサンプルではapp_mainで関数を呼んでから実際にCANVASにアクセスするまで座標計算の処理を挟んでいて多少のタイムラグがあるため私の1MBのADSLでは主要ブラウザでの検証の結果全て問題なしでした。 あなたの環境ではどうでしょうか。 openspaceの記事では異なる結論となっており、どうやらサーバーとの交信状況、回線速度、クライアントとサーバーの処理速度などの動的な要素がからんだ複雑な問題のようです。

app_main()とonloadの組み合わせ (canvas draw)

私もさらに試してみたところfirefoxではページを再読み込みしたりすると時々app_mainの出現とonloadの出現の順番が逆転することがあり、どうも地図の表示と本文の表示は独立したタスクとして処理されているようです。 CANVASグラフィックを起動した時点でCANVASが用意できていたらグラフィックが成功して、そうでなければ失敗したり、さらにはエラーが出てページの読み込みが止まったりします。 どのイベントでグラフィックを起動すればよいか知るためには様々な環境でテストしていくしかないようです。 そこで、皆様に簡単なアンケートに協力していただけたら幸いです。 こちらのアンケートの結果は電子国土ポータルを用いたAPIの改善のために用いさせていただきます。 日本のウェブマップの技術の発展のためにぜひ協力してください。 このアンケートは結果の統計的解析に必要な最低限のデータを取得するもので個人情報を収集されることはありません。

app_mainとonloadは今お使いのブラウザではどちらが先に呼ばれていますか。 以下に表示されるイベントのうち先に呼ばれた方が上に表示されます。
app_mainが先に呼び出された
onloadが先に呼び出された

下に赤い四角と青い四角が表示されます。 赤い四角と青い四角はどちらが表示されていますか。
両方とも表示されている。
赤い四角のみ表示されている。
青い四角のみ表示されている。
両方とも表示されていない。

もしよろしければ以下の質問にもお答えください。 あなたのパソコンの処理速度と回線の通信速度を教えてください。
処理速度は
通信速度は

下のボタンを押すとアンケートの結果を送信いたします。

現時点でのアンケートの回答状況はこうなっています。

電子国土ポータルとCANVASタグの組み合わせ(前編)のアンケート速報

アンケートの集計結果を見てもonloadで失敗した例はほとんどないので上で紹介された方法に疑問を感じるでしょう。 その通りです、これにはもっと複雑な事情がからんでいたのです。 こちらをご覧ください。

電子国土ポータルとCANVASタグの組み合わせ(後編)
トップページ
おすすめコンテンツ
(c) 和田 聡覚
Prediction of the Diamond Fuji and Pearl Fuji
Prediction of datetime of Sunrise, Sunset, Moonrise and Moonset
Planetarium for Android
ダイヤモンド富士とパール富士の計算
大きな時計
天気予報と郵便番号検索
大口事業所の郵便番号検索
日本から見られる日食の計算
世界の日食の計算
日本から見られる月食の計算
世界の月食の計算
日本各地の距離の計算
日本各地の距離の計算(JApplet)
地球上の距離の計算
反応速度定数の計算
4次方程式の解の計算
4次方程式の解の計算(CGI多倍長版)
回帰計算
電子国土ポータルとCANVASタグの組み合わせ(前編)
私とジャンケンしませんか
(試験公開)星空探訪
This is a Joke Counter.