Google マップ の Place API の検索結果をクラス化してみる企画の 3 回目です。前回作成したクラスを実際に組み込んでテストします。
検索用関数の準備
現在のライブラリの状態は下図の通りです。一番近い場所を検索する xGetNearestPlaceName 関数は、エージェントから移行したままの状態です。これをクラスに対応し、利用できるようにします。
修正の方針は、
- 外部からアクセスできるように Public 化する
- 戻り値を名前(文字列)ではなく、Place のインスタンスに変更
とします。
修正後の関数は次の通りです。赤字が修正箇所となっています。
Public Function GetNearestPlace(ByVal vdLat As Double, vdLng As Double, _ ByVal vsKeyword As String) As Place Dim sURL As String Dim sPram As String Dim http As NotesHTTPRequest Dim jnav As NotesJSONNavigator Dim jeResults As NotesJSONElement Dim jePlace As NotesJSONElement 'URL の準備 sURL = "https://maps.googleapis.com/maps/api/place/nearbysearch/json" sPram = xGetPram(vdLat, vdLng, vsKeyword) sURL = sURL & "?" & sPram 'API に接続しレスポンスを JSON で取得 Set http = xns.CreateHttpRequest() http.PreferJSONNavigator = True Set jnav = http.Get(sURL) '一番近隣の地点情報を取得 Set jeResults = jnav.GetElementByName("results") Set jePlace = xGetPlace_Nth(jeResults, 1) '地点情報からPlaceインスタンスを取得して返す Set GetNearestPlace = New Place(jePlace) End Function |
関数の戻り値の型が作成したクラス Place となっています。Plase のインスタンス、ようはオブジェクトを返すので戻り値のセットには Set が必要となります。
テストエージェントの作成
ライブラリの準備が整いましたので、テストエージェントを作成します。
Option Declare Use "lsGoogleMAP" Sub Initialize Dim dLat As Double '緯度 Dim dLng As Double '経度 Dim oPlace As Place dLat = 34.683742526906634 dLng = 135.49698067096077 Set oPlace = GetNearestPlace(dLat, dLng, "鳥貴族") MsgBox oPlace.PlaceName, 64 End Sub |
もととなったエージェントの Initialize とほぼ同等です。ポイントとなるのは赤字の部分となります。
検索結果が Place クラスのインスタンスとなりますので、それを受けるためのオブジェクト変数 oPlace を利用しています。また、メッセージボックスでは、PlaceName プロパティを取得して表示しています。
座標にアクセスしたい場合は、次のように記述すれば OK です。
MsgBox oPlace.Location.Latitude, 64 |
前回 | クラス化に挑戦 | 次回 |
0 件のコメント:
コメントを投稿