キノコの自省録

日々適当クリエイト

【Web技術】Silverlightオーバーレイについて

たべ☆すたでは、
あたかも地図の上に透明なシートを被せるように、
Virtual Earthの上に、WindowlessのSilverlightを被せています。
Silverlightオーバーレイと勝手に命名)
Silverlightを重ねると、
基本的な図形を地図に表示するだけではなく、
動画を再生したり、アニメーションを表示したりと、
いろんなことが出来るようになります。
地図を使ったサービスを非常にリッチに表現できるのは、
とても魅力的ですよね。
正直、たべ☆すたでは、Silverlightの表現力を、
5%くらいしか出し切れてないなあと、
力の無さを痛感しています。
なお、画面がダサいのは、Silverlightのせいではなく、私のせいです怜

ともかく、こういうことをしようとこれから考えている方のために、
ちょっとした注意点を書いてみます。

注意点1 Virtual Earthのユーザイベントが使えなくなる
たべ☆すたでは、SilverlightとVirtual Earthのサイズをピッタリ合わせています。
こうするとかなり大変です。
マウスイベントがSilverlightに取られてしまうため、
マップ移動や拡大縮小、各種切り替えボタンなど、
全部Silverlightハンドル側で手作りしなきゃなりません。
実際全部手作りしました。
Silverlightで全域覆おうと考えている場合、
本当にその必要があるか熟考した方がいいと思います。

注意点2 ずれる
ずれる、というのは、
SilverlightとVirtual Earthの動きを、
ピッタリ同期させるのは難しい、ということです。
たべ☆すたは、地図上に〇やら☆やらのオブジェクトが多数配置されますが、
地図の動きにピッタリ合わせてこれらを動かすのは、
ほとんど不可能に近いです。

例えば、A地点からB地点へ移動するといった場合、
Virtual EarthはAからBへ補間スクロールしますが、
こういった補間についていくのは困難です。
また、移動幅が小さいと、
コールバックが通知されないことがあります。

たべ☆すたで一番苦労したのはこの部分です。
はっきりいって、今でも満足してませんが、
自分の力ではこれが限界でした。

注意点3 重い
Windowlessは結構重いです。
が、スクロールしなければあんまり気にならないと思います。
たべ☆すたのように、
やたらとオブジェクトをプロットしてのスクロールは、
マシンに相当の負荷がかかります。
でも、何もプロットしていない初期状態は、
そこそこ軽いですよね?
プロット後が重くなるのは、ドラッグ状態でマウスがちょっとでも動くと、
その度にVirtual Earthの地図移動関数をコールし、
同時に全てのプロット位置の再計算をしなければならないからです。
もし、プロット位置の再計算を緯度経度から行おうものなら、
凄い勢いで重くなります。

こんなところです。
ということで、Silverlightオーバーレイは、
高機能なミニウィンドウを表示するとか、
そういうのに特に向いていると感じました。
暇があったら何かしら作ってみたいと思います。
(が、あんまり暇はなさそう)