TairGIS命令
本章节介绍TairGIS数据支持的命令。
TairGIS简介
TairGis是一种使用R-Tree做索引,支持地理信息系统GIS(Geographic Information System)相关接口的数据结构。Redis的原生GEO命令是使用GeoHash和Redis Sorted Set结构完成的,主要用于点的查询,TairGIS在此基础上还支持线、面的查询,功能更加强大。
主要特性:
- 使用R-Tree做索引存储。
- 支持点、线、面的相关查询(含相交查询)。
使用前提
请注意,本章节介绍的命令只有在满足以下条件时才能生效。
- Redis实例为云Redis企业版性能增强型实例。
- 操作对象为性能增强型实例中的TairGIS数据。
命令列表
类型 | 命令列表 | 说明 |
---|---|---|
GIS.ADD | GIS.ADD <area> <PolygonName> <POLYGON> [<PolygonName2> <POLYGON> ...] | 在area中添加一个名为PolygonName的多边形,使用WKT(Well-known text)描述。可同时添加多个多边形。
说明 WKT是一种文本标记语言,用于描述矢量几何对象、空间参照系统及空间参照系统之间的转换。
|
GIS.GET | GIS.GET <area> <PolygonName> | 在area中查找名为PolygonName的多边形的WKT信息。 |
GIS.DEL | GIS.DEL <area> <PolygonName> | 删除area下的名为PolygonName的多边形。 |
GIS.SEARCH | GIS.SEARCH <area> <POINT | LINESTRING | POLYGON> | 查找一个点/线/面所在的多边形,返回多边形的名称和WKT信息。 |
GIS.CONTAINS | GIS.CONTAINS <area> <POINT | LINESTRING | POLYGON> | 判断指定的点/线/面是否包含在area中的某个多边形内。 |
GIS.INTERSECTS | GIS.INTERSECTS <area> <POINT | LINESTRING | POLYGON> | 判断给定点/线/面和area中包含的多边形的相交情况。 |
参数说明
参数 | 说明 |
---|---|
area | 一个几何区域。 |
PolygonName | 一个多边形的名称。 |
POINT | 描述一个点的WKT信息。 |
LINESTRING | 描述一条线的WKT信息。 |
POLYGON | 描述一个多边形的WKT信息。 |
GIS.ADD
- 语法
GIS.ADD <area> <polygonName> <polygonWkt> [<polygonName> <polygonWkt> ...]
- 时间复杂度
O(log n)
- 命令描述
在area中添加一个名为polygonName的多边形,使用WKT表示,例如
'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'
。可以添加多个多边形。 - 返回值
- 成功:0。
- 覆盖掉之前的值:1。
- 其它情况返回相应的异常信息。
- 使用示例
127.0.0.1:6379> GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))' (integer) 0 127.0.0.1:6379> GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))' (integer) 1 127.0.0.1:6379> GIS.GET hangzhou campus "POLYGON((30 10,40 40,20 40,10 20,30 10))"
GIS.GET
- 语法
GIS.GET <area> <polygonName>
- 时间复杂度
O(1)
- 命令描述
在area中查找名为PolygonName的多边形的WKT信息。
- 返回值
- 成功:返回查询到的WKT。
- area或者polygonName不存在:nil。
- 其它情况返回相应的异常信息。
- 使用示例
127.0.0.1:6379> GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))' (integer) 0 127.0.0.1:6379> GIS.GET hangzhou campus "POLYGON((30 10,40 40,20 40,10 20,30 10))" 127.0.0.1:6379> GIS.GET hangzhou not-exists (nil) 127.0.0.1:6379> GIS.GET not-exists campus (nil)
GIS.DEL
- 语法
GIS.DEL <area> <polygonName>
- 时间复杂度
O(log n)
- 命令描述
删除area下的名为PolygonName的多边形。
- 返回值
- 成功:OK。
- area或者polygonName不存在:nil。
- 其它情况返回相应的异常信息。
- 使用示例
127.0.0.1:6379> GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))' (integer) 0 127.0.0.1:6379> GIS.GET hangzhou campus "POLYGON((30 10,40 40,20 40,10 20,30 10))" 127.0.0.1:6379> GIS.DEL hangzhou not-exists (nil) 127.0.0.1:6379> GIS.DEL not-exists campus (nil) 127.0.0.1:6379> GIS.DEL hangzhou campus OK 127.0.0.1:6379> GIS.GET hangzhou campus (nil)
GIS.SEARCH
- 语法
GIS.SEARCH <area> <POINT/LINESTRING/POLYGONNAME>
- 时间复杂度
- 最好情况:O(logM n)
- 最差情况:log(n)
- 命令描述
查找一个点/线/面所在的多边形,返回多边形的名称和WKT信息。
- 返回值
- 成功:返回查询到的WKT。
- 未查询到:nil。
- 其它情况返回相应的异常信息。
- 使用示例
127.0.0.1:6379> GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))' (integer) 0 127.0.0.1:6379> GIS.SEARCH hangzhou 'POINT (30 11)' 1) "0" 2) 1) "campus" 2) "POLYGON((30 10,40 40,20 40,10 20,30 10))" 127.0.0.1:6379> GIS.SEARCH hangzhou 'LINESTRING (30 10, 40 40)' 1) "0" 2) 1) "campus" 2) "POLYGON((30 10,40 40,20 40,10 20,30 10))" 127.0.0.1:6379> GIS.SEARCH hangzhou 'POLYGON ((31 20, 29 20, 29 21, 31 31))' 1) "0" 2) 1) "campus" 2) "POLYGON((30 10,40 40,20 40,10 20,30 10))"
GIS.CONTAINS
- 语法
GIS.CONTAINS <area> <POINT/LINESTRING/POLYGONNAME>
- 时间复杂度
- 最好情况:O(logM n)
- 最差情况:log(n)
- 命令描述
判断指定的点/线/面是否包含在area中的某个多边形内。
- 返回值
- 成功:返回包含指定点/线/面的多边形的WKT信息。
- 未查询到:nil。
- 其它情况返回相应的异常信息。
- 使用示例
127.0.0.1:6379> GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))' (integer) 0 127.0.0.1:6379> GIS.CONTAINS hangzhou 'POINT (30 11)' 1) "0" 2) 1) "campus" 2) "POLYGON((30 10,40 40,20 40,10 20,30 10))" 127.0.0.1:6379> GIS.CONTAINS hangzhou 'LINESTRING (30 10, 40 40)' 1) "0" 2) 1) "campus" 2) "POLYGON((30 10,40 40,20 40,10 20,30 10))" 127.0.0.1:6379> GIS.CONTAINS hangzhou 'POLYGON ((31 20, 29 20, 29 21, 31 31))' 1) "0" 2) 1) "campus" 2) "POLYGON((30 10,40 40,20 40,10 20,30 10))"
GIS.INTERSECTS
- 语法
GIS.INTERSECTS <area> <POINT/LINESTRING/POLYGONNAME>
- 时间复杂度
- 最好情况:O(logM n)
- 最差情况:log(n)
- 命令描述
判断指定的点/线/面与area中的某个多边形的相交情况。
- 返回值
- 成功:返回与指定点/线/面相交的多边形的WKT信息。
- 未查询到:nil。
- 其它情况返回相应的异常信息。
- 使用示例
127.0.0.1:6379> GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))' (integer) 0 127.0.0.1:6379> GIS.INTERSECTS hangzhou 'POINT (30 11)' 1) "0" 2) 1) "campus" 2) "POLYGON((30 10,40 40,20 40,10 20,30 10))" 127.0.0.1:6379> GIS.INTERSECTS hangzhou 'LINESTRING (30 10, 40 40)' 1) "0" 2) 1) "campus" 2) "POLYGON((30 10,40 40,20 40,10 20,30 10))" 127.0.0.1:6379> GIS.INTERSECTS hangzhou 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))' 1) "0" 2) 1) "campus" 2) "POLYGON((30 10,40 40,20 40,10 20,30 10))" 127.0.0.1:6379>
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论