使ってみよう! Bing API/SDK

第25回 使ってみよう! 地図データ用クラウドデータベース

この記事を読むのに必要な時間:およそ 9 分

はじめに

皆さんは,緯度・経度などの空間データをデータベースで扱ったことはありますか? たとえば,書店の場所をデータベースに格納し,ある地点から1km以内の書店を探すといった場合などです。SQL Server 2008からは空間データ(Spatial Data)型が利用できるようになり,そういったアプリ開発に使用できます。

SQL Serverと同じようには使えませんが,Bing Spatial Data Servicesで提供されているAPIを利用すれば,無償で空間データ用のクラウドデータベースが利用できます。このサービスを利用すれば,書店を探すアプリも作れるかもしれません。少し興味がわきましたか? 今回はこのBing Spatial Data Servicesを使ってみましょう!

Bing Spatial Data Services

Bing Spatial Data Servicesの大きな特徴として,RESTサービスであることがあげられます。すべての操作はHTTP(またはHTTPS)で行い,データはXMLやJSONなどを利用します。Bing Maps REST ServicesというREST API群もあり,リクエストやレスポンスのフォーマットはこれらと共通になっています。Bing Maps REST Servicesは第9回から第11回で紹介しています。

Bing Spatial Data Servicesは,大きくわけて2種類のサービスがあります。多数の地理情報のジオコーディング・逆ジオコーディングサービスと,冒頭で述べた地理情報を含むデータのストアと検索サービスです。これらのサービスは,次の3種類のAPIから利用します。

Geocode Dataflow API

住所や経緯度の地理情報の含む多数のデータを,一括でジオコーディング・逆ジオコーディングするAPIです。実は,Bing Spatial Data Servicesについては,一度第12回で紹介しています。このときは,このGeocode Dataflow APIしかありませんでしたが,2011年2月のアップデートにより次の2種類のAPIが追加されています。

Data Source Management API

このData Source Management APIと次のQuery APIが,今回のテーマとなる,空間データのデータベースを扱うAPIです。Spatial Data Servicesではデータベースという言葉は使わず,ユーザー(開発者)が定義およびアップロードしたデータをData Sourceと呼びます。このAPIでは,Data Sourceの作成(データのアップロード)や,削除,データ定義の参照などを行います。

Query API

3個目は,Data Sourceにあるデータを問い合わせるAPIです。Data Sourceの制限として,一部のデータを更新したり削除することはできません。つまりData Sourceからデータの検索のみ行えます。このAPIによって,ある地点から1kmに含まれるデータなどの検索ができます。位置情報を使った検索だけでなく,別の項目(たとえば書店名)などから検索も可能です。ただし文字列の検索の場合,完全一致か不一致しか扱えません。

特長と制限

Bing Spatial Data Servicesのデータストアと検索サービスの特長は,既に紹介したように,無償であり,JavaScriptからも利用できるRESTサービスであり,また空間データを扱えます。そして,ユーザーが定義したデータをBingサービスのサーバー上にアップロードして利用できます。アプリ側で空間データ用のストレージを用意する必要はありません。

制限としては,圧縮していない状態でひとつのData Sourceは300MBまで,テキスト情報はUTF-8エンコーディングのみ。ひとつのアカウントにつき作成できるData Sourceは25個までなどの制限があります。また,Data Sourceの一部のデータの削除や更新は現状ではできません。Data Sourceの更新は,Data Sourceの内容を入れ替えるということになります。

利用手順

Data Sourceの利用は,次のような手順になります。

  1. 地理情報を含んだデータの準備
  2. データのアップロード(Data Sourceの作成)
  3. データの検索

またサービスの利用には,これまでの連載と同様,Bing Maps Keyが必要です。あらかじめBing Maps Account Centerでアカウントを登録し,Bing Maps Keyを取得してください。

Bing Maps Keyについて,これまでとは異なる点があります。開発用に試す分には問題ありませんが,アプリを公開する場合は,2個のBing Maps Keyが必要ですので注意してください。Data Sourceの作成・削除を行うKeyマスターキーと,Data Sourceの検索用のKeyクエリーキーをわけて使う仕組みになっています。Bing Spatial Data ServicesはRESTサービスのため,アプリのユーザーは,アプリの通信内容からBing Maps Keyを知ることができます。マスターキーを公開してはいけません。

データの準備

それではData Sourceの元となるデータを準備します。ここではData Sourceを構成するデータの定義と実データを,書式に従ったテキストファイルとして作成します。

サンプルデータ

書店を題材にしてみましょう。書店は次のような情報(プロパティ)を持っています。

  • 店名
  • 住所
  • 電話番号

実際のデータは次のような感じになります。

ほげほげ書店, 名古屋県○○区, 052-XXX-XXXX
ぴよぴよ書房, 名古屋県□□区, 052-YYY-YYYY
ふがふが堂, 名古屋県△△区, 052-ZZZ-ZZZZ

ひとつのデータには必ず,経度と緯度が含まれている必要があります。またID(一意な文字列)も必要です。それ以外の情報は上記のプロパティのように自由に定義できます。IDと緯度・経度を追加したデータは次のようになります。

001, 34.98261, 136.79583, ほげほげ書店, 名古屋県○○区, 052-XXX-XXXX
002, 34.97023, 136.69696, ぴよぴよ書房, 名古屋県□□区, 052-YYY-YYYY
003, 34.89705, 136.74502, ふがふが堂, 名古屋県△△区, 052-ZZZ-ZZZZ

プロパティの定義

これらのデータに,プロパティ名と型を定義します。プロパティ名は次の制約があります。

  • 英数字とアンダースコア(_)を使用
  • 最大50文字
  • 先頭の文字は数字以外
  • 2文字のアンダースコア(__)で始まる名前は禁止
  • 大文字・小文字は区別しない

また,必須の緯度と経度のプロパティは,LatitudeLongitudeになります。オプションとして位置情報に高度を含める場合は,Elevationを使用します。

プロパティに使用できるデータ型は,次の5種類です。OData(Open Data)というHTTPベースのデータサービスのための規格の型名を使用しています。

データ型OData Typeひとつのデータに使用できる個数
文字列Edm.String50(最大文字数は256文字)
整数Edm.Int6420
論理Edm.Boolean40
実数Edm.Double20
日時Edm.DateTime5

今回のデータでは,次のように定義しました。

名前データ型説明
IDEdm.StringID
LatitudeEdm.Double緯度
LongitudeEdm.Double経度
NameEdm.String店名
AddressEdm.String住所
TelEdm.String電話番号

ちなみに,今回使用していない論理型はtrue・falseのいずれか,日時型の場合は「2011-06-14T12:00」のように値を表現します。

ファイルの書式

データは,XML形式,または CSV(カンマ区切り)⁠タブ区切り,パイプ(|)区切りのテキストファイルとして用意します。文字エンコーディングはUTF-8です。CSVは単純なカンマ区切りで,カンマを含む文字列の値などは扱えません。

今回は,XML形式は割愛し,区切り文字によるテキストファイルを作成します。例では,区切り文字にパイプを使用します。

まずファイルの1行目に,Bing Spatial Data ServicesのバージョンとData Sourceのエンティティの種類の名前(データのコレクションを表す名前)を記述します。現在のサービスのバージョンは1.0です。

Bing Spatial Data Services, 1.0, Bookstores

2行目は,プロパティ名と型の定義を記述します。⁠プロパティ名(型名)⁠のように記述し,区切り文字で区切ります。IDとなるプロパティは「プロパティ名(型名, primaryKey)⁠と記述します。

ID(Edm.String,primaryKey)|Latitude(Edm.Double)|Longitude(Edm.Double)|Name(Edm.String)|Address(Edm.String)|Tel(Edm.String)

3行目以降には実際のデータを記述します。最終的には以下の内容のテキストファイルができます。

Bing Spatial Data Services, 1.0, Bookstores
 ID(Edm.String,primaryKey)|Latitude(Edm.Double)|Longitude(Edm.Double)|Name(Edm.String)|Address(Edm.String)|Tel(Edm.String)
 001|34.98261|136.79583|ほげほげ書店|名古屋県○○区|052-XXX-XXXX
 002|34.97023|136.69696|ぴよぴよ書房|名古屋県□□区|052-YYY-YYYY
 003|34.89705|136.74502|ふがふが堂|名古屋県△△区|052-ZZZ-ZZZZ

以上でアップロードするデータの準備ができました。

著者プロフィール

松江祐輔(まつえゆうすけ)

日本システムウエア株式会社 勤務。現在,ハードウェア設計・検証業務を担当。大学生・大学院生時代はベンチャー企業 有限会社ミレニアムシステムズにプログラマーとして従事。趣味はプログラミング。好きな言語はVisual Basic。Microsoft MVP for Windows Live Platform(Jul 2010 - Jun 2011),Windows Live(Jul 2011 - Jun 2013)。

URL:http://katamari.jp

コメント

コメントの記入