全部產品
Search
文件中心

Tair:GIS

更新時間:Jun 30, 2024

TairGis是一種使用R-Tree做索引,支援地理資訊系統GIS(Geographic Information System)相關介面的資料結構。Redis的原生GEO命令是使用GeoHash和Redis Sorted Set結構完成的,主要用於點的查詢,TairGIS在此基礎上還支援線、面的查詢,功能更加強大。

主要特性

  • 使用R-Tree作為索引儲存。

  • 支援線、面的相關查詢(含相交查詢)。

  • 通過GIS.SEARCH可實現原生Redis GEORADIUS命令的功能。

該Module已開源,更多資訊請參見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資料。

說明

本文的命令文法定義如下:

  • 大寫關鍵字:命令關鍵字。

  • 斜體:變數。

  • [options]:選擇性參數,不在括弧中的參數為必選。

  • A|B:該組參數互斥,請進行二選一或多選一。

  • ...:前面的內容可重複。

GIS.ADD

類別

說明

文法

GIS.ADD area polygonName polygonWkt [polygonName polygonWkt ...]

時間複雜度

O(log n)

命令描述

在area中添加指定名稱的多邊形(可添加多個),使用WKT(Well-known text)描述。

說明

WKT是一種文本標記語言,用於描述向量幾何對象、空間參照系統及空間參照系統之間的轉換。

選項

  • area:一個幾何概念。

  • PolygonName:多邊形的名稱。

  • polygonWkt:多邊形的描述資訊,表示現實世界的經、緯度,使用WKT(Well-known text)描述,支援如下類型。

    • POINT:描述一個點的WKT資訊,例如'POINT (120.086631 30.138141)',表示該POINT位於經度120.086631,緯度30.138141。

    • LINESTRING:描述一條線的WKT資訊,由兩個POINT組成,例如'LINESTRING (30 10, 40 40)'

    • POLYGON:描述一個多邊形的WKT資訊,由多個POINT組成,例如'POLYGON ((31 20, 29 20, 29 21, 31 31))'

    說明
    • 經度的取值範圍為(-180,180), 緯度的取值範圍為(-90,90)。

    • 不支援如下集合類型:MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRY和COLLECTION。

傳回值

  • 執行成功:返回插入和更新成功的多邊形數量。

  • 其它情況返回相應的異常資訊。

樣本

命令樣本:

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選項,僅返回多邊形的名稱。

選項

  • area:一個幾何概念。

  • WITHOUTWKT:用於控制是否返回多邊形的WKT資訊,如果加上該參數,則不返回多邊形的WKT資訊。

傳回值

  • 執行成功:返回多邊形名稱和WKT資訊,如果設定了WITHOUTWKT選項,僅返回多邊形的名稱。

  • area不存在:nil。

  • 其它情況返回相應的異常資訊。

樣本

提前執行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]

時間複雜度

  • 最理想情況:log公式

  • 最差情況:O(log n)

命令描述

判斷指定的點、線或面是否包含在目標area的多邊形中,若包含,則返回目標area中命中的多邊形數量與多邊形資訊。

選項

  • area:一個幾何概念。

  • polygonWkt:指定與目標area進行比較的多邊形描述資訊,使用WKT(Well-known text)描述,支援如下類型。

    • POINT:描述一個點的WKT資訊。

    • LINESTRING:描述一條線的WKT資訊。

    • POLYGON:描述一個多邊形的WKT資訊。

  • WITHOUTWKT:用於控制是否返回多邊形的WKT資訊,如果加上該參數,則不返回多邊形的WKT資訊。

傳回值

  • 執行成功:命中的多邊形數量與多邊形資訊。

  • area不存在:empty list or set。

  • 其它情況返回相應的異常資訊。

樣本

提前執行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]

時間複雜度

  • 最理想情況:log公式

  • 最差情況:O(log n)

命令描述

判斷目標area是否包含在指定的點、線或面中,若包含,則返回目標area中命中的多邊形數量與多邊形資訊。

選項

  • area:一個幾何概念。

  • polygonWkt:指定與目標area進行比較的多邊形描述資訊,使用WKT(Well-known text)描述,支援如下類型。

    • POINT:描述一個點的WKT資訊。

    • LINESTRING:描述一條線的WKT資訊。

    • POLYGON:描述一個多邊形的WKT資訊。

    說明

    不支援MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRY和COLLECTION。

  • WITHOUTWKT:用於控制是否返回多邊形的WKT資訊,如果加上該參數,則不返回多邊形的WKT資訊。

傳回值

  • 執行成功:命中的多邊形數量與多邊形資訊。

  • area不存在:empty list or set。

  • 其它情況返回相應的異常資訊。

樣本

提前執行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

時間複雜度

  • 最理想情況:log公式

  • 最差情況:O(log n)

命令描述

判斷指定的點、線或面與目標area的多邊形是否相交,若相交,則返回目標area中與其相交的多邊形數量與多邊形資訊。

選項

  • area:一個幾何概念。

  • polygonWkt:指定與目標area進行比較的多邊形描述資訊,使用WKT(Well-known text)描述,支援如下類型。

    • POINT:描述一個點的WKT資訊。

    • LINESTRING:描述一條線的WKT資訊。

    • POLYGON:描述一個多邊形的WKT資訊。

  • WITHOUTWKT:用於控制是否返回多邊形的WKT資訊,如果加上該參數,則不返回多邊形的WKT資訊。

傳回值

  • 執行成功:命中的多邊形數量與多邊形資訊。

  • area不存在:empty list or set。

  • 其它情況返回相應的異常資訊。

樣本

提前執行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]

時間複雜度

  • 最理想情況:log公式

  • 最差情況: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資訊。

說明

只能同時使用RADIUSMEMBERGEOM中的一種方式。

傳回值

  • 執行成功:命中的目標點數量與WKT資訊。

  • area不存在:empty list or set。

  • 其它情況返回相應的異常資訊。

樣本

提前執行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