Redis Geo - Geospatial 명령어

개요

지리정보 관련 기능의 일부를 Redis에서도 간단하게나마 쓸 수 있다.

 

명령어

GEO 계열의 명령어도 있지만, 내부적으로 ZSet(Sorted Set)을 사용하기에 ZSet 계열 명령어도 일부 혼용 가능하다.

 

GEOADD

127.0.0.1:6379> help geoadd

  GEOADD key [NX|XX] [CH] longitude latitude member [longitude latitude member ...]
  summary: Add one or more geospatial items in the geospatial index represented using a sorted set
  since: 3.2.0
  group: geo

한 개 혹은 동시에 여러 개의 정보를 추가할 수 있다.

127.0.0.1:6379> geoadd mymap 126.98987242188554 37.55941851781025 seoul
(integer) 1

127.0.0.1:6379> geoadd mymap 126.70490404042661 37.45090270958281 incheon
(integer) 1

127.0.0.1:6379> geoadd mymap 127.01040005353661 37.28057047322624 suwon
(integer) 1

127.0.0.1:6379> geoadd mymap 127.39532142204321 36.339623748820216 daejon
(integer) 1

127.0.0.1:6379> geoadd mymap 126.8420829521135 35.147785432557086 gwangju
(integer) 1

127.0.0.1:6379> geoadd mymap 129.04055589134776 35.157693453092804 busan
(integer) 1

127.0.0.1:6379> geoadd mymap 127.49270219883297 36.62743582308363 cheongju
(integer) 1

127.0.0.1:6379> geoadd mymap 127.73269321810406 37.87415125284625 chuncheon
(integer) 1

구글맵에서 복사해 넣을 떄, 좌표의 위도와 경도를 잘 확인하고 입력하자.

  • 경도 = longitutde
  • 위도 = latitude

 

ZRANGE, ZREVRANGE, ZREM, ZCARD

// 데이터 정방향 조회
127.0.0.1:6379> zrange mymap 0 -1
1) "gwangju"
2) "busan"
3) "daejon"
4) "cheongju"
5) "incheon"
6) "suwon"
7) "seoul"
8) "chuncheon"

// 데이터 역방향 조회
127.0.0.1:6379> zrevrange mymap 0 -1
1) "chuncheon"
2) "seoul"
3) "suwon"
4) "incheon"
5) "cheongju"
6) "daejon"
7) "busan"
8) "gwangju"

// 멤버 갯수 확인
127.0.0.1:6379> zcard mymap
(integer) 8

ZSET 계열의 명령어로 데이터를 확인/ 관리할 수도 있다.

 

GEODIST

127.0.0.1:6379> help geodist

  GEODIST key member1 member2 [m|km|ft|mi]
  summary: Returns the distance between two members of a geospatial index
  since: 3.2.0
  group: geo

GEOADD로 데이터를 추가했으니, 두 도시간 거리를 확인해 보자.

// 기본 거리 조회는 m 단위
127.0.0.1:6379> geodist mymap seoul busan
"324172.0792"

// km로 파라미터를 주면 몇 km인지 거리를 측정한다
127.0.0.1:6379> geodist mymap seoul busan km
"324.1721"

 

GEORADIUS, GEORADIUSBYMEMBER

127.0.0.1:6379> help georadius

  GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key] [STOREDIST key]
  summary: Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a point
  since: 3.2.0
  group: geo

127.0.0.1:6379> help georadiusbymember

  GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key] [STOREDIST key]
  summary: Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a member
  since: 3.2.0
  group: geo
// 서울 기준 100km 이내 있는 도시는?
127.0.0.1:6379> georadiusbymember mymap seoul 100 km
1) "incheon"
2) "suwon"
3) "seoul"
4) "chuncheon"

// 서울 기준 50km 이내 있는 도시는?
127.0.0.1:6379> georadiusbymember mymap seoul 50 km
1) "incheon"
2) "suwon"
3) "seoul"

// 좌표를 안다면, 해당 좌표 기준 100km 이내의 도시는?
127.0.0.1:6379> georadius mymap 127 37 100 km
1) "daejon"
2) "cheongju"
3) "incheon"
4) "suwon"
5) "seoul"

 

GEOPOS

127.0.0.1:6379> help geopos

  GEOPOS key member [member ...]
  summary: Returns longitude and latitude of members of a geospatial index
  since: 3.2.0
  group: geo

등록한 도시의 좌표가 어떻게 되었더라?

127.0.0.1:6379> geopos mymap seoul
1) 1) "126.98986977338790894"
   2) "37.55941829536805443"

 

GEOHASH

127.0.0.1:6379> help geohash

  GEOHASH key member [member ...]
  summary: Returns members of a geospatial index as standard geohash strings
  since: 3.2.0
  group: geo

저장된 hash값을 확인할 수 있다.

127.0.0.1:6379> geohash mymap seoul busan
1) "wydm9trpqr0"
2) "wy7b02k2qv0"

Designed by JB FACTORY