GEO 地理位置データ型
Redis 3.2 では、GEO という新しいデータ型が導入されました。これは主に地理的位置情報を保存し、その情報に基づいて操作を行うためのものです。
GEO の基本概念
GEO は順序付き集合(zset)であり、各要素には以下の属性があります:
- 位置名 (member)
- 経度 (longitude)
- 緯度 (latitude)
これらの属性を使用して、Redis で地理的位置の座標を保存し、以下のような操作を行うことができます。
- 2つの位置間の距離を計算する (geodist)
- 特定の位置の座標を取得する (geopos)
- 特定の位置の geohash 値を取得する (geohash)
- 指定された経度・緯度から一定範囲内の地理的位置情報を取得する (georadius)
- 既存の位置情報から一定範囲内の地理的位置情報を取得する (georadiusbymember)
GEO の使用例
- 地理的なフェンシング:ユーザーまたは車両などのエンティティを地理的な境界内に設定し、境界を出入りしたときにイベントをトリガーします。
- 近くの人々:デート、ソーシャル、旅行などのアプリケーションで、周辺の人々や観光地を迅速に検索します。
- 配送サービス:配送先の経度・緯度情報を取得し、最も近い配送員や倉庫を見つけ、注文を割り当てます。
- 住所検索:地図アプリケーションで、特定の住所周辺の店舗や施設を迅速に検索します。
- 動的情報:タクシー・アプリケーションで、車両の位置情報をリアルタイムで更新し、より正確な車両の推奨やルート計画を行います。
GEO 関連コマンド
GEOADD: 地理的位置の座標を追加する
指定された地理的位置(緯度、経度、名前)を指定されたキーに追加します。
SYNTAX
GEOADD key longitude latitude member [longitude latitude member ...]
| パラメータ | 説明 |
|---|---|
| key | Redis キー |
| longitude | 経度 |
| latitude | 緯度 |
| member | メンバー |
このコマンドは、GEORADIUS や GEORADIUSBYMEMBER コマンドを使って半径検索などを行うために、sorted set にデータを保存します。
注意点:
- 経度と緯度を入力する際は、経度を先に記述します。
- 有効な経度は -180 度から 180 度です。
- 有効な緯度は -85.05112878 度から 85.05112878 度です。
例:
redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
GEOPOS: 地理的位置の座標を取得する
指定されたキーから全ての位置要素の位置(経度と緯度)を返します。
SYNTAX
GEOPOS key member [member ...]
| パラメータ | 説明 |
|---|---|
| key | Redis キー |
| member | メンバー |
例:
redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
redis> GEOPOS Sicily Palermo Catania NonExisting
1) 1) "13.361389338970184"
2) "38.115556395496299"
2) 1) "15.087267458438873"
2) "37.50266842333162"
3) (nil)
GEODIST: 2つの位置間の距離を計算する
2つの指定された位置間の距離を返します。
SYNTAX
GEODIST key member1 member2 [unit]
| 単位パラメータ | 説明 |
|---|---|
| m | メートル |
| km | キロメートル |
| mi | マイル |
| ft | フィート |
例:
redis> GEODIST Sicily Palermo Catania
"166274.15156960039"
redis> GEODIST Sicily Palermo Catania km
"166.27415156960038"
redis> GEODIST Sicily Palermo Catania mi
"103.31822459492736"
GEOHASH: 位置要素の Geohash 値を取得する
指定された位置要素の Geohash 値を取得します。
SYNTAX
GEOHASH key member [member ...]
例:
redis> GEOHASH Sicily Palermo Catania
1) "sqc8b49rny0"
2) "sqdtr74hyu0"
GEORADIUS: 指定された経度・緯度からの一定範囲内の地理的位置情報を取得する
指定された経度・緯度を中心として、指定された最大距離以内のすべての位置要素を返します。
SYNTAX
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]
例:
redis> GEORADIUS Sicily 15 37 200 km WITHDIST
1) 1) "Palermo"
2) "190.4424"
2) 1) "Catania"
2) "56.4413"
GEORADIUSBYMEMBER: 指定された位置を中心として一定範囲内の地理的位置情報を取得する
指定された位置要素を中心として、指定された最大距離以内のすべての位置要素を返します。
例:
redis> GEORADIUSBYMEMBER Sicily Agrigento 100 km
1) "Agrigento"
2) "Palermo"