2024/05/30

クラス化に挑戦: #8)Google マップ - Place API の結果をクラス化 ③

Google マップ の Place API の検索結果をクラス化してみる企画の 3 回目です。前回作成したクラスを実際に組み込んでテストします。


検索用関数の準備

現在のライブラリの状態は下図の通りです。一番近い場所を検索する xGetNearestPlaceName 関数は、エージェントから移行したままの状態です。これをクラスに対応し、利用できるようにします。

修正の方針は、

  1. 外部からアクセスできるように Public 化する
  2. 戻り値を名前(文字列)ではなく、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 件のコメント:

コメントを投稿