TairGISは、Rツリーインデックスを使用し、地理情報システム (GIS) に関連するAPIをサポートするデータ構造です。 GeohashおよびRedis Sorted Setを使用してポイントをクエリできるネイティブのRedis GEOコマンドと比較して、TairGISはポイント、ラインストリング、およびポリゴンをクエリできるため、より多くの機能を提供します。
特徴
クエリとストレージにR-treeインデックスを使用します。
セットの共通部分のクエリを含む、ラインストリングおよびポリゴンのクエリをサポートします。
ネイティブRedisのGEORADIUS
コマンドと同じ目的を果たすGIS.SEARCHコマンドを提供します。
モジュールはオープンソースです。 詳細については、『GitHub』をご参照ください。
前提条件
Tair DRAMベースのインスタンスが作成されます。
説明 最新のマイナーバージョンは、より多くの機能とより高い安定性を提供します。 インスタンスを最新のマイナーバージョンに更新することを推奨します。 詳細については、「インスタンスのマイナーバージョンの更新」をご参照ください。 インスタンスがクラスターまたは読み書き分離インスタンスの場合、インスタンスのプロキシノードを最新のマイナーバージョンに更新することを推奨します。 これにより、すべてのコマンドを期待どおりに実行できます。
使用上の注意
管理するTairGISデータは、Tairインスタンスに保存されます。
サポートされるコマンド
表 1. TairGISコマンド
コマンド | 構文 | 説明 |
GIS.ADD | GIS.ADDエリアpolygonName polygonWkt [polygonName polygonWkt ...]
| 1つ以上のポリゴンをエリアに追加します。 ポリゴンは、周知のテキスト (WKT) で記述される。
説明 WKTは、マップ上のベクトル幾何オブジェクト、空間オブジェクトの空間参照システム、および空間参照システム間の変換を表すためのテキストマークアップ言語です。 |
GIS.GET | GIS.GETエリアpolygonName
| 領域内のポリゴンのWKT表現を取得します。 |
GIS.GETALL | GIS.GETALLエリア [WITHOUTWKT]
| 領域内のすべてのポリゴンの名前とWKT表現を取得します。 WITHOUTWKTパラメーターを指定した場合、ポリゴンの名前のみが返されます。 |
GIS.CONTAINS | GIS. containins area polygonWkt [WITHOUTWKT]
| ポイント、ラインストリング、またはポリゴンが特定の領域内のポリゴンにあるかどうかを確認します。 はいの場合、このコマンドは、領域内の点、線列、またはポリゴンを含むポリゴンの数とWKT表現を返します。 |
GIS.WITHIN | GIS.WITHINエリアpolygonWkt [WITHOUTWKT]
| 領域が点、線列、またはポリゴン内にあるかどうかをチェックします。 はいの場合、このコマンドは、ポイント、ラインストリング、またはポリゴン内にある領域内のポリゴンの番号とWKT表現を返します。 |
GIS.INTERSECTS | GIS.INTERSECTSエリアpolygonWkt
| ポイント、ラインストリング、またはポリゴンが特定の領域内のポリゴンと交差するかどうかを確認します。 はいの場合、このコマンドは、点、線列、またはポリゴンと交差する領域内のポリゴンの数とWKT表現を返します。 |
GIS.SEARCH | GIS.SEARCH area [RADIUS経度緯度距離M | KM | FT | MI] [MEMBER field distance M | KM | FT | MI] [GEOM geom] [COUNT count] [ASC | DESC] [WITHDIST] [WITHOUTWKT]
| 特定の経度と緯度の位置の半径内にあるエリア内のポイントを照会します。 |
GIS.DEL | GIS.DELエリアpolygonName
| 特定のポリゴンを領域から削除します。 |
DEL | DELキー [キー...]
| 1つ以上のTairGISキーを削除します。 これはネイティブのRedisコマンドです。 |
説明 このトピックで使用されるコマンド構文の規則を次に示します。
Uppercase keyword
: commandキーワードを示します。
イタリックテキスト
: 変数を示します。
[options]
: 囲まれたパラメータがオプションであることを示します。 括弧で囲まれていないパラメータを指定する必要があります。
A | B
: 縦棒 (|) で区切られたパラメータが相互に排他的であることを示します。 指定できるパラメーターは1つだけです。
...
: このシンボルの前にあるパラメーターを繰り返し指定できることを示します。
GIS.ADD
パラメーター | 説明 |
構文 | GIS.ADDエリアpolygonName polygonWkt [polygonName polygonWkt ...]
|
時間の複雑さ
| O (ログn) |
コマンド説明 | 1つ以上のポリゴンをエリアに追加します。 ポリゴンは、周知のテキスト (WKT) で記述される。
説明 WKTは、マップ上のベクトル幾何オブジェクト、空間オブジェクトの空間参照システム、および空間参照システム間の変換を表すためのテキストマークアップ言語です。 |
パラメーター | |
Output | |
例: | サンプルコマンド: GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'
サンプル出力: (integer) 1
|
GIS.GET
パラメーター | 説明 |
構文 | GIS.GETエリアpolygonName
|
時間の複雑さ | O(1) |
コマンド説明 | 領域内のポリゴンのWKT表現を取得します。 |
パラメーター | |
Output | |
例: | GIS.ADD hangzhou campus 'POLYGON ((30 10、40、20 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エリア [WITHOUTWKT]
|
時間の複雑さ | O(n) |
コマンド説明 | 領域内のすべてのポリゴンの名前とWKT表現を取得します。 WITHOUTWKTパラメーターを指定した場合、ポリゴンの名前のみが返されます。 |
パラメーター | |
Output | |
例: | GIS.ADD hangzhou campus 'POLYGON ((30 10、40、20 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. containins area polygonWkt [WITHOUTWKT]
|
時間の複雑さ | 最適な時間の複雑さ: 最も望ましい時間の複雑さ: O(log n)
|
コマンド説明 | ポイント、ラインストリング、またはポリゴンが特定の領域内のポリゴンにあるかどうかを確認します。 はいの場合、このコマンドは、領域内の点、線列、またはポリゴンを含むポリゴンの数とWKT表現を返します。 |
パラメーター | |
Output | |
例: | GIS.ADD hangzhou campus 'POLYGON ((30 10、40、20 40、20 40、10 20、30 10))' コマンドは事前に実行されます。
サンプルコマンド: GIS.CONTAINS hangzhou 'POINT (30 11)'
サンプル出力: G1) "1"
2) 1) "campus"
2) "POLYGON((30 10,40 40,20 40,10 20,30 10))"IS.CONTAINS hangzhou 'POINT (30 11)'
|
GIS.WITHIN
パラメーター | 説明 |
構文 | GIS.WITHINエリアpolygonWkt [WITHOUTWKT]
|
時間の複雑さ | 最適な時間の複雑さ: 最も望ましい時間の複雑さ: O(log n)
|
コマンド説明 | 領域が点、線列、またはポリゴン内にあるかどうかをチェックします。 はいの場合、このコマンドは、ポイント、ラインストリング、またはポリゴン内にある領域内のポリゴンの番号とWKT表現を返します。 |
パラメーター | |
Output | |
例: | GIS.ADD hangzhou campus 'POLYGON ((30 10、40、20 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エリアpolygonWkt
|
時間の複雑さ | 最適な時間の複雑さ: 最も望ましい時間の複雑さ: O(log n)
|
コマンド説明 | ポイント、ラインストリング、またはポリゴンが特定の領域内のポリゴンと交差するかどうかを確認します。 はいの場合、このコマンドは、点、線列、またはポリゴンと交差する領域内のポリゴンの数とWKT表現を返します。 |
パラメーター | |
Output | |
例: | GIS.ADD hangzhou campus 'POLYGON ((30 10、40、20 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: 幾何学的な概念。 RADIUS: 経度、緯度、半径、半径の単位。 単位の有効な値: M (メートル) 、KM (キロメートル) 、FT (フィート) 、およびMI (マイル) 。 例: RADIUS 15 37 200 KM 。 MEMBER: 基点として使用される領域内の点とその点の半径。 値は、ポリゴン (フィールド) の名前、検索半径 (距離) 、および半径単位の順序で指定する必要があります。 半径単位の有効な値: M (メートル) 、KM (キロメートル) 、FT (フィート) 、およびMI (マイル) 。 例: MEMBERアグリジェント100 KM GEOM: 検索範囲を指定するWKTで記述されたポリゴン。 例: GEOM「POLYGON((10 30,20 30,20 40,10 40)) 」 COUNT: 返すことができるエントリの最大数。 例: COUNT 3 ASC | DESC: 返されたエントリがランク付けされる順序。 ASCは、返されたエントリが、中心までの距離に基づいてショートからロングにランク付けされることを示します。 DESCは、返されたエントリが、中心までの距離に基づいてロングからショートにランク付けされることを示します。 WITHDIST: 特定のポイントとMEMBERパラメーターで指定されたポイント間の距離を返すかどうかを指定します。 WITHOUTWKT: 点のWKT表現を返すかどうかを指定します。 このパラメーターを指定すると、ポイントのWKT表現は返されません。
説明 RADIUS、MEMBER、およびGEOMパラメーターのいずれかのみを指定できます。 |
Output | |
例: | 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エリアpolygonName
|
時間の複雑さ | O (ログn) |
コマンド説明 | 特定のポリゴンを領域から削除します。 |
パラメーター | |
Output | |
例: | GIS.ADD hangzhou campus 'POLYGON ((30 10、40、20 40、20 40、10 20、30 10))' コマンドは事前に実行されます。
サンプルコマンド: GIS.DEL hangzhou campus
サンプル出力: OK
|