TairGis是一种使用R-Tree做索引,支持地理信息系统GIS(Geographic Information System)相关接口的数据结构。Redis的原生GEO命令是使用GeoHash和Redis Sorted Set结构完成的,主要用于点的查询,TairGIS在此基础上还支持线、面的查询,功能更加强大。
前提条件 实例为Tair 内存型 。
说明 最新小版本将提供更丰富的功能与稳定的服务,建议将实例的小版本升级到最新,具体操作请参见升级小版本 。如果您的实例为集群架构或读写分离架构,请将代理节点的小版本也升级到最新,否则可能出现命令无法识别的情况。
注意事项 操作对象为Tair 实例中的TairGIS数据。
命令列表 表 1. TairGIS命令
命令
语法
说明
GIS.ADD
GIS.ADD area polygonName polygonWkt [polygonName polygonWkt ...]
在area中添加指定名称的多边形(可添加多个),使用WKT(Well-known text)描述。
说明 WKT是一种文本标记语言,用于描述矢量几何对象、空间参照系统及空间参照系统之间的转换。
GIS.GET
GIS.GET area polygonName
获取目标area中指定多边形的WKT信息。
GIS.GETALL
GIS.GETALL area [WITHOUTWKT]
获取目标area中所有多边形的名称和WKT信息。如果设置了WITHOUTWKT 选项,仅返回多边形的名称。
GIS.CONTAINS
GIS.CONTAINS area polygonWkt [WITHOUTWKT]
判断指定的点、线或面是否包含在目标area的多边形中,若包含,则返回目标area中命中的多边形数量与多边形信息。
GIS.WITHIN
GIS.WITHIN area polygonWkt [WITHOUTWKT]
判断目标area是否包含在指定的点、线或面中,若包含,则返回目标area中命中的多边形数量与多边形信息。
GIS.INTERSECTS
GIS.INTERSECTS area polygonWkt
判断指定的点、线或面与目标area的多边形是否相交,若相交,则返回目标area中与其相交的多边形数量与多边形信息。
GIS.SEARCH
GIS.SEARCH area [RADIUS longitude latitude distance M|KM|FT|MI] [MEMBER field distance M|KM|FT|MI] [GEOM geom] [COUNT count] [ASC|DESC] [WITHDIST] [WITHOUTWKT]
在指定经、纬度及半径距离范围内,查找目标area中的点。
GIS.DEL
GIS.DEL area polygonName
删除目标area中指定的多边形。
DEL
DEL key [key ...]
原生Redis命令,可以删除一条或多条TairGIS数据。
GIS.ADD 类别
说明
语法
GIS.ADD area polygonName polygonWkt [polygonName polygonWkt ...]
时间复杂度
O(log n)
命令描述
在area中添加指定名称的多边形(可添加多个),使用WKT(Well-known text)描述。
说明 WKT是一种文本标记语言,用于描述矢量几何对象、空间参照系统及空间参照系统之间的转换。
选项
返回值
执行成功:返回插入和更新成功的多边形数量。
其它情况返回相应的异常信息。
示例
命令示例:
GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'
返回示例:
(integer) 1
GIS.GET 类别
说明
语法
GIS.GET area polygonName
时间复杂度
O(1)
命令描述
获取目标area中指定多边形的WKT信息。
选项
area :一个几何概念。
PolygonName :多边形的名称。
返回值
执行成功:WKT信息。
area或polygonName不存在:nil。
其它情况返回相应的异常信息。
示例
提前执行GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'
命令。
命令示例:
GIS.GET hangzhou campus
返回示例:
'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'
GIS.GETALL 类别
说明
语法
GIS.GETALL area [WITHOUTWKT]
时间复杂度
O(n)
命令描述
获取目标area中所有多边形的名称和WKT信息。如果设置了WITHOUTWKT 选项,仅返回多边形的名称。
选项
返回值
示例
提前执行GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'
命令。
命令示例:
GIS.GETALL hangzhou
返回示例:
1) "campus"
2) "POLYGON((30 10,40 40,20 40,10 20,30 10))"
GIS.CONTAINS 类别
说明
语法
GIS.CONTAINS area polygonWkt [WITHOUTWKT]
时间复杂度
最理想情况:
最差情况:O(log n)
命令描述
判断指定的点、线或面是否包含在目标area的多边形中,若包含,则返回目标area中命中的多边形数量与多边形信息。
选项
返回值
示例
提前执行GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'
命令。
命令示例:
GIS.CONTAINS hangzhou 'POINT (30 11)'
返回示例:
1) "1"
2) 1) "campus"
2) "POLYGON((30 10,40 40,20 40,10 20,30 10))"
GIS.WITHIN 类别
说明
语法
GIS.WITHIN area polygonWkt [WITHOUTWKT]
时间复杂度
最理想情况:
最差情况:O(log n)
命令描述
判断目标area是否包含在指定的点、线或面中,若包含,则返回目标area中命中的多边形数量与多边形信息。
选项
返回值
示例
提前执行GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'
命令。
命令示例:
GIS.WITHIN hangzhou 'POLYGON ((30 5, 50 50, 20 50, 5 20, 30 5))'
返回示例:
1) "1"
2) 1) "campus"
2) "POLYGON((30 10,40 40,20 40,10 20,30 10))"
GIS.INTERSECTS 类别
说明
语法
GIS.INTERSECTS area polygonWkt
时间复杂度
最理想情况:
最差情况:O(log n)
命令描述
判断指定的点、线或面与目标area的多边形是否相交,若相交,则返回目标area中与其相交的多边形数量与多边形信息。
选项
返回值
示例
提前执行GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'
命令。
命令示例:
GIS.INTERSECTS hangzhou 'LINESTRING (30 10, 40 40)'
返回示例:
1) "1"
2) 1) "campus"
2) "POLYGON((30 10,40 40,20 40,10 20,30 10))"
GIS.SEARCH 类别
说明
语法
GIS.SEARCH area [RADIUS longitude latitude distance M|KM|FT|MI]
[MEMBER field distance M|KM|FT|MI]
[GEOM geom]
[COUNT count]
[ASC|DESC]
[WITHDIST]
[WITHOUTWKT]
时间复杂度
最理想情况:
最差情况:O(log n)
命令描述
在指定经、纬度及半径距离范围内,查找目标area中的点。
选项
area :一个几何概念。
RADIUS :传入经度(longitude)、纬度(latitude)、半径距离(distance)和半径单位(M表示米、KM表示千米、FT表示英尺、MI表示英里)进行搜索,例如RADIUS 15 37 200 KM
。
MEMBER :选择当前area中已存在的POINT作为搜索原点,并指定半径进行搜索,取值顺序为多边形名称(field)、半径(distance)、半径单位(M表示米、KM表示千米、FT表示英尺、MI表示英里),例如MEMBER Agrigento 100 KM
。
GEOM :按照WKT的格式设置搜索范围,可以是任意多边形,例如GEOM 'POLYGON((10 30,20 30,20 40,10 40))'
。
COUNT :用于限定返回的个数,例如COUNT 3
。
ASC |DESC :用于控制返回信息按照距离排序,ASC 表示根据中心位置,由近到远排序;DESC 表示由远到近排序。
WITHDIST :用于控制是否返回目标点与搜索原点的距离。
WITHOUTWKT :用于控制是否返回目标点的WKT信息,如果加上该参数,则不返回WKT信息。
说明 只能同时使用RADIUS 、MEMBER 和GEOM 中的一种方式。
返回值
示例
提前执行GIS.ADD Sicily "Palermo" "POINT (13.361389 38.115556)" "Catania" "POINT(15.087269 37.502669)"
命令。
命令示例:
GIS.SEARCH Sicily RADIUS 15 37 200 km WITHDIST ASC
返回示例:
1) (integer) 2
2) 1) "Catania"
2) "POINT(15.087269 37.502669)"
3) "56.4413"
4) "Palermo"
5) "POINT(13.361389 38.115556)"
6) "190.4424"
GIS.DEL 类别
说明
语法
GIS.DEL area polygonName
时间复杂度
O(log n)
命令描述
删除目标area中指定的多边形。
选项
area :一个几何概念。
PolygonName :多边形的名称。
返回值
执行成功:OK。
area或polygonName不存在:nil。
其它情况返回相应的异常信息。
示例
提前执行GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'
命令。
命令示例:
GIS.DEL hangzhou campus
返回示例:
OK