Bing MapsとWindows Azureで作った「東北地方太平洋沖地震 通行実績情報マップ」

Posted: 2011/04/03 カテゴリー: Uncategorized
タグ:, , ,

少し前に、ホンダさんが公開されている通行実績情報と Bing Maps を組み合わせて表示する Web サイトを公開しました。

KMZ ファイル (実体は ZIP 圧縮された XML 形式のKML ファイル) を SQL Azure Database の Spatial データ型のテーブルにロードしておき、Windows Azure の Web Role で動く「Tile Renderer」が、Bing Maps に重ね合わせるタイル画像をオンデマンドで生成する作りになっています。UIは、HTML、JavaScript、Bing Maps API (AJAX Control、REST Services) で書かれています。

この実装は、Bing Maps のスペシャリストである同僚の Johannes Kebeck に協力してもらいました。彼のブログ エントリで、実装の詳細が説明されているので、興味のある方は是非。

このブログ エントリで書かれているアーキテクチャをベースに、僕がキャッシュ部分を書き換えたので、その差分だけここで説明しておきます。

Windows Azure CDN (Content Delivery Network) は、Windows Azure のコンテンツをグローバルに配置されたエッジ サーバー群でキャッシュする機能です。これまで、Windows Azure CDN は、Windows Azure Storage の Blob に格納されている静的コンテンツのみをキャッシュ可能でした。

2011年3月にリリースされた Windows Azure SDK 1.4 では、Windows Azure CDN の、Widnows Azure Compute (Hosted Service) が生成する動的コンテンツへの対応が追加されました。

Johannes による最初のアーキテクチャでは、Web Role で動く Tile Renderer が、Blob にキャッシュ済みのタイル画像があるかどうか確認し、もしあればそれを返し、もしなければ、SQL Azure Database から取得したデータをもとにタイル画像を生成し、Blob に格納してから返す、という動きでした。

新しいアーキテクチャでは、Web Role で動く Tile Renderer は、常に SQL Azure Database から取得したデータをもとにタイル画像を生成し、その画像を返す、というよりシンプルな動きになります。

そして、この Web Role に対してWindows Azure CDN を構成し、Tile Renderer が返すタイル画像をキャッシュするようにしています。

Tile Renderer では、次のようなコード でキャッシュの有効化やキャッシュの有効期限 (ここでは10分間) を指定しています。

context.Response.Cache.SetExpires(DateTime.Now.AddSeconds(600))

context.Response.Cache.SetCacheability(HttpCacheability.Public)

context.Response.Cache.SetValidUntilExpires(True)

JavaScript がタイル画像をリクエストする URL は、最初のアーキテクチャでは Web Role のホストになりますが、新しいアーキテクチャでは、CDN のホストになります。

Windows Azure CDN に関しては、ドキュメントも参照してください。

今回使っている Bing Maps AJAX Control や Bing Maps REST Services については、Bing Maps のドキュメントを参照してください。

さて、僕のサイトと似たサイトがもう1つあるので、合わせてご紹介しておきましょう。トヨタさんも被災地の通行実績情報を「通れた道マップ」として公開しており、Bing Maps と組み合わせたサイトも公開されています。こちらのサイトには、僕は間接的に後方支援部隊としてお手伝いをしております…

 

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中