Docs Menu

$geoWithin

์ด ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ

$geoWithin

์ง€์ •๋œ ๋ชจ์–‘ ์•ˆ์—๋งŒ ์กด์žฌํ•˜๋Š” ์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์ง€์ •๋œ ๋ชจ์–‘์€ GeoJSON Polygon(๋‹จ์ผ ๊ณ ๋ฆฌ ๋˜๋Š” ๋‹ค์ค‘ ๊ณ ๋ฆฌ), GeoJSON MultiPolygon ๋˜๋Š” ๊ธฐ์กด ์ขŒํ‘œ ์Œ์œผ๋กœ ์ •์˜๋œ ๋ชจ์–‘์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. $geoWithin ์—ฐ์‚ฐ์ž๋Š” $geometry ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GeoJSON ๊ฐ์ฒด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ขŒํ‘œ๊ณ„(CRS)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GeoJSON ๋‹ค๊ฐํ˜• ๋˜๋Š” ๋‹ค์ค‘ ๋‹ค๊ฐํ˜•์„ ์ง€์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

{
<location field>: {
$geoWithin: {
$geometry: {
type: <"Polygon" or "MultiPolygon"> ,
coordinates: [ <coordinates> ]
}
}
}
}

๋‹จ์ผ ๋ฐ˜๊ตฌ๋ณด๋‹ค ๋ฉด์ ์ด ํฐ GeoJSON ๋„ํ˜•์„ ์ง€์ •ํ•˜๋Š” $geoWithin ์ฟผ๋ฆฌ์˜ ๊ฒฝ์šฐ, ๊ธฐ๋ณธ CRS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณด์™„์ ์ธ ๋„ํ˜•์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ง€์ • MongoDB CRS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ๊ณ ๋ฆฌ GeoJSON ๋‹ค๊ฐํ˜•์„ ์ง€์ •ํ•˜๋ ค๋ฉด $geometry ํ‘œํ˜„์‹์— ์‚ฌ์šฉ์ž ์ง€์ • MongoDB CRS๋ฅผ ์ง€์ •ํ•˜๋Š” ๋‹ค์Œ ํ”„๋กœํ† ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

{
<location field>: {
$geoWithin: {
$geometry: {
type: "Polygon" ,
coordinates: [ <coordinates> ],
crs: {
type: "name",
properties: { name: "urn:x-mongodb:crs:strictwinding:EPSG:4326" }
}
}
}
}
}

์‚ฌ์šฉ์ž ์ง€์ • MongoDB CRS๋Š” ์‹œ๊ณ„ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์˜ ์™€์ธ๋”ฉ ์ˆœ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, $geoWithin๊ฐ€ ๋‹จ์ผ ๋ฐ˜๊ตฌ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๋ฉด์ ์„ ๊ฐ–๋Š” ๋‹จ์ผ ๊ณ ๋ฆฌ GeoJSON ๋‹ค๊ฐํ˜•์ด ์žˆ๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ง€์ •๋œ ๋‹ค๊ฐํ˜•์ด ๋‹จ์ผ ๋ฐ˜๊ตฌ๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ MongoDB CRS๋ฅผ ์‚ฌ์šฉํ•œ $geoWithin์˜ ๋™์ž‘์€ ๊ธฐ๋ณธ CRS๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. 'ํฐ' ๋‹ค๊ฐํ˜•๋„ ์ฐธ์กฐํ•˜์„ธ์š”.

ํ‰๋ฉด์˜ ๋ ˆ๊ฑฐ์‹œ ์ขŒํ‘œ ์Œ์œผ๋กœ ์ •์˜๋œ ๋ชจ์–‘์— ํฌํ•จ๋˜๋„๋ก ์ฟผ๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

{
<location field>: {
$geoWithin: { <shape operator>: <coordinates> }
}
}

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ์–‘ ์—ฐ์‚ฐ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • $box,

  • $polygon,

  • $center (์›์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค), ๊ทธ๋ฆฌ๊ณ 

  • $centerSphere (๊ตฌ์˜ ์›์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค).

์ค‘์š”

๊ฒฝ๋„์™€ ์œ„๋„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ longitude, latitude ์ˆœ์œผ๋กœ ์ขŒํ‘œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

$geoWithin์—๋Š” ์ง€๋ฆฌ ๊ณต๊ฐ„์  ์ธ๋ฑ์Šค๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ง€๋ฆฌ ๊ณต๊ฐ„์  ์ธ๋ฑ์Šค๋Š” ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•ฉ๋‹ˆ๋‹ค. 2dsphere์™€ 2d ์ง€๋ฆฌ ๊ณต๊ฐ„์  ์ธ๋ฑ์Šค ๋ชจ๋‘ $geoWithin๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

$geoWithin ์—ฐ์‚ฐ์ž๋Š” ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ MongoDB๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•˜๋Š” ์ง€๋ฆฌ ๊ณต๊ฐ„์  $near ๋˜๋Š” $nearSphere ์ฟผ๋ฆฌ๋ณด๋‹ค $geoWithin ์ฟผ๋ฆฌ๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$geoWithin ๋‹ค๊ฐํ˜•์„ ํฌํ•จํ•œ๋‹ค๊ณ  ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ตฌ์„ฑ ์š”์†Œ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ๊ตฌ์„ฑ ์š”์†Œ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋‹ค๋ฅธ ํด๋ฆฌ๊ณค์„ ํฌํ•จํ•œ๋‹ค๊ณ  ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

$geoWithin ์˜ ๊ฒฝ์šฐ ๋‹จ์ผ ๋ฐ˜๊ตฌ๋ณด๋‹ค ํฐ ๋ฉด์ ์„ ๊ฐ€์ง„ ๋‹จ์ผ ๊ณ ๋ฆฌ ๋‹ค๊ฐํ˜•์„ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ the custom MongoDB coordinate reference system in the $geometry ํ‘œํ˜„์‹์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด $geoWithin ์ด ๋ณด์™„ ๊ธฐํ•˜ ๋„ํ˜•์„ ์ฟผ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๊ตฌ๋ณด๋‹ค ํฐ ๋ฉด์ ์„ ๊ฐ€์ง„ ๋‹ค๋ฅธ ๋ชจ๋“  GeoJSON ๋‹ค๊ฐํ˜•์˜ ๊ฒฝ์šฐ $geoWithin ๋Š” ๋ณด์™„ ๊ธฐํ•˜ ๋„ํ˜•์„ ์ฟผ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” GeoJSONPolygon๋‚ด์— ์™„์ „ํžˆ ์กด์žฌํ•˜๋Š” loc ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๊ฐํ˜•์˜ ๋ฉด์ ์ด ๋‹จ์ผ ๋ฐ˜๊ตฌ์˜ ๋ฉด์ ๋ณด๋‹ค ์ž‘์Šต๋‹ˆ๋‹ค.

db.places.find(
{
loc: {
$geoWithin: {
$geometry: {
type : "Polygon" ,
coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ]
}
}
}
}
)

๋‹จ์ผ ๋ฐ˜๊ตฌ๋ณด๋‹ค ํฐ ๋ฉด์ ์„ ๊ฐ€์ง„ ๋‹จ์ผ ๊ณ ๋ฆฌ ๋‹ค๊ฐํ˜•์˜ ๊ฒฝ์šฐ "ํฐ" ๋‹ค๊ฐํ˜• ๋‚ด๋ถ€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฉด์ ์ด ๋‹จ์ผ ๋ฐ˜๊ตฌ๋ณด๋‹ค ํฐ ๋‹จ์ผ ๋ง GeoJSON ๋‹ค๊ฐํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌํ•˜๋ ค๋ฉด $geometry ํ‘œํ˜„์‹์— ์‚ฌ์šฉ์ž ์ง€์ • MongoDB ์ขŒํ‘œ ์ฐธ์กฐ ์‹œ์Šคํ…œ์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ:

db.places.find(
{
loc: {
$geoWithin: {
$geometry: {
type : "Polygon" ,
coordinates: [
[
[ -100, 60 ], [ -100, 0 ], [ -100, -60 ], [ 100, -60 ], [ 100, 60 ], [ -100, 60 ]
]
],
crs: {
type: "name",
properties: { name: "urn:x-mongodb:crs:strictwinding:EPSG:4326" }
}
}
}
}
}
)

์ด ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ