File: geo_s2within.js

package info (click to toggle)
mongodb 1%3A2.4.10-5
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 82,464 kB
  • sloc: cpp: 740,225; ansic: 152,098; sh: 13,820; python: 11,864; makefile: 1,012; perl: 922; pascal: 617; java: 452; lisp: 222; asm: 174
file content (36 lines) | stat: -rw-r--r-- 1,595 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Test some cases that might be iffy with $within, mostly related to polygon w/holes.
t = db.geo_s2within
t.drop()
t.ensureIndex({geo: "2dsphere"})

somepoly = { "type" : "Polygon",
             "coordinates" : [ [ [40,5], [40,6], [41,6], [41,5], [40,5]]]}

t.insert({geo: { "type" : "LineString", "coordinates": [ [ 40.1, 5.1], [40.2, 5.2]]}})
// This is only partially contained within the polygon.
t.insert({geo: { "type" : "LineString", "coordinates": [ [ 40.1, 5.1], [42, 7]]}})

res = t.find({ "geo" : { "$within" : { "$geometry" : somepoly} } })
assert.eq(res.count(), 1);

t.drop()
t.ensureIndex({geo: "2dsphere"})
somepoly = { "type" : "Polygon",
             "coordinates" : [ [ [40,5], [40,8], [43,8], [43,5], [40,5]],
                               [ [41,6], [42,6], [42,7], [41,7], [41,6]]]}

t.insert({geo:{ "type" : "Point", "coordinates": [ 40, 5 ] }})
res = t.find({ "geo" : { "$within" : { "$geometry" : somepoly} } })
assert.eq(res.count(), 1);
// In the hole.  Shouldn't find it.
t.insert({geo:{ "type" : "Point", "coordinates": [ 41.1, 6.1 ] }})
res = t.find({ "geo" : { "$within" : { "$geometry" : somepoly} } })
assert.eq(res.count(), 1);
// Also in the hole.
t.insert({geo: { "type" : "LineString", "coordinates": [ [ 41.1, 6.1], [41.2, 6.2]]}})
res = t.find({ "geo" : { "$within" : { "$geometry" : somepoly} } })
assert.eq(res.count(), 1);
// Half-hole, half-not.  Shouldn't be $within.
t.insert({geo: { "type" : "LineString", "coordinates": [ [ 41.5, 6.5], [42.5, 7.5]]}})
res = t.find({ "geo" : { "$within" : { "$geometry" : somepoly} } })
assert.eq(res.count(), 1);