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