Docs Menu
Docs Home
/ /
Atlas Device SDK
/ / /

์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ - Kotlin SDK

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

  • ์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ ์œ ํ˜•
  • GeoPoint
  • GeoCircle
  • GeoBox
  • GeoPolygon
  • ์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ ์œ ์ง€
  • GeoJSON ํ˜ธํ™˜ ํด๋ž˜์Šค ๋งŒ๋“ค๊ธฐ
  • ์ž„๋ฒ ๋””๋“œ ํด๋ž˜์Šค ์‚ฌ์šฉ
  • ์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ ์ฟผ๋ฆฌ
  • GeoCircle
  • GeoBox
  • GeoPolygon

๋ฒ„์ „ 1.11.0์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ.

์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ ๋˜๋Š” "์ง€๋ฆฌ ๋ฐ์ดํ„ฐ"๋Š” ์ง€๊ตฌ ํ‘œ๋ฉด์˜ ์ง€์ ๊ณผ ๊ธฐํ•˜ํ•™์  ๊ฐ์ฒด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

Kotlin SDK ๋ฒ„์ „ 1.11.0 ์ด์ƒ์—๋Š” ์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ง€์›ํ•˜๋Š” ์‹คํ—˜์  ์ง€๋ฆฌ ๊ณต๊ฐ„์  API๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฟผ๋ฆฌ๋Š” ์ฃผ์–ด์ง„ ์ ์ด ๋„ํ˜• ๋‚ด์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ง€์ •๋œ ์ ์—์„œ 15km ์ด๋‚ด์— ์žˆ๋Š” ๋ชจ๋“  ์ปคํ”ผ์ˆ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฒ„์ „ 1.13.0์—์„œ ๋ณ€๊ฒฝ๋จ : Atlas Device Sync์—์„œ ์ง€์›๋˜๋Š” ์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ

Kotlin SDK ๋ฒ„์ „ 1.13.0 ์ด์ƒ์—๋Š” Atlas Device Sync์—์„œ ์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋™๊ธฐํ™”๋œ ์˜์—ญ์—์„œ ์ง€๋ฆฌ ๊ณต๊ฐ„์  ์ฟผ๋ฆฌ๋ฅผ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „ ๋ฒ„์ „์˜ SDK์—์„œ ์ง€๋ฆฌ ๊ณต๊ฐ„์  ์ฟผ๋ฆฌ๋ฅผ ๊ตฌ๋…ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋ณด์ •์šฉ ์“ฐ๊ธฐ์™€ ํ•จ๊ป˜ ์„œ๋ฒ„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋™๊ธฐํ™” ๊ตฌ๋… ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋™๊ธฐํ™” ๊ตฌ๋… ๊ด€๋ฆฌ - Kotlin SDK๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Device Sync ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ App Services ๋ฌธ์„œ์—์„œ ์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Kotlin SDK๋Š” ๋‹ค์Œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง€๋ฆฌ์  ๊ณต๊ฐ„ ์ฟผ๋ฆฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

  • GeoPoint

  • GeoCircle

  • GeoBox

  • GeoPolygon

SDK๋Š” ์ด๋Ÿฌํ•œ ์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์ œ๊ณตํ•˜์—ฌ ์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ ์ฟผ๋ฆฌ๋ฅผ ๊ฐ„์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์ง์ ‘ ์œ ์ง€ํ•  ์ˆ˜ ๋Š” ์—†์Šต๋‹ˆ๋‹ค .

์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด ํŽ˜์ด์ง€์˜ ์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ ์œ ์ง€ ์„น์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.

GeoPoint ๋Š” ์ง€๊ตฌ ํ‘œ๋ฉด์˜ ํŠน์ • ์œ„์น˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ ์œ ํ˜•์€ GeoPoints ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ„์น˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

GeoCircle ์€ ์ง€๊ตฌ ํ‘œ๋ฉด์— ์›์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์›์˜ ์ค‘์‹ฌ์— GeoPoint ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์›์˜ ๋ฐ˜์ง€๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๊ฑฐ๋ฆฌ ๊ฐ์ฒด๋ฅผ ์ œ๊ณตํ•˜์—ฌ GeoCircle ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

๋ฐ˜์ง€๋ฆ„์€ ํ‚ฌ๋กœ๋ฏธํ„ฐ, ๋งˆ์ผ, ๋„ ๋˜๋Š” ๋ผ๋””์•ˆ ๋‹จ์œ„๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์—์„œ๋Š” 2๊ฐœ์˜ ์›์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค:

val circle1 = GeoCircle.create(
center = GeoPoint.create(47.8, -122.6),
radius = Distance.fromKilometers(44.4)
)
val circle2 = GeoCircle.create(
center = GeoPoint.create(47.3, -121.9),
radius = Distance.fromDegrees(0.25)
)
GeoCircles 2๊ฐœ
ํด๋ฆญํ•˜์—ฌ ํ™•๋Œ€

GeoBox ๋Š” ์ง€๊ตฌ ํ‘œ๋ฉด์— ์‚ฌ๊ฐํ˜•์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์™ผ์ชฝ ํ•˜๋‹จ(๋‚จ์„œ) ๋ชจ์„œ๋ฆฌ์™€ ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ(๋ถ๋™์ชฝ) ๋ชจ์„œ๋ฆฌ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์‚ฌ๊ฐํ˜•์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์—์„œ๋Š” 2 ์ƒ์ž๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

val box1 = GeoBox.create(
bottomLeft = GeoPoint.create(47.3, -122.7),
topRight = GeoPoint.create(48.1, -122.1)
)
val box2 = GeoBox.create(
bottomLeft = GeoPoint.create(47.5, -122.4),
topRight = GeoPoint.create(47.9, -121.8)
)
2 GeoBox
ํด๋ฆญํ•˜์—ฌ ํ™•๋Œ€

GeoPolygon ์€ ์ง€๊ตฌ ํ‘œ๋ฉด์˜ ๋‹ค๊ฐํ˜• ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๊ฐํ˜•์€ ๋‹ซํžŒ ๋ชจ์–‘์ด๋ฏ€๋กœ ์ตœ์†Œ 4๊ฐœ ์ ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋‹ค๊ฐํ˜• ๋ชจ์–‘์„ ์ •์˜ํ•˜๋Š” ๋ฐ 3๊ฐœ, ๋ชจ์–‘์„ ๋‹ซ๋Š” ๋ฐ ๋„ค ๋ฒˆ์งธ ์ ).

์ค‘์š”

๋‹ค๊ฐํ˜•์˜ ๋„ค ๋ฒˆ์งธ ์ ์€ ์ฒซ ๋ฒˆ์งธ ์ ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜๋‚˜ ์ด์ƒ์˜ "ํ™€"์„ ์ •์˜ํ•˜์—ฌ ๋‹ค๊ฐํ˜• ๋‚ด์˜ ์˜์—ญ์„ ์ œ์™ธํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ๋ฉ์€ ๊ฒฝ๊ณ„๊ฐ€ ์™ธ๋ถ€ ๋‹ค๊ฐํ˜• ๋‚ด์— ์™„์ „ํžˆ ๋“ค์–ด๊ฐ€๋Š” ๋˜ ๋‹ค๋ฅธ ๋‹ค๊ฐํ˜•์ž…๋‹ˆ๋‹ค. ๊ตฌ๋ฉ์€ ์„œ๋กœ ์ค‘์ฒฉ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์น˜๊ฐ€ ํ™€์ˆ˜์˜ ๋ง์— ํฌํ•จ๋œ ๊ฒฝ์šฐ ์œ„์น˜๋Š” ๋‹ค๊ฐํ˜• ๋‚ด๋ถ€๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์ œ์—์„œ๋Š” 3๊ฐœ์˜ ๋‹ค๊ฐํ˜•์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค:

  • ์ ์ด 5๊ฐœ์ธ ๊ธฐ๋ณธ ๋‹ค๊ฐํ˜•

  • ๋‹จ์ผ ๊ตฌ๋ฉ์ด ์žˆ๋Š” ๋™์ผํ•œ ๋‹ค๊ฐํ˜•

  • ๋‘ ๊ฐœ์˜ ๊ตฌ๋ฉ์ด ์žˆ๋Š” ๋™์ผํ•œ ๋‹ค๊ฐํ˜•

// Create a basic polygon
val basicPolygon = GeoPolygon.create(
listOf(
GeoPoint.create(48.0, -122.8),
GeoPoint.create(48.2, -121.8),
GeoPoint.create(47.6, -121.6),
GeoPoint.create(47.0, -122.0),
GeoPoint.create(47.2, -122.6),
GeoPoint.create(48.0, -122.8)
)
)
// Create a polygon with a single hole
val outerRing = listOf(
GeoPoint.create(48.0, -122.8),
GeoPoint.create(48.2, -121.8),
GeoPoint.create(47.6, -121.6),
GeoPoint.create(47.0, -122.0),
GeoPoint.create(47.2, -122.6),
GeoPoint.create(48.0, -122.8)
)
val hole1 = listOf(
GeoPoint.create(47.8, -122.6),
GeoPoint.create(47.7, -122.2),
GeoPoint.create(47.4, -122.6),
GeoPoint.create(47.6, -122.5),
GeoPoint.create(47.8, -122.6)
)
val polygonWithOneHole = GeoPolygon.create(outerRing, hole1)
// Add a second hole to the polygon
val hole2 = listOf(
GeoPoint.create(47.55, -122.05),
GeoPoint.create(47.5, -121.9),
GeoPoint.create(47.3, -122.1),
GeoPoint.create(47.55, -122.05)
)
val polygonWithTwoHoles = GeoPolygon.create(outerRing, hole1, hole2)
3 GeoPolygons
ํด๋ฆญํ•˜์—ฌ ํ™•๋Œ€

์ค‘์š”

์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์ง€์†ํ•  ์ˆ˜ ์—†์Œ

ํ˜„์žฌ๋Š” ์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ๋งŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ ์œ ํ˜•์€ ์ง์ ‘ ์œ ์ง€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค . ์˜ˆ๋ฅผ ๋“ค์–ด GeoBox ์œ ํ˜•์˜ ์†์„ฑ์€ ์„ ์–ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์œ ํ˜•์€ ์ง€๋ฆฌ๊ณต๊ฐ„ ์ฟผ๋ฆฌ์˜ ์ธ์ˆ˜๋กœ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋ ค๋ฉด GeoJSON ์‚ฌ์–‘์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Kotlin SDK๋กœ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด Realm ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” GeoJSON ํ˜ธํ™˜ ์ž„๋ฒ ๋””๋“œ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

GeoJSON ์‚ฌ์–‘์„ ์ค€์ˆ˜ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ํฌํ•จ๋œ Realm ๊ฐ์ฒด ( EmbeddedRealmObject ๋ฅผ ์ƒ์†ํ•˜๋Š” ํด๋ž˜์Šค)๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  2. ์ตœ์†Œํ•œ GeoJSON ์‚ฌ์–‘์— ํ•„์š”ํ•œ ๋‘ ๊ฐœ์˜ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    • ๊ฐ’์ด "Point"์ธ type ์†์„ฑ์— ๋งคํ•‘๋˜๋Š” ์œ ํ˜• String ์†์„ฑ์˜ ํ•„๋“œ: var type: String = "Point"

    • ์œ„๋„/๊ฒฝ๋„ ์Œ์„ ํฌํ•จํ•˜๋Š” ์˜์—ญ ์Šคํ‚ค๋งˆ์˜ coordinates ์†์„ฑ์— ๋งคํ•‘๋˜๋Š” RealmList<Double> ์œ ํ˜•์˜ ํ•„๋“œ: var coordinates: RealmList<Double> = realmListOf()

๋‹ค์Œ ์˜ˆ์ œ์—์„œ๋Š” ์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” CustomGeoPoint ์ด๋ผ๋Š” ํฌํ•จ๋œ ํด๋ž˜์Šค๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

class CustomGeoPoint : EmbeddedRealmObject {
constructor(latitude: Double, longitude: Double) {
coordinates.apply {
add(longitude)
add(latitude)
}
}
// Empty constructor required by Realm
constructor() : this(0.0, 0.0)
// Name and type required by Realm
var coordinates: RealmList<Double> = realmListOf()
// Name, type, and value required by Realm
private var type: String = "Point"
@Ignore
var latitude: Double
get() = coordinates[1]
set(value) {
coordinates[1] = value
}
@Ignore
var longitude: Double
get() = coordinates[0]
set(value) {
coordinates[0] = value
}
}

๋‹ค์Œ ์˜ˆ์ œ์™€ ๊ฐ™์ด ์˜์—ญ ๋ชจ๋ธ์—์„œ customGeoPoint ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

class Company : RealmObject {
@PrimaryKey
var _id: ObjectId = ObjectId()
var location: CustomGeoPoint? = null
}

๊ทธ๋Ÿฐ ๋‹ค์Œ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ Realm์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

realm.writeBlocking {
copyToRealm(
Company().apply {
location = CustomGeoPoint(47.68, -122.35)
}
)
copyToRealm(
Company().apply {
location = CustomGeoPoint(47.9, -121.85)
}
)
}

๋‹ค์Œ ์ด๋ฏธ์ง€๋Š” ๋‘ ๊ฐœ์˜ Company ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

2๊ฐœ์˜ GeoPoint
ํด๋ฆญํ•˜์—ฌ ํ™•๋Œ€

์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌํ•˜๋ ค๋ฉด GEOWITHIN ์—ฐ์‚ฐ์ž๋ฅผ RQL ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” ๋‚ด์žฅ๋œ ๊ฐ์ฒด์˜ coordinates ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์ ์ด ํ•ด๋‹น ๊ฐ์ฒด์˜ ์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ชจ์–‘ ๋‚ด์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌํ•˜๋Š” ํ˜•์‹์€ ์ง€๋ฆฌ ๋ฐ์ดํ„ฐ ๋ฆฌ์ „์˜ ํ˜•ํƒœ์— ๊ด€๊ณ„์—†์ด ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”

์ง€๋ฆฌ ๊ณต๊ฐ„์  ๋ฐ์ดํ„ฐ์—๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜ํ™”๋œ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์ œ์—์„œ๋Š” ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์— ๋Œ€ํ•ด ์ฟผ๋ฆฌํ•˜์—ฌ ํ˜•ํƒœ ๋‚ด์˜ ํšŒ์‚ฌ ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค.

val companiesInLargeCircle =
realm.query<Company>("location GEOWITHIN $circle1").find()
println("Companies in large circle: ${companiesInLargeCircle.size}")
val companiesInSmallCircle =
realm.query<Company>("location GEOWITHIN $circle2").find()
println("Companies in small circle: ${companiesInSmallCircle.size}")
Companies in large circle: 1
Companies in small circle: 0
GeoCircle ์ฟผ๋ฆฌ ์˜ˆ์‹œ
ํด๋ฆญํ•˜์—ฌ ํ™•๋Œ€
val companiesInLargeBox =
realm.query<Company>("location GEOWITHIN $box1").find()
println("Companies in large box: ${companiesInLargeBox.size}")
val companiesInSmallBox =
realm.query<Company>("location GEOWITHIN $box2").find()
println("Companies in small box: ${companiesInSmallBox.size}")
Companies in large box: 1
Companies in small box: 2
GeoBox ์˜ˆ์ œ ์ฟผ๋ฆฌ
val companiesInBasicPolygon =
realm.query<Company>("location GEOWITHIN $basicPolygon").find()
println("Companies in basic polygon: ${companiesInBasicPolygon.size}")
val companiesInPolygonWithHoles =
realm.query<Company>("location GEOWITHIN $polygonWithTwoHoles").find()
println("Companies in polygon with holes: ${companiesInPolygonWithHoles.size}")
Companies in basic polygon: 2
Companies in polygon with holes: 1
GeoPolygon ์ฟผ๋ฆฌํ•˜๊ธฐ ์˜ˆ์‹œ
ํด๋ฆญํ•˜์—ฌ ํ™•๋Œ€

๋Œ์•„๊ฐ€๊ธฐ

๊ด€๊ณ„