地理位置查询包括地理距离查询(GeoDistanceQuery)、地理长方形范围查询(GeoBoundingBoxQuery)和地理多边形范围查询(GeoPolygonQuery)三种方式。

前提条件

  • 已初始化OTSClient。具体操作,请参见初始化
  • 已创建数据表并写入数据。
  • 已在数据表上创建多元索引。具体操作,请参见创建多元索引

地理距离查询(GeoDistanceQuery)

GeoDistanceQuery根据一个中心点和距离条件查询表中的数据,当一个地理位置点到指定的中心点的距离不超过指定的值时,满足查询条件。

  • 参数
    参数说明
    field_name列名,类型为Geopoint。
    center_point中心地理坐标点,是一个经纬度值。

    格式为纬度,经度,纬度在前,经度在后,且纬度范围为[-90,+90],经度范围[-180,+180]。例如35.8,-45.91

    distance距离中心点的距离,类型为Double。单位为米。
    query多元索引的查询语句。设置查询类型为GeoDistanceQuery。
    table_name数据表名称。
    index_name多元索引名称。
  • 示例

    查询表中g列的值距离中心点'32.5,116.5'不超过300000米的数据。

    query = GeoDistanceQuery('g', '32.5,116.5', 300000)
    rows, next_token, total_count, is_all_succeed = client.search(
        table_name, index_name, 
        SearchQuery(query, limit=100, get_total_count=True), 
        ColumnsToGet(return_type=ColumnReturnType.ALL)
    )

地理长方形范围查询(GeoBoundingBoxQuery)

GeoBoundingBoxQuery根据一个长方形范围的地理位置边界条件查询表中的数据,当一个地理位置点落在给出的长方形范围内时,满足查询条件。

  • 参数
    参数说明
    field_name列名,类型为Geopoint。
    top_left长方形框的左上角的坐标。
    bottom_right长方形框的右下角的坐标,通过左上角和右下角可以确定一个唯一的长方形。

    格式为纬度,经度,纬度在前,经度在后,且纬度范围为[-90,+90],经度范围[-180,+180]。例如35.8,-45.91

    query多元索引的查询语句。设置查询类型为GeoBoundingBoxQuery。
    table_name数据表名称。
    index_name多元索引名称。
  • 示例

    查询表中g列的值在左上角坐标为'30.9,112.0',右下角坐标为'30.2,119.0'的长方形范围内的数据。

    query = GeoBoundingBoxQuery('g', '30.9,112.0', '30.2,119.0')
    rows, next_token, total_count, is_all_succeed = client.search(
        table_name, index_name, 
        SearchQuery(query, limit=100, get_total_count=True), 
        ColumnsToGet(return_type=ColumnReturnType.ALL)
    )

地理多边形范围查询(GeoPolygonQuery)

GeoPolygonQuery根据一个多边形范围的地理位置边界条件查询表中的数据,当一个地理位置点落在指定的多边形范围内时,满足查询条件。

  • 参数
    参数说明
    field_name列名,类型为Geopoint。
    points组成多边形范围的坐标,通过多个坐标可以确定一个唯一的多边形。

    格式为纬度,经度,纬度在前,经度在后,且纬度范围为[-90,+90],经度范围[-180,+180]。例如35.8,-45.91

    query多元索引的查询语句。设置查询类型为GeoPolygonQuery。
    table_name数据表名称。
    index_name多元索引名称。
  • 示例

    查询表中g列的值在由'30.9,112.0'、'30.5,115.0'、'30.3, 117.0'和'30.2,119.0'坐标组成的多边形范围内的数据。

    query = GeoPolygonQuery('g', ['30.9,112.0', '30.5,115.0', '30.3, 117.0', '30.2,119.0'])
    rows, next_token, total_count, is_all_succeed = client.search(
        table_name, index_name, 
        SearchQuery(query, limit=100, get_total_count=True), 
        ColumnsToGet(return_type=ColumnReturnType.ALL)
    )