すべてのプロダクト
Search
ドキュメントセンター

Tablestore:地理位置情報クエリ

最終更新日:Dec 28, 2024

地理位置情報クエリは、地理的距離クエリ、地理的境界ボックスクエリ、地理的多角形クエリの3つのタイプに分類されます。

前提条件

地理的距離クエリ

地理的距離クエリを実行するには、中心点と半径を使用して円形の地理的エリアを指定します。 Tablestore は、特定の列の値が円形の地理的エリア内にある行を返します。

  • パラメータ

    パラメータ

    説明

    fieldName

    クエリ対象の列の名前。このパラメータの値は GEOPOINT データ型です。

    centerPoint

    中心点の座標ペア。座標ペアは緯度と経度の値で構成されます。

    このパラメータ値は、latitude,longitude の形式である必要があります。緯度の有効な値:[-90,+90]。経度の有効な値:[-180,+180]。例:35.8,-45.91

    distanceInMeter

    円形地理領域の半径。このパラメータの値は DOUBLE データ型です。単位:メートル。

    getTotalCount

    クエリ条件を満たす行の総数を返すかどうかを指定します。このパラメータのデフォルト値は false で、クエリ条件を満たす行の総数は返されません。

    このパラメータを true に設定すると、クエリのパフォーマンスが低下します。

    query

    検索インデックスのクエリステートメント。このパラメータを GeoDistanceQuery に設定します。

    tableName

    データテーブルの名前。

    indexName

    検索インデックスの名前。

    columnsToGet

    クエリ条件を満たす各行のすべての列を返すかどうかを指定します。このパラメータには、returnAll フィールドと columns フィールドを指定できます。

    returnAll フィールドのデフォルト値は false で、すべての列が返されるわけではないことを指定します。この場合、columns フィールドを使用して、返す列を指定できます。返す列を指定しない場合は、主キー列のみが返されます。

    returnAll フィールドを true に設定すると、すべての列が返されます。

  • 次のサンプルコードは、Col_GeoPoint 列の値が中心点から特定の距離内にある行をクエリする方法の例を示しています。

    public static void geoDistanceQuery(SyncClient client) {
        SearchQuery searchQuery = new SearchQuery();
        GeoDistanceQuery geoDistanceQuery = new GeoDistanceQuery();  // GeoDistanceQuery を使用します。
        geoDistanceQuery.setFieldName("Col_GeoPoint");
        geoDistanceQuery.setCenterPoint("5,5"); // 中心点の座標を指定します。
        geoDistanceQuery.setDistanceInMeter(10000); // 中心点からの距離を 10,000 以上に設定します。単位:メートル。
        searchQuery.setQuery(geoDistanceQuery);
        //searchQuery.setGetTotalCount(true); // GetTotalCount パラメータを true に設定して、クエリ条件を満たす行の総数を返します。
    
        SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
        // columnsToGet パラメータを使用して、返す列を指定するか、すべての列を返すように指定できます。このパラメータを指定しない場合は、主キー列のみが返されます。
        //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
        //columnsToGet.setReturnAll(true); // すべての列を返すように指定します。
        //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // 返す列を指定します。
        //searchRequest.setColumnsToGet(columnsToGet);
    
        SearchResponse resp = client.search(searchRequest);
        //System.out.println("TotalCount: " + resp.getTotalCount()); // 返される行数ではなく、クエリ条件を満たす行の総数を表示します。
        System.out.println("Row: " + resp.getRows());
    }

地理的境界ボックスクエリ

地理的境界ボックスクエリを実行するには、左上隅と右下隅を使用して矩形の地理的エリアを指定します。 Tablestore は、特定の列の値が矩形の地理的エリア内にある行を返します。

  • パラメータ

    パラメータ

    説明

    fieldName

    クエリ対象の列の名前。このパラメータの値は GEOPOINT データ型です。

    topLeft

    矩形地理領域の左上隅の座標ペア。

    bottomRight

    矩形地理領域の右下隅の座標ペア。矩形地理領域は、左上隅と右下隅を使用して指定できます。

    形式はlatitude,longitudeです。緯度の有効な値:[-90,+90]。経度の有効な値:[-180,+180]。例:35.8,-45.91

    query

    検索インデックスのクエリステートメント。このパラメータを GeoBoundingBoxQuery に設定します。

    getTotalCount

    クエリ条件を満たす行の総数を返すかどうかを指定します。このパラメータのデフォルト値は false で、クエリ条件を満たす行の総数は返されません。

    このパラメータを true に設定すると、クエリのパフォーマンスが低下します。

    tableName

    データテーブルの名前。

    indexName

    検索インデックスの名前。

    columnsToGet

    クエリ条件を満たす各行のすべての列を返すかどうかを指定します。このパラメータには、returnAll フィールドと columns フィールドを指定できます。

    returnAll フィールドのデフォルト値は false で、すべての列が返されるわけではないことを指定します。この場合、columns フィールドを使用して、返す列を指定できます。返す列を指定しない場合は、主キー列のみが返されます。

    returnAll フィールドを true に設定すると、すべての列が返されます。

  • 次のサンプルコードは、Col_GeoPoint 列の値が「10,0」の左上隅と「0,10」の右下隅で定義された矩形地理領域内にある行をクエリする方法の例を示しています。

    public static void geoBoundingBoxQuery(SyncClient client) {
        SearchQuery searchQuery = new SearchQuery();
        GeoBoundingBoxQuery geoBoundingBoxQuery = new GeoBoundingBoxQuery(); // GeoBoundingBoxQuery を使用します。
        geoBoundingBoxQuery.setFieldName("Col_GeoPoint"); // クエリ対象の列の名前を指定します。
        geoBoundingBoxQuery.setTopLeft("10,0"); // 矩形地理領域の左上隅の座標を指定します。
        geoBoundingBoxQuery.setBottomRight("0,10"); // 矩形地理領域の右下隅の座標を指定します。
        searchQuery.setQuery(geoBoundingBoxQuery);
        //searchQuery.setGetTotalCount(true); // GetTotalCount パラメータを true に設定して、クエリ条件を満たす行の総数を返します。
    
        SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
        // columnsToGet パラメータを使用して、返す列を指定するか、すべての列を返すように指定できます。このパラメータを指定しない場合は、主キー列のみが返されます。
        //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
        //columnsToGet.setReturnAll(true); // すべての列を返すように指定します。
        //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // 返す列を指定します。
        //searchRequest.setColumnsToGet(columnsToGet);
    
        SearchResponse resp = client.search(searchRequest);
        //System.out.println("TotalCount: " + resp.getTotalCount()); // 返される行数ではなく、クエリ条件を満たす行の総数を表示します。
        System.out.println("Row: " + resp.getRows());
    }

地理的多角形クエリ

地理的多角形クエリを実行するには、複数点の座標ペアを使用して多角形の地理的エリアを指定します。 Tablestore は、特定の列の値が多角形の地理的エリア内にある行を返します。

  • パラメータ

    パラメータ

    説明

    fieldName

    クエリ対象の列の名前。このパラメータの値は GEOPOINT データ型です。

    points

    多角形地理領域を定義する点の座標ペア。

    このパラメータ値は、latitude,longitude の形式である必要があります。緯度の有効な値:[-90,+90]。経度の有効な値:[-180,+180]。例:35.8,-45.91

    query

    検索インデックスのクエリステートメント。このパラメータを GeoPolygonQuery に設定します。

    getTotalCount

    クエリ条件を満たす行の総数を返すかどうかを指定します。このパラメータのデフォルト値は false で、クエリ条件を満たす行の総数は返されません。

    このパラメータを true に設定すると、クエリのパフォーマンスが低下します。

    tableName

    データテーブルの名前。

    indexName

    検索インデックスの名前。

    columnsToGet

    クエリ条件を満たす各行のすべての列を返すかどうかを指定します。このパラメータには、returnAll フィールドと columns フィールドを指定できます。

    returnAll フィールドのデフォルト値は false で、すべての列が返されるわけではないことを指定します。この場合、columns フィールドを使用して、返す列を指定できます。返す列を指定しない場合は、主キー列のみが返されます。

    returnAll フィールドを true に設定すると、すべての列が返されます。

  • 次のサンプルコードは、Col_GeoPoint 列の値が指定された多角形地理領域内にある行をクエリする方法の例を示しています。

    public static void geoPolygonQuery(SyncClient client) {
        SearchQuery searchQuery = new SearchQuery();
        GeoPolygonQuery geoPolygonQuery = new GeoPolygonQuery();  // GeoPolygonQuery を使用します。
        geoPolygonQuery.setFieldName("Col_GeoPoint");
        geoPolygonQuery.setPoints(Arrays.asList("0,0","5,5","5,0")); // 多角形地理領域の頂点の座標を指定します。
        searchQuery.setQuery(geoPolygonQuery);
        //searchQuery.setGetTotalCount(true); // GetTotalCount パラメータを true に設定して、クエリ条件を満たす行の総数を返します。
    
        SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
        // columnsToGet パラメータを使用して、返す列を指定するか、すべての列を返すように指定できます。このパラメータを指定しない場合は、主キー列のみが返されます。
        //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
        //columnsToGet.setReturnAll(true); // すべての列を返すように指定します。
        //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // 返す列を指定します。
        //searchRequest.setColumnsToGet(columnsToGet);
    
        SearchResponse resp = client.search(searchRequest);
        //System.out.println("TotalCount: " + resp.getTotalCount()); // 返される行数ではなく、クエリ条件を満たす行の総数を表示します。
        System.out.println("Row: " + resp.getRows());
    }

FAQ

参考資料