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

Tablestore:地理位置情報クエリの実行

最終更新日:Dec 28, 2024

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

前提条件

地理的距離クエリ

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

  • パラメータ

    パラメータ

    説明

    FieldName

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

    CenterPoint

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

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

    DistanceInMeter

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

    Query

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

    TableName

    データテーブルの名前。

    IndexName

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

    ColumnsToGet

    クエリ条件を満たす行のすべての列を返すかどうかを指定します。ReturnAll、Columns、ReturnAllFromIndex パラメータを指定できます。

    ReturnAll のデフォルト値は false で、すべての列が返されないことを指定します。次のいずれかの方法を使用して、返したい列を指定できます。次の方法を使用して返したい列を指定しない場合、主キー列のみが返されます。

    • Columns を設定して、返したい列を指定します。

    • ReturnAllFromIndex を true に設定して、検索インデックスからすべての列を返します。

    ReturnAll を true に設定すると、すべての列が返されます。

  • 次のサンプルコードは、geo_type_col 列の値がテーブル内の円形地理領域内にある行をクエリする方法を示しています。

    /// <summary> 
    /// テーブル内の円形地理領域内にある geo_type_col 列の値を持つ行をクエリします。
    /// </summary>
    /// <param name="client"></param>
    public static void GeoDistanceQuery(OTSClient client)
    {
        SearchQuery searchQuery = new SearchQuery();
        GeoDistanceQuery geoDistanceQuery = new GeoDistanceQuery(); // クエリタイプを GeoDistanceQuery に設定します。
        geoDistanceQuery.FieldName = Geo_type_col;
        geoDistanceQuery.CenterPoint = "10,11"; // 中心点の座標ペアを指定します。
        geoDistanceQuery.DistanceInMeter = 10000; // 円形地理領域の半径を 10,000 に設定します。単位:メートル。
        searchQuery.Query = geoDistanceQuery;
    
        SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery);
    
        ColumnsToGet columnsToGet = new ColumnsToGet();
        columnsToGet.Columns = new List<string>() { Geo_type_col }; // Geo_type_col 列が返されるように指定します。
        searchRequest.ColumnsToGet = columnsToGet;
    
        SearchResponse response = client.Search(searchRequest);
        Console.WriteLine(response.TotalCount);
    }
                

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

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

  • パラメータ

    パラメータ

    説明

    FieldName

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

    TopLeft

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

    BottomRight

    矩形地理領域の右下隅の座標ペア。左上隅と右下隅の座標ペアは、一意の矩形地理領域を定義します。

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

    Query

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

    TableName

    データテーブルの名前。

    IndexName

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

    ColumnsToGet

    クエリ条件を満たす行のすべての列を返すかどうかを指定します。ReturnAll、Columns、ReturnAllFromIndex パラメータを指定できます。

    ReturnAll のデフォルト値は false で、すべての列が返されないことを指定します。次のいずれかの方法を使用して、返したい列を指定できます。次の方法を使用して返したい列を指定しない場合、主キー列のみが返されます。

    • Columns を設定して、返したい列を指定します。

    • ReturnAllFromIndex を true に設定して、検索インデックスからすべての列を返します。

    ReturnAll を true に設定すると、すべての列が返されます。

  • 次のサンプルコードは、geo_type_col 列の値が、左上隅が "10,0"、右下隅が "0,10" の矩形地理領域内にある行をクエリする方法を示しています。

    /// <summary>
    /// テーブル内の矩形地理領域内にある geo_type_col 列の値を持つ行をクエリします。geo_type_col 列の値は GEOPOINT データ型です。矩形地理領域は、座標ペアが "10,0" の左上隅と座標ペアが "0,10" の右下隅によって指定されます。
    /// </summary>
    /// <param name="client"></param>
    public static void GeoBoundingBoxQuery(OTSClient client)
    {
        SearchQuery searchQuery = new SearchQuery();
        GeoBoundingBoxQuery geoBoundingBoxQuery = new GeoBoundingBoxQuery(); // クエリタイプを GeoBoundingBoxQuery に設定します。
        geoBoundingBoxQuery.FieldName = Geo_type_col; // クエリ対象の列の名前を指定します。
        geoBoundingBoxQuery.TopLeft = "10,0"; // 矩形地理領域の左上隅の座標ペアを指定します。
        geoBoundingBoxQuery.BottomRight = "0,10"; // 矩形地理領域の右下隅の座標ペアを指定します。
        searchQuery.Query = geoBoundingBoxQuery;
    
        SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery);
    
        var columnsToGet = new ColumnsToGet();
        columnsToGet.Columns = new List<string> { Geo_type_col }; // Geo_type_col 列が返されるように指定します。
        searchRequest.ColumnsToGet = columnsToGet;
    
        SearchResponse response = client.Search(searchRequest);
        Console.WriteLine(response.TotalCount);
    }

地理的多角形クエリ

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

  • パラメータ

    パラメータ

    説明

    FieldName

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

    Points

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

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

    Query

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

    TableName

    データテーブルの名前。

    IndexName

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

    ColumnsToGet

    クエリ条件を満たす行のすべての列を返すかどうかを指定します。ReturnAll、Columns、ReturnAllFromIndex パラメータを指定できます。

    ReturnAll のデフォルト値は false で、すべての列が返されないことを指定します。次のいずれかの方法を使用して、返したい列を指定できます。次の方法を使用して返したい列を指定しない場合、主キー列のみが返されます。

    • Columns を設定して、返したい列を指定します。

    • ReturnAllFromIndex を true に設定して、検索インデックスからすべての列を返します。

    ReturnAll を true に設定すると、すべての列が返されます。

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

    /// <summary>
    /// テーブル内の多角形地理領域内にある geo_type_col 列の値を持つ行をクエリします。
    /// </summary>
    /// <param name="client"></param>
    public static void GeoPolygonQuery(OTSClient client)
    {
        SearchQuery searchQuery = new SearchQuery();
        GeoPolygonQuery geoPolygonQuery = new GeoPolygonQuery(); // クエリタイプを GeoPolygonQuery に設定します。
        geoPolygonQuery.FieldName = Geo_type_col;
        geoPolygonQuery.Points = new List<string>() { "0,0", "10,0", "10,10" }; // 多角形地理領域の頂点の座標ペアを指定します。
        searchQuery.Query = geoPolygonQuery;
    
        SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery);
    
        ColumnsToGet columnsToGet = new ColumnsToGet();
        columnsToGet.Columns = new List<string>() { Geo_type_col }; // Geo_type_col 列が返されるように指定します。
        searchRequest.ColumnsToGet = columnsToGet;
    
        SearchResponse response = client.Search(searchRequest);
        Console.WriteLine(response.TotalCount);
    }
                

FAQ

参考資料