2024/07/28

作ってみよう:#9)お小遣い帳 - 近隣情報を限定して検索

Google マップで近隣を検索して、購入場所を選択する機能を作成しています。ただ、買い物や飲食に関係ないものが多く使えない状態でした。そこで、今回は検索時に場所を限定する機能を作成します。 


対応方針

Google マップの場所情報には cafe や bar などプレイスタイプという分類が設定されています。

プレイスタイプ

かなり細かく分類されていますね。場所情報には複数登録されていて、関連するどの種類でも検索にヒットします。ノーツのカテゴリぽい設定ですのでノーツ屋にはわかりやすいですね。

そして、今回利用している NearBySearch クラスでは、プレイスタイプを指定して検索する SearchType プロパティ を作成しました。これを利用して機能を作ります。


プレイスタイプの選択

お小遣い帳として使用そうなプレイスタイプだけを抽出して選択する機能を作成します。この機能はさまざまな場所で利用することを考慮してスクリプトライブラリに作成します。

新たに lsGoogleMAP_UI というスクリプトライブラリを作成して次のコードをセットします。

GetSelectPlaceType 関数がプレイスタイプを選択する関数です。今回も Prompt メソッドを使用しています。

Option Declare

Private xnuiw As NotesUIWorkspace
Private xns As NotesSession
Private xndb As NotesDatabase

Private xasTypeList() As String

Private Const xcsTypeNone = "(none)"

Sub Initialize
   Set xnuiw = New NotesUIWorkspace
   Set xns = New NotesSession
   Set xndb = xns.CurrentDatabase

   ReDim xasTypeList(27)

   xasTypeList(0) = xcsTypeNone
   xasTypeList(1) = "supermarket"
   xasTypeList(2) = "convenience_store"
   xasTypeList(3) = "drugstore"
   xasTypeList(4) = "bar"
   xasTypeList(5) = "restaurant"
   xasTypeList(6) = "cafe"
   xasTypeList(7) = "home_goods_store"
   xasTypeList(8) = "electronics_store"
   xasTypeList(9) = "train_station"
   xasTypeList(10) = "subway_station"
   xasTypeList(11) = "lodging"
   xasTypeList(12) = "parking"
   xasTypeList(13) = "gas_station"
   xasTypeList(14) = "book_store"
   xasTypeList(15) = "shoe_store"
   xasTypeList(16) = "clothing_store"
   xasTypeList(17) = "bakery"
   xasTypeList(18) = "shopping_mall"
   xasTypeList(19) = "liquor_store"
   xasTypeList(20) = "department_store"
   xasTypeList(21) = "dentist"
   xasTypeList(22) = "hospital"
   xasTypeList(23) = "movie_rental"
   xasTypeList(24) = "movie_theater"
   xasTypeList(25) = "hair_care"
   xasTypeList(26) = "post_office"
   xasTypeList(27) = "store"
End Sub

Public Function GetSelectPlaceType() As String
   Dim s As String

   s = "検索するプレイスタイプを選択してください。"
   s = xnuiw.Prompt(PROMPT_OKCANCELLIST, xndb.Title, s, "", xasTypeList)
   If s = xcsTypeNone Then s = ""

   GetSelectPlaceType = s
End Function

抽出したプレイスタイプは Initialize で配列に初期セットしています。いりそうなもの一通り列挙したので数が増えました。必要に応じて取捨選択してください。

また、配列の最初には未指定を表す (none) を追加しています。これを選択した場合は戻り値が null となるよう調整しています。


選択機能の実装

エージェントに今回作成した機能を組み込みます。変更箇所は以下の通りです。

Option Declare
Use "lsGoogleMAP"
Use "lsGoogleMAP_UI"
         ・・・
Sub Initialize
         ・・・
   Set oLoc = New Location(nd.Sch_Latitude(0), nd.Sch_Longitude(0))
   Set oSch = New NearBySearch(oLoc)

   'プレイスタイプの選択
   oSch.SearchType = GetSelectPlaceType()
   Call oSch.Search()

   '検索機能の有効化
   If oSch.Count = 0 Then
         ・・・


ここまで完成したら Nomad から開いてテストしましましょう。

プレイスタイプの選択に応じてリストされる場所が変わります。そして、店舗を選択するとその情報がお小遣い帳フォームにセットされれば成功です。


前回 作ってみよう 次回

0 件のコメント:

コメントを投稿