地理空间查询

基于地理数据查询

Redis Stack 的地理空间功能允许您查询与地理位置相关联的数据。您可以查询特定半径范围内的位置,也可以基于几何形状(例如多边形)查询。例如,多边形形状可以表示湖泊或建筑物的布局。

本文中的示例使用以下架构

字段名称 字段类型
store_location GEO
pickup_zone GEOSHAPE
注意

需要 Redis Stack 7.2.0 或更高版本才能使用 GEOSHAPE 字段类型。

半径

您可以通过将中心坐标(经度、纬度)、半径和距离单位传递给 FT.SEARCH 命令来构建半径查询。

FT.SEARCH index "@geo_field:[lon lat radius unit]"

允许的单位为 mkmmift

以下查询查找伦敦周围 20 英里半径范围内的所有自行车商店

FT.SEARCH idx:bicycle "@store_location:[-0.1778 51.5524 20 mi]"

形状

唯一支持的形状是点和多边形。你可以查询包含或位于给定几何形状内的多边形或点。

FT.SEARCH index "@geo_shape_field:[{WITHIN|CONTAINS} $shape] PARAMS 2 shape "shape_as_wkt" DIALECT 3

以下是此查询的更详细说明

  1. 字段名称:你需要将 geo_shape_field 替换为要查询的 GEOSHAPE 字段的名称。
  2. 空间运算符:空间运算符定义数据库中的形状与你要搜索的形状之间的关系。你可以使用 WITHINCONTAINSWITHIN 查找数据库中位于给定形状内的任何形状。CONTAINS 查询包围给定形状的任何形状。
  3. 参数:查询引用名为 shape 的参数。你可以在此处使用任何参数名称。你需要使用 PARAMS 子句设置参数值。该值遵循 几何的众所周知文本表示。支持的类型为 POINT(x y)POLYGON((x1 y1, x2 y2, ...))
  4. 方言:基于形状的查询自查询方言的第三个版本以来可用。

以下示例查询验证自行车是否在接送区内

FT.SEARCH idx:bicycle "@pickup_zone:[CONTAINS $bike]" PARAMS 2 bike "POINT(-0.1278 51.5074)" DIALECT 3

如果你想找到大约在欧洲境内的所有接送区,那么可以使用以下查询

FT.SEARCH idx:bicycle "@pickup_zone:[WITHIN $europe]" PARAMS 2 europe "POLYGON((-25 35, 40 35, 40 70, -25 70, -25 35))" DIALECT 3
对本页进行评分