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

Tablestore:地理位置情報クエリ

最終更新日:Dec 28, 2024

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

前提条件

地理的距離クエリ

地理的距離クエリを使用すると、中心点と半径で構成される円形の地理的領域をクエリのフィルタリング条件として指定できます。Tablestore は、Geopoint カラムの値が円形の地理的領域内にある行を返します。

  • パラメータ

    パラメータ

    説明

    tableName

    データテーブルの名前。

    indexName

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

    query

    クエリの種類。クエリの種類を TableStore.QueryType.GEO_DISTANCE_QUERY に設定します。

    fieldName

    フィールドの名前。フィールド値の型は Geopoint です。

    centerPoint

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

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

    distance

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

  • 次のサンプルコードは、Col_GeoPoint カラムの値が特定の円形地理領域内にある行をクエリする方法の例を示しています。

    client.search({
        tableName: TABLE_NAME,
        indexName: INDEX_NAME,
        searchQuery: {
            offset: 0,
            limit: 10, // クエリ条件を満たす行数を特定のデータなしでクエリするには、limit パラメータを 0 に設定します。
            query: { // クエリタイプを TableStore.QueryType.GEO_DISTANCE_QUERY に設定します。
                queryType: TableStore.QueryType.GEO_DISTANCE_QUERY,
                query: {
                    fieldName: "Col_GeoPoint",
                    centerPoint: "1,1", // 中心点の座標ペアを指定します。
                    distance: 10000 // 中心点からの距離を 10,000 以下の値に設定します。単位:メートル。
                }
            },
            getTotalCount: true // クエリ条件を満たす行の総数を返すかどうかを指定します。デフォルト値:false。
        },
        columnToGet: { // 返すカラムを指定します。パラメータを RETURN_SPECIFIED に設定して指定したカラムを返すか、RETURN_ALL に設定してすべてのカラムを返すか、RETURN_ALL_FROM_INDEX に設定して検索インデックス内のすべてのカラムを返すか、RETURN_NONE に設定して主キーカラムのみを返すことができます。
            returnType: TableStore.ColumnReturnType.RETURN_ALL
        }
    }, function (err, data) {
        if (err) {
            console.log('error:', err);
            return;
        }
        console.log('success:', JSON.stringify(data, null, 2));
    });

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

地理的境界ボックスクエリを使用すると、矩形の地理的領域をクエリのフィルタリング条件として指定できます。Tablestore は、Geopoint カラムの値が矩形地理領域内にある行を返します。

  • パラメータ

    パラメータ

    説明

    tableName

    データテーブルの名前。

    indexName

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

    query

    クエリの種類。クエリの種類を TableStore.QueryType.GEO_BOUNDING_BOX_QUERY に設定します。

    fieldName

    フィールドの名前。フィールド値の型は Geopoint です。

    topLeft

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

    bottomRight

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

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

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

    client.search({
        tableName: TABLE_NAME,
        indexName: INDEX_NAME,
        searchQuery: {
            offset: 0,
            limit: 10, // クエリ条件を満たす行数を特定のデータなしでクエリするには、limit パラメータを 0 に設定します。
            query: { // クエリタイプを TableStore.QueryType.GEO_BOUNDING_BOX_QUERY に設定します。
                queryType: TableStore.QueryType.GEO_BOUNDING_BOX_QUERY,
                query: {
                    fieldName: "Col_GeoPoint", // フィールドの名前を指定します。
                    topLeft: "10,0", // 矩形地理領域の左上隅の座標ペアを指定します。
                    bottomRight: "0,10" // 矩形地理領域の右下隅の座標ペアを指定します。
                }
            },
            getTotalCount: true // クエリ条件を満たす行の総数を返すかどうかを指定します。デフォルト値:false。
        },
        columnToGet: { // 返すカラムを指定します。パラメータを RETURN_SPECIFIED に設定して指定したカラムを返すか、RETURN_ALL に設定してすべてのカラムを返すか、RETURN_ALL_FROM_INDEX に設定して検索インデックス内のすべてのカラムを返すか、RETURN_NONE に設定して主キーカラムのみを返すことができます。
            returnType: TableStore.ColumnReturnType.RETURN_ALL
        }
    }, function (err, data) {
        if (err) {
            console.log('error:', err);
            return;
        }
        console.log('success:', JSON.stringify(data, null, 2));
    });

地理的多角形クエリ

地理的多角形クエリを使用すると、多角形の地理的領域を指定できます。Tablestore は、Geopoint カラムの値が多角形地理領域内にある行を返します。

  • パラメータ

    パラメータ

    説明

    tableName

    データテーブルの名前。

    indexName

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

    query

    クエリの種類。クエリの種類を TableStore.QueryType.GEO_POLYGON_QUERY に設定します。

    fieldName

    フィールドの名前。フィールド値の型は Geopoint です。

    points

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

    各点の座標ペアは、「緯度,経度」の形式である必要があります。緯度の有効な値:[-90,90]。経度の有効な値:[-180,180]。例:「35.8,-45.91」。

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

    client.search({
        tableName: TABLE_NAME,
        indexName: INDEX_NAME,
        searchQuery: {
            offset: 0,
            limit: 10, // クエリ条件を満たす行数を特定のデータなしでクエリするには、limit パラメータを 0 に設定します。
            query: { // クエリタイプを TableStore.QueryType.GEO_POLYGON_QUERY に設定します。
                queryType: TableStore.QueryType.GEO_POLYGON_QUERY,
                query: {
                    fieldName: "Col_GeoPoint",
                    points: ["0,0","5,5","5,0"] // 多角形地理領域の頂点の座標ペアを指定します。
                }
            },
            getTotalCount: true // クエリ条件を満たす行の総数を返すかどうかを指定します。デフォルト値:false。
        },
        columnToGet: { // 返すカラムを指定します。パラメータを RETURN_SPECIFIED に設定して指定したカラムを返すか、RETURN_ALL に設定してすべてのカラムを返すか、RETURN_ALL_FROM_INDEX に設定して検索インデックス内のすべてのカラムを返すか、RETURN_NONE に設定して主キーカラムのみを返すことができます。
            returnType: TableStore.ColumnReturnType.RETURN_ALL
        }
    }, function (err, data) {
        if (err) {
            console.log('error:', err);
            return;
        }
        console.log('success:', JSON.stringify(data, null, 2));
    });

FAQ

参考資料