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

Tablestore:地理位置クエリ

最終更新日:Dec 28, 2024

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

前提条件

地理的距離クエリ

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

  • パラメーター

    パラメーター

    説明

    table_name

    データテーブルの名前。

    index_name

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

    query

    検索インデックスのクエリステートメント。地理的距離クエリを使用するには、クエリタイプを QueryTypeConst::GEO_DISTANCE_QUERY に設定します。

    field_name

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

    center_point

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

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

    distance

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

  • 次のサンプルコードは、データテーブルにおいて、geo 列のデータが中心点 30.001,120.001 から 1,000 メートル以内にあるすべての行をクエリする方法を示しています。

    $request = array(
        'table_name' => 'php_sdk_test',
        'index_name' => 'php_sdk_test_search_index',
        'search_query' => array(
            'offset' => 0,
            'limit' => 2,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::GEO_DISTANCE_QUERY,
                'query' => array(
                    'field_name' => 'geo',
                    'center_point' => '30.001,120.001',
                    'distance' => 1000
                )
            ),
            'sort' => array(
                array(
                    'geo_distance_sort' => array(
                        'field_name' => 'geo',
                        'order' => SortOrderConst::SORT_ORDER_ASC,
                        'distance_type' => GeoDistanceTypeConst::GEO_DISTANCE_PLANE,
                        'points' => array('30,120')
                    )
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
            'return_names' => array('geo')
        )
    );
    $response = $otsClient->search($request);

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

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

  • パラメーター

    パラメーター

    説明

    table_name

    データテーブルの名前。

    index_name

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

    query

    検索インデックスのクエリステートメント。地理的境界クエリを使用するには、クエリタイプを QueryTypeConst::GEO_BOUNDING_BOX_QUERY に設定します。

    field_name

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

    top_left

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

    bottom_right

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

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

  • 次のサンプルコードは、データテーブルにおいて、geo 列のデータが左上点(座標:31,119)と右下点(座標:29,121)で定義された矩形領域内にあるすべての行をクエリする方法を示しています。

    $request = array(
        'table_name' => 'php_sdk_test',
        'index_name' => 'php_sdk_test_search_index',
        'search_query' => array(
            'offset' => 0,
            'limit' => 2,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::GEO_BOUNDING_BOX_QUERY,
                'query' => array(
                    'field_name' => 'geo',
                    'top_left' => '31,119',
                    'bottom_right' => '29,121'
                )
            ),
            'sort' => array(
                array(
                    'geo_distance_sort' => array(
                        'field_name' => 'geo',
                        'order' => SortOrderConst::SORT_ORDER_ASC,
                        'distance_type' => GeoDistanceTypeConst::GEO_DISTANCE_PLANE,
                        'points' => array('30,120')
                    )
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
            'return_names' => array('geo')
        )
    );
    $response = $otsClient->search($request);

地理的多角形クエリ

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

  • パラメーター

    パラメーター

    説明

    table_name

    データテーブルの名前。

    index_name

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

    query

    検索インデックスのクエリステートメント。地理的多角形クエリを使用するには、クエリタイプを QueryTypeConst::GEO_POLYGON_QUERY に設定します。

    field_name

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

    points

    多角形地理領域を定義する点の座標ペア。複数の座標ペアを使用して多角形を指定できます。

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

  • 次のサンプルコードは、データテーブルにおいて、geo 列のデータが、座標がそれぞれ 31,12029,12129,119 である点で定義された多角形領域内にあるすべての行をクエリする方法を示しています。

    $request = array(
        'table_name' => 'php_sdk_test',
        'index_name' => 'php_sdk_test_search_index',
        'search_query' => array(
            'offset' => 0,
            'limit' => 2,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::GEO_POLYGON_QUERY,
                'query' => array(
                    'field_name' => 'geo',
                    'points' => array(
                        "31,120",
                        "29,121",
                        "29,119"
                    )
                )
            ),
            'sort' => array(
                array(
                    'geo_distance_sort' => array(
                        'field_name' => 'geo',
                        'order' => SortOrderConst::SORT_ORDER_ASC,
                        'distance_type' => GeoDistanceTypeConst::GEO_DISTANCE_PLANE,
                        'points' => array('30,120')
                    )
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
            'return_names' => array('geo')
        )
    );
    $response = $otsClient->search($request);

FAQ

参考資料