Free Word Search

この章では目的地を設定するためにフリーワードにより施設を検索(フリーワード検索)するための方法を紹介します。

おおまかな処理の流れ

フリーワード検索の処理の流れは以下の通りです。

  1. SearchJP.FreewordSearchRequestのインスタンスを生成します。
    • 検索したいワードを設定します。
    • 検索したい場所の緯度経度、半径(指定しない場合は全国が対象)を設定します。
  2. 設定済みのSearchJP.FreewordSearchRequestオブジェクトを引数に、SearchJP.search()を呼び出します。
  3. 検索が完了すると、Listenerにて検索結果が通知されます。これで検索完了です。
SearchJP.FreewordSearchRequest request = new SearchJP.FreewordSearchRequest();

request.setKeyword("都庁");

GeoCoordinate position = new GeoCoordinate(35.689595, 139.692221);
request.setPosition(position);

SearchJP.getInstance().search(request, new SearchJP.SearchResultListener() {
	@Override
	public void onCompleted(SearchJP.ErrorCode errorCode, SearchJP.SearchResult searchResult) {
		// searchResultに検索結果が格納されています
	}
});
検索ワード例期待できる検索結果
パイオニアパイオニアに関連のある施設を検索します。
03-6634-8777該当の電話番号を持つ施設を検索します。ハイフン記号がない10桁の数字も電話番号とみなします。

高度な検索

ソート順を指定する

SearchJP.FreewordSearchRequest.SortType で検索結果のソート順を指定することができます。 指定可能なソート順は以下の通りです。

  • RECOMMENDED(おすすめ順)
  • DISTANCE(距離順)
注意:

DISTANCE(距離順)を指定する場合、setRadius() による検索半径指定が必要です。

複数ワード検索

フリーワード検索では、半角スペース区切りでAND検索を行うことができます。

検索ワード例期待できる検索結果
ラーメン 塩ラーメンと塩に関連する施設(塩ラーメンの店舗)を検索します。
カレー インドカレーとインドに関連する施設(インドカレーの店舗)を検索します。
注意:

電話番号で検索する際は、別のキーワードをANDで含めることはできません。
例えば 03-6634-8777 企業 と検索しても検索失敗となってしまいます。

ジャンルキー、エリアキーとの組み合わせ

ジャンルキー

SearchJP.FreewordSearchRequest にジャンルキー(整数値)を設定すると、キーワード × ジャンル のAND検索になります。

エリアキー

SearchJP.FreewordSearchRequest にエリアキー(住所コード)を設定すると、キーワード/ジャンル × エリア のAND検索になります。

注意:ジャンルキー・エリアキーは都度取得してください

ジャンルキーおよびエリアキーは、データ整備の更新やシステム改修によって値が変更される可能性があります。 そのため、アプリ内に固定値としてハードコードせず、下記の方法で取得する設計にしてください。 なお、検索実行ごとに取得するのではなく、アプリ起動時や検索画面表示時などに先行して取得し、一定期間キャッシュする運用が推奨されます。

ジャンルキーとエリアキーを指定したAND検索は以下のようにします。

SearchJP.FreewordSearchRequest request = new SearchJP.FreewordSearchRequest();

request.setKeyword("日産");

// カーディーラーのジャンルキー(※例として209を指定。実際はSearchJP.getGenreList()で取得してください)
List<Integer> genreKeyList = new ArrayList<>();
genreKeyList.add(209);
request.setGenreKeyList(genreKeyList);

// 神奈川県のエリアキー(※例として"14"を指定。実際はSearchJP.search(GetLocationListByAddressRequest, AddressListener)で取得してください)
List<String> areakeyList = new ArrayList<>();
areakeyList.add("14");
request.setAreaKeyList(areakeyList);

GeoCoordinate position = new GeoCoordinate(35.689595, 139.692221);
request.setPosition(position);

SearchJP.getInstance().search(request, new SearchJP.SearchResultListener() {
	@Override
	public void onCompleted(SearchJP.ErrorCode errorCode, SearchJP.SearchResult searchResult) {
		// searchResultに検索結果が格納されています
	}
});

駐車場入口

検索した施設に駐車場入口情報が設定されている場合、それをルート探索時に使用することで、適切な入口まで案内できます。

検索結果の駐車場入口情報をルート探索時に使用するためには以下のようにします。

RoutePlan routePlan = new RoutePlan();
SearchJP.getInstance().search(request, new SearchJP.SearchResultListener() {
	@Override
	public void onCompleted(SearchJP.ErrorCode errorCode, SearchJP.SearchResult searchResult) {
		if (errorCode == SearchJP.ErrorCode.NONE) {
			SearchJP.Place place = searchResult.getPlaceList().get(0);
			RouteEndPoint routeEndPoint = new RouteEndPoint();
			routeEndPoint.setPoint(place.getPosition());
			routeEndPoint.setParkingEntranceList(place.getParkingEntranceList()); // 駐車場入口リストを取得
			routePlan.setRouteEndPoint(routeEndPoint);
			// ルート探索処理はここでは割愛
		}
	}
}

詳しくは New Route を参照して下さい。

駅出入口情報

検索結果の駅施設に出入口情報がある場合、getGatePointList() で取得できます。

SearchJP.getInstance().search(request, new SearchJP.SearchResultListener() {
    @Override
    public void onCompleted(SearchJP.ErrorCode errorCode, SearchJP.SearchResult searchResult) {
        if (errorCode == SearchJP.ErrorCode.NONE && searchResult != null) {
            for (SearchJP.Place place : searchResult.getPlaceList()) {
                List<SearchJP.GatePoint> gatePointList = place.getGatePointList();
                for (SearchJP.GatePoint gatePoint : gatePointList) {
                    String name = gatePoint.getName();
                    SearchJP.ArrivalPointKind arrivalPointKind = gatePoint.getArrivalPointKind();
                    SearchJP.GateKind gateKind = gatePoint.getGateKind();
                    List<GeoCoordinate> pointList = gatePoint.getPointList();

                    // 出入口情報を利用する
                }
            }
        }
    }
});

getGatePointList() で取得できる GatePoint には、以下の情報が含まれます。

項目説明
name出入口名称
arrivalPointKind到着地点種別
gateKind出入口種別
pointList出入口に対応する地点情報のリスト
注意:
  • 出入口情報が存在しない施設では、getGatePointList() は空となる場合があります。
  • 駅施設であっても、すべての検索結果で出入口情報が取得できるとは限りません。