summaryrefslogtreecommitdiff
path: root/jstests/core/index/geo/geo_s2within.js
blob: 04915c77dcb80c452a82ea153239c722a58cb2ed (plain)
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
37
38
39
40
41
42
// Test some cases that might be iffy with $within, mostly related to polygon w/holes.
t = db.geo_s2within;
t.drop();
t.createIndex({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.itcount(), 1);

t.drop();
t.createIndex({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.itcount(), 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.itcount(), 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.itcount(), 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.itcount(), 1);