地理空间查询
基于地理数据的查询
Redis Stack 的地理空间功能允许您查询与地理位置关联的数据。您可以查询特定半径内的位置,也可以基于几何形状进行查询,例如多边形。例如,多边形形状可以表示湖泊或建筑物的布局。
本文中的示例使用以下模式
字段名称 | 字段类型 |
---|---|
store_location |
GEO |
pickup_zone |
GEOSHAPE |
注意
使用 GEOSHAPE
字段类型需要 Redis Stack 7.2.0 或更高版本。半径
您可以通过将中心坐标 (经度、纬度)、半径和距离单位传递给 FT.SEARCH 命令来构造半径查询。
FT.SEARCH index "@geo_field:[lon lat radius unit]"
允许的单位是 m
、km
、mi
和 ft
。
以下查询查找伦敦周围 20 英里半径内的所有自行车商店
FT.SEARCH idx:bicycle "@store_location:[-0.1778 51.5524 20 mi]"
形状
唯一支持的形状是点和多边形。您可以查询包含或在给定几何形状内的多边形或点。
FT.SEARCH index "@geo_shape_field:[{WITHIN|CONTAINS|INTERSECTS|DISJOINT} $shape] PARAMS 2 shape "shape_as_wkt" DIALECT 3
以下是此查询的更详细说明
- 字段名称:您需要将
geo_shape_field
替换为您要查询的GEOSHAPE
字段的名称。 - 空间运算符:空间运算符定义数据库中的形状与您要搜索的形状之间的关系。您可以使用
WITHIN
、CONTAINS
、INTERSECTS
或DISJOINT
。WITHIN
查找数据库中位于给定形状内的任何形状。CONTAINS
查询围绕给定形状的任何形状。INTERSECTS
查找与提供形状具有共同坐标的任何形状。DISJOINT
查找与提供形状没有共同点的任何形状。 - 参数:查询引用一个名为
shape
的参数。您可以在此处使用任何参数名称。您需要使用PARAMS
子句来设置参数值。该值遵循 几何的知名文本表示。支持的类型是POINT(x y)
和POLYGON((x1 y1, x2 y2, ...))
。 - 方言:基于形状的查询从查询方言的第三版开始可用。
以下示例查询验证自行车是否位于取货区内
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