gis

๊ฐ•์ฝ”๋”ฉยท2025๋…„ 10์›” 24์ผ

๋ ˆ๋””์Šค

๋ชฉ๋ก ๋ณด๊ธฐ
11/21

๐ŸŒ 2.7.2 ์ง€๋ฆฌ์  ๊ณต๊ฐ„ ์ธ๋ฑ์Šค (Geospatial Index)
๐Ÿ“˜ ๊ฐœ์š”

์ง€๋ฆฌ์  ๊ณต๊ฐ„ ์ •๋ณด๋Š” ์œ„๋„(latitude)์™€ ๊ฒฝ๋„(longitude)๋ฅผ ์ด์šฉํ•ด ์ง€๊ตฌ์ƒ ์œ„์น˜๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

Redis์—์„œ๋Š” ์ด ์ •๋ณด๋ฅผ ํ™œ์šฉํ•ด ์œ„์น˜ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰, ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ, ๋ฐ˜๊ฒฝ ๋‚ด ๊ฒ€์ƒ‰ ๋“ฑ ๊ณต๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๋ถ€์ ์œผ๋กœ Sorted Set(์ •๋ ฌ๋œ ์ง‘ํ•ฉ) ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿงญ ๊ธฐ๋ณธ ๊ฐœ๋…
๐Ÿ”น ์ €์žฅ ์›๋ฆฌ

์œ„์น˜ ์ •๋ณด๋Š” Sorted Set ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜๋ฉฐ, ๊ฐ ๋ฉค๋ฒ„์˜ ์Šค์ฝ”์–ด(score)๋Š” GeoHash ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

GeoHash๋Š” ์œ„๋„ยท๊ฒฝ๋„๋ฅผ ๋ฌธ์ž ํ˜•ํƒœ๋กœ ์ธ์ฝ”๋”ฉํ•œ ๊ฐ’์œผ๋กœ, ๊ฐ€๊นŒ์šด ์œ„์น˜์ผ์ˆ˜๋ก ํ•ด์‹œ๊ฐ€ ์œ ์‚ฌํ•œ ์ ‘๋‘์–ด๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

๋„์‹œ ์œ„๋„ ๊ฒฝ๋„ GeoHash
Tokyo 35.6812362 139.7671248 xn76urx660p
Osaka 34.7024854 135.4937619 xn76um7jts9k
๐Ÿงฉ ์‹คํ–‰ ์˜ˆ์‹œ

1๏ธโƒฃ ์œ„์น˜ ์ •๋ณด ์ถ”๊ฐ€

GEOADD mygeo 139.7671248 35.6812362 "Tokyo Station" \
135.4937619 34.7024854 "Osaka Station"
(integer) 2

2๏ธโƒฃ ๋‘ ์ง€์  ๊ฐ„ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ (๋ฏธํ„ฐ ๋‹จ์œ„)

GEODIST mygeo "Tokyo Station" "Osaka Station"
"403362.9301"

3๏ธโƒฃ ์œ„์น˜์˜ GeoHash ์กฐํšŒ

GEOHASH mygeo "Tokyo Station"
"xn76urx660p"

TYPE ๋ช…๋ น์–ด๋กœ ํ™•์ธํ•˜๋ฉด ๋‚ด๋ถ€์ ์œผ๋กœ zset ํ˜•์‹์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TYPE mygeo

๊ฒฐ๊ณผ: zset

๐Ÿงฎ GeoHash์˜ ์›๋ฆฌ

์œ„๋„์™€ ๊ฒฝ๋„๋ฅผ ๋ฌธ์ž์—ด(๋ณดํ†ต Base32) ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ €์žฅ.

์ธ์ ‘ ์ง€์—ญ์ผ์ˆ˜๋ก ํ•ด์‹œ ์ ‘๋‘๋ถ€๊ฐ€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํ•ด์‹œ ์ž๋ฆฟ์ˆ˜๊ฐ€ ๋งŽ์„์ˆ˜๋ก ์ •๋ฐ€๋„๊ฐ€ ์ฆ๊ฐ€ํ•˜์ง€๋งŒ, ์˜์—ญ ๋ฒ”์œ„๋Š” ์ข์•„์ง‘๋‹ˆ๋‹ค.

์˜ˆ:

xn76urx6 โ†’ ๋„์ฟ„ ๊ทผ์ฒ˜

xn76um7j โ†’ ์˜ค์‚ฌ์นด ๊ทผ์ฒ˜

๐Ÿงฐ ์ฃผ์š” ๋ช…๋ น์–ด ์š”์•ฝ
๋ช…๋ น์–ด ๊ธฐ๋Šฅ ์‹œ๊ฐ„ ๋ณต์žก๋„
GEOADD key lon lat member [lon lat member ...] ์œ„์น˜ ์ •๋ณด ์ถ”๊ฐ€ O(logN)
GEOPOS key member [...] ๋ฉค๋ฒ„์˜ ์œ„๋„ยท๊ฒฝ๋„ ๋ฐ˜ํ™˜ O(1)
GEODIST key m1 m2 [M KM FT
GEOHASH key member [...] GeoHash ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜ O(1)
GEOSEARCH key FROMMEMBER member BYRADIUS r M KM ...** ํŠน์ • ๋ฐ˜๊ฒฝ ๋‚ด ์œ„์น˜ ๊ฒ€์ƒ‰
GEOSEARCHSTORE dest source FROMMEMBER member BYRADIUS ... ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค๋ฅธ ํ‚ค์— ์ €์žฅ O(N + logM)
๐Ÿ“ ๊ฑฐ๋ฆฌ ๋‹จ์œ„
๋‹จ์œ„ ์„ค๋ช…
M ๋ฏธํ„ฐ (๊ธฐ๋ณธ ๋‹จ์œ„)
KM ํ‚ฌ๋กœ๋ฏธํ„ฐ
FT ํ”ผํŠธ
MI ๋งˆ์ผ
๐Ÿงฎ ํ™œ์šฉ ์˜ˆ์‹œ

๋„์ฟ„/์˜ค์‚ฌ์นด ์œ„์น˜ ์ €์žฅ

GEOADD building-location 139.7671248 35.6812362 "Tokyo Station" \
135.4937619 34.7024854 "Osaka Station"

GeoHash ํ™•์ธ

GEOHASH building-location "Tokyo Station" "Osaka Station"
1) "xn76urx660p"
2) "xn76um7jts9k"

์œ„๋„ยท๊ฒฝ๋„ ํ™•์ธ

GEOPOS building-location "Tokyo Station"
1) "139.76712494988577271"
2) "35.68123554127875963"

๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ

GEODIST building-location "Tokyo Station" "Osaka Station"
"403362.9301"

๐Ÿงญ ๋ฐ˜๊ฒฝ ๊ฒ€์ƒ‰ (๋ฐ˜๊ฒฝ ๋‚ด ์œ„์น˜ ์ฐพ๊ธฐ)

๊ฒฝ๋„ 140, ์œ„๋„ 30 ๊ธฐ์ค€์œผ๋กœ ๋ฐ˜๊ฒฝ 700km ์ด๋‚ด ์œ„์น˜ ๊ฒ€์ƒ‰

GEORADIUS building-location 140 30 700 km
1) "Osaka Station"
2) "Tokyo Station"

๋ฐ˜๊ฒฝ 650km๋กœ ์ค„์ด๋ฉด?

GEORADIUS building-location 140 30 650 km
1) "Tokyo Station"

๋ฐ˜๊ฒฝ 100km์ด๋ฉด?

(empty array)

Tokyo์™€ Osaka ์ค‘ ์–ด๋А ์œ„์น˜๊ฐ€ ๋ฐ˜๊ฒฝ ๋‚ด ํฌํ•จ๋˜๋Š”์ง€ ํ•œ๋ˆˆ์— ํ™•์ธ ๊ฐ€๋Šฅ.

โš™๏ธ GEORADIUSBYMEMBER (๋ฉค๋ฒ„ ์ค‘์‹ฌ ๋ฐ˜๊ฒฝ ๊ฒ€์ƒ‰)

Tokyo Station์„ ์ค‘์‹ฌ์œผ๋กœ ๋ฐ˜๊ฒฝ 400km ์ด๋‚ด ๊ฒ€์ƒ‰

GEORADIUSBYMEMBER building-location "Tokyo Station" 400 km
1) "Tokyo Station"

๋ฐ˜๊ฒฝ 410km ์ด๋‚ด ๊ฒ€์ƒ‰

GEORADIUSBYMEMBER building-location "Tokyo Station" 410 km
1) "Osaka Station"
2) "Tokyo Station"

Tokyo๋ฅผ ์ค‘์‹ฌ์œผ๋กœ 400km๊นŒ์ง€๋Š” ์ž๊ธฐ ์ž์‹ ๋งŒ ํฌํ•จ๋˜๊ณ ,
410km ์ด์ƒ์ด๋ฉด Osaka๊นŒ์ง€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

โš ๏ธ ์ฃผ์˜ โ€” ๋ช…๋ น์–ด ๋ณ€๊ฒฝ

Redis 6.2 ์ดํ›„ ๋ฒ„์ „์—์„œ๋Š” GEORADIUS์™€ GEORADIUSBYMEMBER ๋ช…๋ น์ด ํ์ง€ ์˜ˆ์ •์ด๋ฉฐ,
๋Œ€์‹  GEOSEARCH ๋ฐ GEOSEARCHSTORE ๋ช…๋ น์œผ๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค.

ํ์ง€ ์˜ˆ์ • ๋Œ€์ฒด ๋ช…๋ น
GEORADIUS GEOSEARCH
GEORADIUSBYMEMBER GEOSEARCHSTORE
๐Ÿ“˜ ์š”์•ฝ ์ •๋ฆฌ
ํ•ญ๋ชฉ ์„ค๋ช…
์ž๋ฃŒ ๊ตฌ์กฐ ๋‚ด๋ถ€์ ์œผ๋กœ Sorted Set ์‚ฌ์šฉ
ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ, ๋ฐ˜๊ฒฝ ๋‚ด ๊ฒ€์ƒ‰, ์œ„์น˜ ์ €์žฅ
ํ™œ์šฉ ๋ถ„์•ผ ๋งค์žฅ ์ฐพ๊ธฐ, ๋ฐฐ๋‹ฌ ๋ฐ˜๊ฒฝ ๊ณ„์‚ฐ, ๊ทผ์ฒ˜ ์‚ฌ์šฉ์ž ๊ฒ€์ƒ‰
ํ•ต์‹ฌ ๋ช…๋ น์–ด GEOADD, GEODIST, GEOHASH, GEOSEARCH, GEOSEARCHSTORE
GeoHash ์œ„๋„ยท๊ฒฝ๋„๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ธ์ ‘ ์œ„์น˜๋ฅผ ํ‘œํ˜„

profile
์ฃผ๋‹ˆ์–ด ํ’€์Šคํƒ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€