地理位置情報クエリは、地理的距離クエリ、地理的境界ボックスクエリ、地理的多角形クエリの3つのタイプに分類されます。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成とデータの書き込みを参照してください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスの作成を参照してください。
地理的距離クエリ
地理的距離クエリを実行するには、中心点と半径を使用して円形の地理的エリアを指定します。 Tablestore は、指定された列の値が円形の地理的エリア内にある行を返します。
パラメーター
パラメーター
説明
field_name
クエリ対象の列の名前。このパラメーターの値は GEOPOINT データ型です。
center_point
中心点の座標ペア。座標ペアは緯度と経度の値で構成されます。
座標ペアは
latitude,longitude
形式です。緯度の有効な値:[-90,+90]。経度の有効な値:[-180,+180]。例:35.8,-45.91
。distance
円形地理領域の半径。このパラメーターの値は DOUBLE データ型です。単位:メートル。
query
検索インデックスのクエリステートメント。このパラメーターを GeoDistanceQuery に設定します。
table_name
データテーブルの名前。
index_name
検索インデックスの名前。
例
次のサンプルコードは、Col_GeoPoint 列の値が中心点が「32.5,116.5」で半径が最大 300,000 メートルの円形地理領域内にある行をクエリする方法の例を示しています。
query = GeoDistanceQuery('Col_GeoPoint', '32.5,116.5', 300000) rows, next_token, total_count, is_all_succeed, agg_results, group_by_results = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) ).v1_response() // Col_GeoPoint 列の値が中心点 '32.5,116.5'、半径 300000 メートル円の地理的範囲内にある行をクエリします。
地理的境界ボックスクエリ
地理的境界ボックスクエリを実行するには、左上隅と右下隅を使用して矩形の地理的エリアを指定します。 Tablestore は、指定された列の値が矩形の地理的エリア内にある行を返します。
パラメーター
パラメーター
説明
field_name
クエリ対象の列の名前。このパラメーターの値は GEOPOINT データ型です。
top_left
矩形地理領域の左上隅の座標ペア。
bottom_right
矩形地理領域の右下隅の座標ペア。矩形地理領域は、左上隅と右下隅を使用して指定できます。
座標ペアは
latitude,longitude
形式です。緯度の有効な値:[-90,+90]。経度の有効な値:[-180,+180]。例:35.8,-45.91
。query
検索インデックスのクエリステートメント。このパラメーターを GeoBoundingBoxQuery に設定します。
table_name
データテーブルの名前。
index_name
検索インデックスの名前。
例
次のサンプルコードは、Col_GeoPoint 列の値が左上隅が「30.9,112.0」で右下隅が「30.2,119.0」の矩形地理領域内にある行をクエリする方法の例を示しています。
query = GeoBoundingBoxQuery('Col_GeoPoint', '30.9,112.0', '30.2,119.0') rows, next_token, total_count, is_all_succeed, agg_results, group_by_results = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) ).v1_response() // Col_GeoPoint 列の値が左上隅 '30.9,112.0'、右下隅 '30.2,119.0' の矩形地理的範囲内にある行をクエリします。
地理的多角形クエリ
地理的多角形クエリを実行するには、複数点の座標ペアを使用して多角形の地理的エリアを指定します。 Tablestore は、指定された列の値が多角形の地理的エリア内にある行を返します。
パラメーター
パラメーター
説明
field_name
クエリ対象の列の名前。このパラメーターの値は GEOPOINT データ型です。
points
多角形地理領域を定義する点の座標ペア。複数の座標ペアを使用して多角形を指定できます。
座標ペアは
latitude,longitude
形式です。緯度の有効な値:[-90,+90]。経度の有効な値:[-180,+180]。例:35.8,-45.91
。query
検索インデックスのクエリステートメント。このパラメーターを GeoPolygonQuery に設定します。
table_name
データテーブルの名前。
index_name
検索インデックスの名前。
例
次のサンプルコードは、Col_Geopoint 列の値が「30.9,112.0」、「30.5,115.0」、「30.3, 117.0」、および「30.2,119.0」の座標で構成される多角形地理領域内にある行をクエリする方法の例を示しています。
query = GeoPolygonQuery('Col_GeoPoint', ['30.9,112.0', '30.5,115.0', '30.3, 117.0', '30.2,119.0']) rows, next_token, total_count, is_all_succeed, agg_results, group_by_results = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) ).v1_response() // Col_GeoPoint 列の値が座標 '30.9,112.0'、'30.5,115.0'、'30.3, 117.0'、'30.2,119.0' で構成される多角形地理的範囲内にある行をクエリします。
FAQ
参考資料
検索インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます。用語クエリ、複数用語クエリ、すべて一致クエリ、一致クエリ、フレーズ一致クエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、地理位置情報クエリ、ブールクエリ、KNNベクトル検索クエリ、ネストされたクエリ、存在クエリ。検索インデックスが提供するクエリメソッドを使用して、ビジネス要件に基づいて複数のディメンションからデータをクエリできます。
並べ替えとページング機能を使用して、クエリ条件を満たす行を並べ替えたりページングしたりできます。詳細については、並べ替えとページングを参照してください。
折りたたみ(重複排除)機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。このようにして、指定されたタイプのデータはクエリ結果に一度だけ表示されます。詳細については、折りたたみ(重複排除)を参照してください。
データテーブルのデータを分析する場合は、Search 操作の集計機能を使用するか、SQL ステートメントを実行できます。たとえば、最小値、最大値、合計、行の総数などを取得できます。詳細については、集計とSQL クエリを参照してください。
行を並べ替えることなく、クエリ条件を満たすすべての行を取得する場合は、ParallelScan および ComputeSplits 操作を呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンを参照してください。