現在位置の近くにある宿を検索するサンプルプログラム

2013年6月28日(金)
薬師寺 国安

Bing Maps Keyの取得方法

Bing Mapsを使用するには下記URLのBing Maps Account Centerに行って専用のライセンスキーを取得する必要があります。
→ Bing Maps Account Center

Windows Live IDを持ってない方はCreateからWindows Live IDを作成してSign Inしてください。筆者はIDを持っているので、Sign Inから入ります。

表示される画面の左にあるCreate or view keysをクリックします。

Create keyの画面が表示されますので、必要な項目を入力してSubmitしてください。筆者はすでにキーを持っているため、キーが表示されています。Key typeはBasicとなっています。BasicでPublic websiteの場合は、「アプリケーションが制限なしに利用され、500,000 のトランザクションの任意の種類の 12 ヶ月の期間内を超えない、公開ウェブサイトです。」となっているようです。

詳細については、前回の「現在位置の住所取得」を参照してください。

リスト1のレイアウトは図8のようになります。

図8:各コントロールを配置した(クリックで拡大)

次に、現在位置を取得する必要があるため、ソリユーションエクスプローラー内の、Package.manifestファイルをダブルクリックして開きます。

「場所」へのアクセス許可

「機能」タブ内の「機能:」にある「場所」にチェックを付けます(図9)。

図9:「場所」にチェックを付ける(クリックで拡大)

「じゃらんAPI」の使用

今回は、下記URLの「じゃらんWebサービス/じゃらん宿表示API」を使用します。
→ じゃらんWebサービス/じゃらん宿表示API アドバンス

このAPIを使用するには、「じゃらん」のAPIキーが必要です。下記のURLから、「会員ID(メールアドレス)」を入力して、「同意して次へ」ボタンをクリックしてください。登録したメールアドレスに「じゃらん」よりメールが届きますので、その指示に従って、APIキーを取得してください。
→ じゃらんWebサービス/アカウント登録

「空白のページ」の作成(WebBrowserPage.xaml)

次に、宿の詳細データをブラウザで表示するためのページを作成します。

VS2012のメニューの「プロジェクト(P)/新しい項目の追加(W)」と選択します。「新しい項目の追加」ダイアログボックスが開きますので、「空白のページ」を選択します。「名前(N)」にWebBrowserPage.xamlと入力し、[追加(A)]ボタンをクリックします。

コントロールの配置

要素内に、Controlsという名前空間を定義します。Controls=”と入力すると値の一覧が表示されます。このなかから、WinRTXamlToolkit.Controlsを選択します(図10)。これ以外に、ツールボックスに登録されているWebBrowserコントロールをドラッグ&ドロップしてデザイン画面上に配置する方法もあります。後者の方が簡単なので、今回はドラッグ&ドロップの方法を使用します。ただ、この方法だと、Controls:という接頭辞が付かずにWebBrowserコントロールが配置され、エラーになる場合があります。諦めずに何回か繰り返していると、きちんとControls:という接頭辞の付いたWebBrowserコントロールが配置されます。

図10:Controls=”と入力して値の一覧が表示されている(クリックで拡大)

書き出されるXAMLはリスト2、レイアウトは図11のようになります。

リスト2 書き出されたXAMLコード(WebBrowser.xaml)

  • (1)Controlsという名前空間が追加されている。
  • (2)名前がWebBrowser1というWebBrowserコントロールを配置した。
<Page xmlns:Controls="using:WinRTXamlToolkit.Controls"(1)
  x:Class="AccommodationSearch.WebBrowserPage"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:local="using:AccommodationSearch"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  mc:Ignorable="d">
  <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <Controls:WebBrowser x:Name="WebBrowser1"/>(2)
  </Grid>
</Page>
図11:WebBrowserコントロールを配置した(クリックで拡大)

次に、ソリューションエクスプローラー内のMainWindow.xamlを展開して表示される、MainWindow.xaml.vbをダブルクリックしてリスト3のコードを記述します。

ロジックコードを記述する

リスト3 (MainWindow.xaml.vb)

Option Strict On

コンピュータの地理的位置にアクセスできるようにするクラスの含まれる、Windows.Devices.Geolocation名前空間をインポートします。

Imports Windows.Devices.Geolocation

Bing Mapsに関するクラスの含まれる、Bing.Maps名前空間をインポートします。

Imports Bing.Maps

UIに関するクラスの含まれるWindows.UI名前空間をインポートします。PushPinの色を設定する場合等に必要です。

Imports Windows.UI

アプリケーションウインドウやウインドウ対話を作成し管理するサポートと、ウインドウ上の入力イベントを処理するクラスの含まれる、Windows.UI.Core名前空間をインポートします。

Imports Windows.UI.Core

最新のHTTPアプリケーション用のプログラミング インターフェイスを提供するクラスの含まれる、System.Net.Http名前空間をインポートします。

Imports System.Net.Http

コンテキストメニューおよびメッセージダイアログのサポートを提供するクラスの含まれる、Windows.UI.Popups名前空間をインポートします。

Imports Windows.UI.Popups
Public NotInheritable Class MainPage
  Inherits Page

現在の地理的位置にアクセスするクラスである、Geolocatorクラスのメンバ変数myGeolocatorを宣言します。

  Dim myGeolocator As Geolocator

Windowsランタイムコアイベントメッセージディスパッチャを提供するクラスである、CoreDispatcherクラスのメンバ変数、myCoreDispacherを宣言します。

  Dim myCoreDispacher As CoreDispatcher

YahooのアプリケーションIDで初期化された、定数メンバ変数AppIDを宣言します。

  Const AppID As String = "YahooのアプリケーションID"

「じゃらん」のAPIキーで初期化された、定数メンバ変数HotelAppIDを宣言します。

  Const HotelAppID As String = "じゃらんのAPIキー"

ページがアクティブになった時の処理

myGeolocatorオブジェクトが作成されていない場合は、新しいGeolocatorクラスのインスタンスmyGeolocatorオブジェクトを作成します。
場所認識の精度レベルを表す、DesiredAccuracy プロパティにはDefaultを指定しておきます。Default以外にHighがありますが、パフォーマンスが低下する恐れがありますので、Defaultを指定しています。

Window.Current.CoreWindow.Dispatcherで、現在アクティブになっている、ウインドウの内部コアオブジェクトのイベントディスパッチャを取得して、myCoreDispacherで参照します。

AddHandlerステートメントで、場所が更新された時のPositionChangedイベント時のイベントハンドラ、myGeolocator_PositionChangedを追加します。

同じく、AddHandlerステートメントで、更新された場所を提供するGeolocatorの機能が変更された時に発生する、StatusChanged時のイベントハンドラ、myGeolocator_StatusChangedを追加します。

  Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs)
    If myGeolocator Is Nothing = True Then
      myGeolocator = New Geolocator
      myGeolocator.DesiredAccuracy = PositionAccuracy.Default
      myCoreDispacher = Window.Current.CoreWindow.Dispatcher
    End If
    AddHandler myGeolocator.PositionChanged, AddressOf myGeolocator_PositionChanged
    AddHandler myGeolocator.StatusChanged, AddressOf myGeolocator_StatusChanged
  End Sub
  • 現在位置の近くにある宿を検索するプログラム

薬師寺国安事務所

薬師寺国安事務所代表。Visual Basic プログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。
1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。1997年に薬師寺聖とコラボレーション・ユニット PROJECT KySS を結成。2003年よりフリーになり、PROJECT KySS の活動に本格的に参加、.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。Windows Phoneアプリ開発を経て、現在はWindows ストア アプリを多数公開中

Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています