diff options
Diffstat (limited to 'jstests/core/geo_big_polygon2.js')
-rw-r--r-- | jstests/core/geo_big_polygon2.js | 1116 |
1 files changed, 452 insertions, 664 deletions
diff --git a/jstests/core/geo_big_polygon2.js b/jstests/core/geo_big_polygon2.js index 9fb9ffead3d..46ac327b7e0 100644 --- a/jstests/core/geo_big_polygon2.js +++ b/jstests/core/geo_big_polygon2.js @@ -7,35 +7,27 @@ var crs84CRS = { type: "name", - properties: { - name: "urn:ogc:def:crs:OGC:1.3:CRS84" - } + properties: {name: "urn:ogc:def:crs:OGC:1.3:CRS84"} }; var epsg4326CRS = { type: "name", - properties: { - name: "EPSG:4326" - } + properties: {name: "EPSG:4326"} }; var strictCRS = { type: "name", - properties: { - name: "urn:x-mongodb:crs:strictwinding:EPSG:4326" - } + properties: {name: "urn:x-mongodb:crs:strictwinding:EPSG:4326"} }; // invalid CRS name var badCRS = { type: "name", - properties: { - name: "urn:x-mongodb:crs:invalid:EPSG:4326" - } + properties: {name: "urn:x-mongodb:crs:invalid:EPSG:4326"} }; // helper to generate a line along a longitudinal function genLonLine(lon, startLat, endLat, latStep) { var line = []; for (var lat = startLat; lat <= endLat; lat += latStep) { - line.push( [ lon, lat ] ); + line.push([lon, lat]); } return line; } @@ -49,570 +41,392 @@ coll.drop(); // coordinates are longitude, latitude // strictCRS (big polygon) cannot be stored in the collection var objects = [ + {name: "boat ramp", geo: {type: "Point", coordinates: [-97.927117, 30.327376]}}, + {name: "on equator", geo: {type: "Point", coordinates: [-97.9, 0]}}, + {name: "just north of equator", geo: {type: "Point", coordinates: [-97.9, 0.1]}}, + {name: "just south of equator", geo: {type: "Point", coordinates: [-97.9, -0.1]}}, + { + name: "north pole - crs84CRS", + geo: {type: "Point", coordinates: [-97.9, 90.0], crs: crs84CRS} + }, + { + name: "south pole - epsg4326CRS", + geo: {type: "Point", coordinates: [-97.9, -90.0], crs: epsg4326CRS} + }, + { + name: "short line string: PA, LA, 4corners, ATX, Mansfield, FL, Reston, NYC", + geo: { + type: "LineString", + coordinates: [ + [-122.1611953, 37.4420407], + [-118.283638, 34.028517], + [-109.045223, 36.9990835], + [-97.850404, 30.3921555], + [-97.904187, 30.395457], + [-86.600836, 30.398147], + [-77.357837, 38.9589935], + [-73.987723, 40.7575074] + ] + } + }, + { + name: "1024 point long line string from south pole to north pole", + geo: {type: "LineString", coordinates: genLonLine(2.349902, -90.0, 90.0, 180.0 / 1024)} + }, { - name: "boat ramp", - geo: { - type: "Point", - coordinates: [ -97.927117, 30.327376 ] - } - }, - { - name: "on equator", - geo: { - type: "Point", - coordinates: [ -97.9 , 0 ] - } - }, - { - name: "just north of equator", - geo: { - type: "Point", - coordinates: [ -97.9 , 0.1 ] - } - }, - { - name: "just south of equator", - geo: { - type: "Point", - coordinates: [ -97.9 , -0.1 ] - } - }, - { - name: "north pole - crs84CRS", - geo: { - type: "Point", - coordinates: [ -97.9 , 90.0 ], - crs: crs84CRS - } - }, - { - name: "south pole - epsg4326CRS", - geo: { - type: "Point", - coordinates: [ -97.9 , -90.0 ], - crs: epsg4326CRS - } + name: "line crossing equator - epsg4326CRS", + geo: { + type: "LineString", + coordinates: [[-77.0451853, -12.0553442], [-76.7784557, 18.0098528]], + crs: epsg4326CRS + } }, { - name: "short line string: PA, LA, 4corners, ATX, Mansfield, FL, Reston, NYC", - geo: { - type: "LineString", - coordinates: [ - [ -122.1611953, 37.4420407 ], - [ -118.283638, 34.028517 ], - [ -109.045223, 36.9990835 ], - [ -97.850404, 30.3921555 ], - [ -97.904187, 30.395457 ], - [ -86.600836, 30.398147 ], - [ -77.357837, 38.9589935 ], - [ -73.987723, 40.7575074 ] - ] - } + name: "GeoJson polygon", + geo: { + type: "Polygon", + coordinates: + [[[-80.0, 30.0], [-40.0, 30.0], [-40.0, 60.0], [-80.0, 60.0], [-80.0, 30.0]]] + } }, { - name: "1024 point long line string from south pole to north pole", - geo: { - type: "LineString", - coordinates: genLonLine(2.349902, -90.0, 90.0, 180.0 / 1024) - } + name: "polygon w/ hole", + geo: { + type: "Polygon", + coordinates: [ + [[-80.0, 30.0], [-40.0, 30.0], [-40.0, 60.0], [-80.0, 60.0], [-80.0, 30.0]], + [[-70.0, 40.0], [-60.0, 40.0], [-60.0, 50.0], [-70.0, 50.0], [-70.0, 40.0]] + ] + } + }, + { + name: "polygon w/ two holes", + geo: { + type: "Polygon", + coordinates: [ + [[-80.0, 30.0], [-40.0, 30.0], [-40.0, 60.0], [-80.0, 60.0], [-80.0, 30.0]], + [[-70.0, 40.0], [-60.0, 40.0], [-60.0, 50.0], [-70.0, 50.0], [-70.0, 40.0]], + [[-55.0, 40.0], [-45.0, 40.0], [-45.0, 50.0], [-55.0, 50.0], [-55.0, 40.0]] + ] + } }, { - name: "line crossing equator - epsg4326CRS", - geo: { - type: "LineString", - coordinates: [ - [ -77.0451853, -12.0553442 ], - [ -76.7784557, 18.0098528 ] - ], - crs: epsg4326CRS - } - }, - { - name: "GeoJson polygon", - geo: { - type: "Polygon", - coordinates: [ - [ [ -80.0, 30.0 ], - [ -40.0, 30.0 ], - [ -40.0, 60.0 ], - [ -80.0, 60.0 ], - [ -80.0, 30.0 ] ] - ] - } - }, - { - name: "polygon w/ hole", - geo: { - type: "Polygon", - coordinates: [ - [ [ -80.0, 30.0 ], - [ -40.0, 30.0 ], - [ -40.0, 60.0 ], - [-80.0, 60.0 ], - [ -80.0, 30.0 ] ], - [ [ -70.0, 40.0 ], - [ -60.0, 40.0 ], - [ -60.0, 50.0 ], - [ -70.0, 50.0 ], - [ -70.0, 40.0 ] ] - ] - } - }, - { - name: "polygon w/ two holes", - geo: { - type: "Polygon", - coordinates: [ - [ [ -80.0, 30.0 ], - [ -40.0, 30.0 ], - [ -40.0, 60.0 ], - [ -80.0, 60.0 ], - [ -80.0, 30.0 ] ], - [ [ -70.0, 40.0 ], - [ -60.0, 40.0 ], - [ -60.0, 50.0 ], - [ -70.0, 50.0 ], - [ -70.0, 40.0 ] ], - [ [ -55.0, 40.0 ], - [ -45.0, 40.0 ], - [ -45.0, 50.0 ], - [ -55.0, 50.0 ], - [ -55.0, 40.0 ] ] - ] - } - }, - { - name: "polygon covering North pole", - geo: { - type: "Polygon", - coordinates: [ - [ [ -120.0, 89.0 ], - [ 0.0, 89.0 ], - [ 120.0, 89.0 ], - [ -120.0, 89.0 ] ] - ] - } - }, - { - name: "polygon covering South pole", - geo: { - type: "Polygon", - coordinates: [ - [ [ -120.0, -89.0 ], - [ 0.0, -89.0 ], - [ 120.0, -89.0 ], - [ -120.0, -89.0 ] ] - ] - } - }, - { - name: "big polygon/rectangle covering both poles", - geo: { - type: "Polygon", - coordinates: [ - [ [ -130.0, 89.0 ], - [ -120.0, 89.0 ], - [ -120.0, -89.0 ], - [ -130.0, -89.0 ], - [ -130.0, 89.0 ] ] - ], - crs: strictCRS - } - }, - { - name: "polygon (triangle) w/ hole at North pole", - geo: { - type: "Polygon", - coordinates: [ - [ [ -120.0, 80.0 ], - [ 0.0, 80.0 ], - [ 120.0, 80.0 ], - [-120.0, 80.0 ] ], - [ [ -120.0, 88.0 ], - [ 0.0, 88.0 ], - [ 120.0, 88.0 ], - [-120.0, 88.0 ] ] - ] - } - }, - { - name: "polygon with edge on equator", - geo: { - type: "Polygon", - coordinates: [ - [ [ -120.0, 0.0 ], - [ 120.0, 0.0 ], - [ 0.0, 90.0 ], - [ -120.0, 0.0 ] ] - ] - } - }, - { - name: "polygon just inside single hemisphere (Northern) - China, California, Europe", - geo: { - type: "Polygon", - coordinates: [ - [ [ 120.0, 0.000001 ], - [ -120.0, 0.000001 ], - [ 0.0, 0.000001 ], - [ 120.0, 0.000001 ] ] - ] - } - }, - { - name: "polygon inside Northern hemisphere", - geo: { - type: "Polygon", - coordinates: [ - [ [ 120.0, 80.0 ], - [ -120.0, 80.0 ], - [ 0.0, 80.0 ], - [ 120.0, 80.0 ] ] - ] - } - }, - { - name: "polygon just inside a single hemisphere (Southern) - Pacific, Indonesia, Africa", - geo: { - type: "Polygon", - coordinates: [ - [ [ -120.0, -0.000001 ], - [ 120.0, -0.000001 ], - [ 0.0, -0.000001 ], - [ -120.0, -0.000001 ] ] - ] - } - }, - { - name: "polygon inside Southern hemisphere", - geo: { - type: "Polygon", - coordinates: [ - [ [ -120.0, -80.0 ], - [ 120.0, -80.0 ], - [ 0.0, -80.0 ], - [ -120.0, -80.0 ] ] - ] - } - }, - { - name: "single point (MultiPoint): Palo Alto", - geo: { - type: "MultiPoint", - coordinates: [ - [ -122.1611953, 37.4420407 ] - ] - } - }, - { - name: "multiple points(MultiPoint): PA, LA, 4corners, ATX, Mansfield, FL, Reston, NYC", - geo: { - type: "MultiPoint", - coordinates: [ - [ -122.1611953, 37.4420407 ], - [ -118.283638, 34.028517 ], - [ -109.045223, 36.9990835 ], - [ -97.850404, 30.3921555 ], - [ -97.904187, 30.395457 ], - [ -86.600836, 30.398147 ], - [ -77.357837, 38.9589935 ], - [ -73.987723, 40.7575074 ] - ] - } - }, - { - name: "two points (MultiPoint): Shenzhen, Guangdong, China", - geo: { - type: "MultiPoint", - coordinates: [ - [ 114.0538788, 22.5551603 ], - [ 114.022837, 22.44395 ] - ] - } - }, - { - name: "two points (MultiPoint) but only one in: Shenzhen, Guangdong, China", - geo: { - type: "MultiPoint", - coordinates: [ - [ 114.0538788, 22.5551603 ], - [ 113.743858, 23.025815 ] - ] - } - }, - { - name: "multi line string: new zealand bays", - geo: { - type: "MultiLineString", - coordinates: [ - [ [ 172.803869, -43.592789 ], - [ 172.659335, -43.620348 ], - [ 172.684038, -43.636528 ], - [ 172.820922, -43.605325 ] ], - [ [ 172.830497, -43.607768 ], - [ 172.813263, -43.656319 ], - [ 172.823096, -43.660996 ], - [ 172.850943, -43.607609 ] ], - [ [ 172.912056, -43.623148 ], - [ 172.887696, -43.670897 ], - [ 172.900469, -43.676178 ], - [ 172.931735, -43.622839 ] ] - ] - } - }, - { - name: "multi polygon: new zealand north and south islands", - geo: { - type: "MultiPolygon", - coordinates: [ - [ - [ [ 165.773255, -45.902933 ], - [ 169.398419, -47.261538 ], - [ 174.672744, -41.767722 ], - [ 172.288845, -39.897992 ], - [ 165.773255, -45.902933 ] ] - ], - [ - [ [ 173.166448, -39.778262 ], - [ 175.342744, -42.677333 ], - [ 179.913373, -37.224362 ], - [ 171.475953, -32.688871 ], - [ 173.166448, -39.778262 ] ] - ] - ] - } - }, - { - name: "geometry collection: point in Australia and triangle around Australia", - geo: { - type: "GeometryCollection", - geometries: [ - { - name: "center of Australia", - type: "Point", - coordinates: [ 133.985885, -27.240790 ] - }, - { - name: "Triangle around Australia", - type: "Polygon", - coordinates: [ - [ [ 97.423178, -44.735405 ], - [ 169.845050, -38.432287 ], - [ 143.824366, 15.966509 ], - [ 97.423178, -44.735405 ] ] - ] - } - ] - } + name: "polygon covering North pole", + geo: { + type: "Polygon", + coordinates: [[[-120.0, 89.0], [0.0, 89.0], [120.0, 89.0], [-120.0, 89.0]]] + } + }, + { + name: "polygon covering South pole", + geo: { + type: "Polygon", + coordinates: [[[-120.0, -89.0], [0.0, -89.0], [120.0, -89.0], [-120.0, -89.0]]] + } + }, + { + name: "big polygon/rectangle covering both poles", + geo: { + type: "Polygon", + coordinates: + [[[-130.0, 89.0], [-120.0, 89.0], [-120.0, -89.0], [-130.0, -89.0], [-130.0, 89.0]]], + crs: strictCRS + } + }, + { + name: "polygon (triangle) w/ hole at North pole", + geo: { + type: "Polygon", + coordinates: [ + [[-120.0, 80.0], [0.0, 80.0], [120.0, 80.0], [-120.0, 80.0]], + [[-120.0, 88.0], [0.0, 88.0], [120.0, 88.0], [-120.0, 88.0]] + ] + } + }, + { + name: "polygon with edge on equator", + geo: { + type: "Polygon", + coordinates: [[[-120.0, 0.0], [120.0, 0.0], [0.0, 90.0], [-120.0, 0.0]]] + } + }, + { + name: "polygon just inside single hemisphere (Northern) - China, California, Europe", + geo: { + type: "Polygon", + coordinates: + [[[120.0, 0.000001], [-120.0, 0.000001], [0.0, 0.000001], [120.0, 0.000001]]] + } + }, + { + name: "polygon inside Northern hemisphere", + geo: { + type: "Polygon", + coordinates: [[[120.0, 80.0], [-120.0, 80.0], [0.0, 80.0], [120.0, 80.0]]] + } + }, + { + name: "polygon just inside a single hemisphere (Southern) - Pacific, Indonesia, Africa", + geo: { + type: "Polygon", + coordinates: + [[[-120.0, -0.000001], [120.0, -0.000001], [0.0, -0.000001], [-120.0, -0.000001]]] + } + }, + { + name: "polygon inside Southern hemisphere", + geo: { + type: "Polygon", + coordinates: [[[-120.0, -80.0], [120.0, -80.0], [0.0, -80.0], [-120.0, -80.0]]] + } + }, + { + name: "single point (MultiPoint): Palo Alto", + geo: {type: "MultiPoint", coordinates: [[-122.1611953, 37.4420407]]} + }, + { + name: "multiple points(MultiPoint): PA, LA, 4corners, ATX, Mansfield, FL, Reston, NYC", + geo: { + type: "MultiPoint", + coordinates: [ + [-122.1611953, 37.4420407], + [-118.283638, 34.028517], + [-109.045223, 36.9990835], + [-97.850404, 30.3921555], + [-97.904187, 30.395457], + [-86.600836, 30.398147], + [-77.357837, 38.9589935], + [-73.987723, 40.7575074] + ] + } + }, + { + name: "two points (MultiPoint): Shenzhen, Guangdong, China", + geo: {type: "MultiPoint", coordinates: [[114.0538788, 22.5551603], [114.022837, 22.44395]]} + }, + { + name: "two points (MultiPoint) but only one in: Shenzhen, Guangdong, China", + geo: + {type: "MultiPoint", coordinates: [[114.0538788, 22.5551603], [113.743858, 23.025815]]} + }, + { + name: "multi line string: new zealand bays", + geo: { + type: "MultiLineString", + coordinates: [ + [ + [172.803869, -43.592789], + [172.659335, -43.620348], + [172.684038, -43.636528], + [172.820922, -43.605325] + ], + [ + [172.830497, -43.607768], + [172.813263, -43.656319], + [172.823096, -43.660996], + [172.850943, -43.607609] + ], + [ + [172.912056, -43.623148], + [172.887696, -43.670897], + [172.900469, -43.676178], + [172.931735, -43.622839] + ] + ] + } + }, + { + name: "multi polygon: new zealand north and south islands", + geo: { + type: "MultiPolygon", + coordinates: [ + [[ + [165.773255, -45.902933], + [169.398419, -47.261538], + [174.672744, -41.767722], + [172.288845, -39.897992], + [165.773255, -45.902933] + ]], + [[ + [173.166448, -39.778262], + [175.342744, -42.677333], + [179.913373, -37.224362], + [171.475953, -32.688871], + [173.166448, -39.778262] + ]] + ] + } + }, + { + name: "geometry collection: point in Australia and triangle around Australia", + geo: { + type: "GeometryCollection", + geometries: [ + {name: "center of Australia", type: "Point", coordinates: [133.985885, -27.240790]}, + { + name: "Triangle around Australia", + type: "Polygon", + coordinates: [[ + [97.423178, -44.735405], + [169.845050, -38.432287], + [143.824366, 15.966509], + [97.423178, -44.735405] + ]] + } + ] + } } ]; - // Test various polygons which are not queryable var badPolys = [ { - name: "Polygon with bad CRS", - type: "Polygon", - coordinates: [ - [ [ 114.0834046, 22.6648202 ], - [ 113.8293457, 22.3819359 ], - [ 114.2736054, 22.4047911 ], - [ 114.0834046, 22.6648202 ] ] - ], - crs: badCRS - }, - { - name: "Open polygon < 3 sides", - type: "Polygon", - coordinates: [ - [ [ 114.0834046, 22.6648202 ], - [ 113.8293457, 22.3819359 ] ] - ], - crs: strictCRS - }, - { - name: "Open polygon > 3 sides", - type: "Polygon", - coordinates: [ - [ [ 114.0834046, 22.6648202 ], - [ 113.8293457, 22.3819359 ], - [ 114.2736054, 22.4047911 ], - [ 114.1, 22.5 ] ] - ], - crs: strictCRS - }, - { - name: "duplicate non-adjacent points", - type: "Polygon", - coordinates: [ - [ [ 114.0834046, 22.6648202 ], - [ 113.8293457, 22.3819359 ], - [ 114.2736054, 22.4047911 ], - [ 113.8293457, 22.3819359 ], - [ -65.9165954, 22.6648202 ], - [ 114.0834046, 22.6648202 ] ] - ], - crs: strictCRS - }, - { - name: "One hole in polygon", - type: "Polygon", - coordinates: [ - [ [ -80.0, 30.0 ], - [ -40.0, 30.0 ], - [ -40.0, 60.0 ], - [ -80.0, 60.0 ], - [ -80.0, 30.0 ] ], - [ [ -70.0, 40.0 ], - [ -60.0, 40.0 ], - [ -60.0, 50.0 ], - [ -70.0, 50.0 ], - [ -70.0, 40.0 ] ] - ], - crs: strictCRS - }, - { - name: "2 holes in polygon", - type: "Polygon", - coordinates: [ - [ [ -80.0, 30.0 ], - [ -40.0, 30.0 ], - [ -40.0, 60.0 ], - [ -80.0, 60.0 ], - [ -80.0, 30.0 ] ], - [ [ -70.0, 40.0 ], - [ -60.0, 40.0 ], - [ -60.0, 50.0 ], - [ -70.0, 50.0 ], - [ -70.0, 40.0 ] ], - [ [ -55.0, 40.0 ], - [ -45.0, 40.0 ], - [ -45.0, 50.0 ], - [ -55.0, 50.0 ], - [ -55.0, 40.0 ] ] - ], - crs: strictCRS - }, - { - name: "complex polygon (edges cross)", - type: "Polygon", - coordinates: [ - [ [ 10.0, 10.0 ], - [ 20.0, 10.0 ], - [ 10.0, 20.0 ], - [ 20.0, 20.0 ], - [ 10.0, 10.0 ] ] - ], - crs: strictCRS + name: "Polygon with bad CRS", + type: "Polygon", + coordinates: [[ + [114.0834046, 22.6648202], + [113.8293457, 22.3819359], + [114.2736054, 22.4047911], + [114.0834046, 22.6648202] + ]], + crs: badCRS + }, + { + name: "Open polygon < 3 sides", + type: "Polygon", + coordinates: [[[114.0834046, 22.6648202], [113.8293457, 22.3819359]]], + crs: strictCRS + }, + { + name: "Open polygon > 3 sides", + type: "Polygon", + coordinates: [[ + [114.0834046, 22.6648202], + [113.8293457, 22.3819359], + [114.2736054, 22.4047911], + [114.1, 22.5] + ]], + crs: strictCRS + }, + { + name: "duplicate non-adjacent points", + type: "Polygon", + coordinates: [[ + [114.0834046, 22.6648202], + [113.8293457, 22.3819359], + [114.2736054, 22.4047911], + [113.8293457, 22.3819359], + [-65.9165954, 22.6648202], + [114.0834046, 22.6648202] + ]], + crs: strictCRS + }, + { + name: "One hole in polygon", + type: "Polygon", + coordinates: [ + [[-80.0, 30.0], [-40.0, 30.0], [-40.0, 60.0], [-80.0, 60.0], [-80.0, 30.0]], + [[-70.0, 40.0], [-60.0, 40.0], [-60.0, 50.0], [-70.0, 50.0], [-70.0, 40.0]] + ], + crs: strictCRS + }, + { + name: "2 holes in polygon", + type: "Polygon", + coordinates: [ + [[-80.0, 30.0], [-40.0, 30.0], [-40.0, 60.0], [-80.0, 60.0], [-80.0, 30.0]], + [[-70.0, 40.0], [-60.0, 40.0], [-60.0, 50.0], [-70.0, 50.0], [-70.0, 40.0]], + [[-55.0, 40.0], [-45.0, 40.0], [-45.0, 50.0], [-55.0, 50.0], [-55.0, 40.0]] + ], + crs: strictCRS + }, + { + name: "complex polygon (edges cross)", + type: "Polygon", + coordinates: [[[10.0, 10.0], [20.0, 10.0], [10.0, 20.0], [20.0, 20.0], [10.0, 10.0]]], + crs: strictCRS } ]; - // Closed polygons used in query (3, 4, 5, 6-sided) var polys = [ { - name: "3 sided closed polygon", - type: "Polygon", // triangle - coordinates: [ [ - [ 10.0, 10.0 ], - [ 20.0, 10.0 ], - [ 15.0, 17.0 ], - [ 10.0, 10.0 ] - ] ], - crs: strictCRS, - nW: 0, nI: 1 - }, - { - name: "3 sided closed polygon (non-big)", - type: "Polygon", // triangle - coordinates: [ [ - [ 10.0, 10.0 ], - [ 20.0, 10.0 ], - [ 15.0, 17.0 ], - [ 10.0, 10.0 ] - ] ], - nW: 0, nI: 1 - }, - { - name: "4 sided closed polygon", - type: "Polygon", // rectangle - coordinates: [ [ - [ 10.0, 10.0 ], - [ 20.0, 10.0 ], - [ 20.0, 20.0 ], - [ 10.0, 20.0 ], - [ 10.0, 10.0 ] - ] ], - crs: strictCRS, - nW: 0, nI: 1 - }, - { - name: "4 sided closed polygon (non-big)", - type: "Polygon", // rectangle - coordinates: [ - [ [ 10.0, 10.0 ], - [ 20.0, 10.0 ], - [ 20.0, 20.0 ], - [ 10.0, 20.0 ], - [ 10.0, 10.0 ] ] - ], - nW: 0, nI: 1 - }, - { - name: "5 sided closed polygon", - type: "Polygon", // pentagon - coordinates: [ [ - [ 10.0, 10.0 ], - [ 20.0, 10.0 ], - [ 25.0, 18.0 ], - [ 15.0, 25.0 ], - [ 5.0, 18.0 ], - [ 10.0, 10.0 ] - ] ], - crs: strictCRS, - nW: 0, nI: 1 - }, - { - name: "5 sided closed polygon (non-big)", - type: "Polygon", // pentagon - coordinates: [ [ - [ 10.0, 10.0 ], - [ 20.0, 10.0 ], - [ 25.0, 18.0 ], - [ 15.0, 25.0 ], - [ 5.0, 18.0 ], - [ 10.0, 10.0 ] - ] ], - nW: 0, nI: 1 - }, - { - name: "6 sided closed polygon", - type: "Polygon", // hexagon - coordinates: [ [ - [ 10.0, 10.0 ], - [ 15.0, 10.0 ], - [ 22.0, 15.0 ], - [ 15.0, 20.0 ], - [ 10.0, 20.0 ], - [ 7.0, 15.0 ], - [ 10.0, 10.0 ] - ] ], - crs: strictCRS, - nW: 0, nI: 1 - }, - { - name: "6 sided closed polygon (non-big)", - type: "Polygon", // hexagon - coordinates: [ [ - [ 10.0, 10.0 ], - [ 15.0, 10.0 ], - [ 22.0, 15.0 ], - [ 15.0, 20.0 ], - [ 10.0, 20.0 ], - [ 7.0, 15.0 ], - [ 10.0, 10.0 ] - ] ], - nW: 0, nI: 1 + name: "3 sided closed polygon", + type: "Polygon", // triangle + coordinates: [[[10.0, 10.0], [20.0, 10.0], [15.0, 17.0], [10.0, 10.0]]], + crs: strictCRS, + nW: 0, + nI: 1 + }, + { + name: "3 sided closed polygon (non-big)", + type: "Polygon", // triangle + coordinates: [[[10.0, 10.0], [20.0, 10.0], [15.0, 17.0], [10.0, 10.0]]], + nW: 0, + nI: 1 + }, + { + name: "4 sided closed polygon", + type: "Polygon", // rectangle + coordinates: [[[10.0, 10.0], [20.0, 10.0], [20.0, 20.0], [10.0, 20.0], [10.0, 10.0]]], + crs: strictCRS, + nW: 0, + nI: 1 + }, + { + name: "4 sided closed polygon (non-big)", + type: "Polygon", // rectangle + coordinates: [[[10.0, 10.0], [20.0, 10.0], [20.0, 20.0], [10.0, 20.0], [10.0, 10.0]]], + nW: 0, + nI: 1 + }, + { + name: "5 sided closed polygon", + type: "Polygon", // pentagon + coordinates: + [[[10.0, 10.0], [20.0, 10.0], [25.0, 18.0], [15.0, 25.0], [5.0, 18.0], [10.0, 10.0]]], + crs: strictCRS, + nW: 0, + nI: 1 + }, + { + name: "5 sided closed polygon (non-big)", + type: "Polygon", // pentagon + coordinates: + [[[10.0, 10.0], [20.0, 10.0], [25.0, 18.0], [15.0, 25.0], [5.0, 18.0], [10.0, 10.0]]], + nW: 0, + nI: 1 + }, + { + name: "6 sided closed polygon", + type: "Polygon", // hexagon + coordinates: [[ + [10.0, 10.0], + [15.0, 10.0], + [22.0, 15.0], + [15.0, 20.0], + [10.0, 20.0], + [7.0, 15.0], + [10.0, 10.0] + ]], + crs: strictCRS, + nW: 0, + nI: 1 + }, + { + name: "6 sided closed polygon (non-big)", + type: "Polygon", // hexagon + coordinates: [[ + [10.0, 10.0], + [15.0, 10.0], + [22.0, 15.0], + [15.0, 20.0], + [10.0, 20.0], + [7.0, 15.0], + [10.0, 10.0] + ]], + nW: 0, + nI: 1 } ]; @@ -628,23 +442,23 @@ function nGonGenerator(N, D, clockwise, LON, LAT) { // edge lengths will be uneven with this quick & dirty approach N = (N % 2 == 1) ? N + 1 : N; var eps = 2 * D / N; - var lat=0; - var lon=0; + var lat = 0; + var lon = 0; var pts = []; var i = 0; // produce longitude values in pairs // traverse with left foot outside the circle (clockwise) to define the big polygon for (i = 0, lat = D / 2; i <= N / 2; ++i, lat -= eps) { - if ( lat < (-D / 2) ) { + if (lat < (-D / 2)) { // set fixing lat lat = (-D / 2); } - lon = Math.sqrt( (D / 2) * (D / 2) - (lat * lat) ); + lon = Math.sqrt((D / 2) * (D / 2) - (lat * lat)); newlat = lat + LAT; newlon = lon + LON; conjugateLon = LON - lon; - pts[i] = [ newlon, newlat ]; - pts[N-i] = [ conjugateLon, newlat ]; + pts[i] = [newlon, newlat]; + pts[N - i] = [conjugateLon, newlat]; } // Reverse points if counterclockwise if (!clockwise) { @@ -674,83 +488,67 @@ var totalObjects = getNumberOfValidObjects(objects); var nsidedPolys = [ // Big Polygon centered on 0, 0 { - name: "4 sided polygon centered on 0, 0", - type: "Polygon", - coordinates: [ - nGonGenerator(4, 30, true, 0, 0) - ], - crs: strictCRS, - nW: totalObjects - 3, - nI: totalObjects + name: "4 sided polygon centered on 0, 0", + type: "Polygon", + coordinates: [nGonGenerator(4, 30, true, 0, 0)], + crs: strictCRS, + nW: totalObjects - 3, + nI: totalObjects }, // Non-big polygons have counterclockwise coordinates { - name: "4 sided polygon centered on 0, 0 (non-big)", - type: "Polygon", - coordinates: [ - nGonGenerator(4, 30, false, 0, 0) - ], - nW: 0, - nI: 3 - }, - { - name: "100 sided polygon centered on 0, 0", - type: "Polygon", - coordinates: [ - nGonGenerator(100, 20, true, 0, 0) - ], - crs: strictCRS, - nW: totalObjects - 3, - nI: totalObjects - }, - { - name: "100 sided polygon centered on 0, 0 (non-big)", - type: "Polygon", - coordinates: [ - nGonGenerator(100, 20, false, 0, 0) - ], - nW: 0, - nI: 3 - }, - { - name: "5000 sided polygon centered on 0, 0 (non-big)", - type: "Polygon", - coordinates: [ - nGonGenerator(5000, 89.99, false, 0, 0) - ], - nW: 0, - nI: 3 - }, - { - name: "25000 sided polygon centered on 0, 0", - type: "Polygon", - coordinates: [ - nGonGenerator(25000, 89.99, true, 0, 0) - ], - crs: strictCRS, - nW: totalObjects - 3, - nI: totalObjects + name: "4 sided polygon centered on 0, 0 (non-big)", + type: "Polygon", + coordinates: [nGonGenerator(4, 30, false, 0, 0)], + nW: 0, + nI: 3 + }, + { + name: "100 sided polygon centered on 0, 0", + type: "Polygon", + coordinates: [nGonGenerator(100, 20, true, 0, 0)], + crs: strictCRS, + nW: totalObjects - 3, + nI: totalObjects + }, + { + name: "100 sided polygon centered on 0, 0 (non-big)", + type: "Polygon", + coordinates: [nGonGenerator(100, 20, false, 0, 0)], + nW: 0, + nI: 3 + }, + { + name: "5000 sided polygon centered on 0, 0 (non-big)", + type: "Polygon", + coordinates: [nGonGenerator(5000, 89.99, false, 0, 0)], + nW: 0, + nI: 3 + }, + { + name: "25000 sided polygon centered on 0, 0", + type: "Polygon", + coordinates: [nGonGenerator(25000, 89.99, true, 0, 0)], + crs: strictCRS, + nW: totalObjects - 3, + nI: totalObjects }, // Big polygon centered on Shenzen { - name: "4 sided polygon centered on Shenzen", - type: "Polygon", - coordinates: [ - nGonGenerator(4, 5, true, 114.1, 22.55) - ], - crs: strictCRS, - nW: totalObjects - 3, - nI: totalObjects - 2 - }, - { - name: "4 sided polygon centered on Shenzen (non-big)", - type: "Polygon", - coordinates: [ - nGonGenerator(4, 5, false, 114.1, 22.55) - ], - crs: strictCRS, - nW: 2, - nI: 3 + name: "4 sided polygon centered on Shenzen", + type: "Polygon", + coordinates: [nGonGenerator(4, 5, true, 114.1, 22.55)], + crs: strictCRS, + nW: totalObjects - 3, + nI: totalObjects - 2 + }, + { + name: "4 sided polygon centered on Shenzen (non-big)", + type: "Polygon", + coordinates: [nGonGenerator(4, 5, false, 114.1, 22.55)], + crs: strictCRS, + nW: 2, + nI: 3 } ]; @@ -768,19 +566,11 @@ objects.forEach(function(o) { }); // Try creating other index types -assert.commandWorked( - coll.ensureIndex({geo: "2dsphere", a: 1}), - "compound index, geo"); +assert.commandWorked(coll.ensureIndex({geo: "2dsphere", a: 1}), "compound index, geo"); // These other index types will fail because of the GeoJSON documents -assert.commandFailed( - coll.ensureIndex({geo: "2dsphere", a: "text"}), - "compound index, geo & text"); -assert.commandFailed( - coll.ensureIndex({geo: "geoHaystack" }, {bucketSize:1}), - "geoHaystack index"); -assert.commandFailed( - coll.ensureIndex({geo: "2d"}), - "2d index"); +assert.commandFailed(coll.ensureIndex({geo: "2dsphere", a: "text"}), "compound index, geo & text"); +assert.commandFailed(coll.ensureIndex({geo: "geoHaystack"}, {bucketSize: 1}), "geoHaystack index"); +assert.commandFailed(coll.ensureIndex({geo: "2d"}), "2d index"); totalObjects = coll.count(); @@ -794,7 +584,7 @@ indexes.forEach(function(index) { if (index != "none") { // Create index - assert.commandWorked(coll.ensureIndex({geo: index}), "create " + index + " index"); + assert.commandWorked(coll.ensureIndex({geo: index}), "create " + index + " index"); } // These polygons should not be queryable @@ -802,24 +592,23 @@ indexes.forEach(function(index) { // within assert.throws(function() { - coll.count({geo: {$geoWithin: {$geometry: p}}});}, - null, - "within " + p.name); + coll.count({geo: {$geoWithin: {$geometry: p}}}); + }, null, "within " + p.name); // intersection assert.throws(function() { - coll.count({geo: {$geoIntersects: {$geometry: p}}});}, - null, - "intersects " + p.name); + coll.count({geo: {$geoIntersects: {$geometry: p}}}); + }, null, "intersects " + p.name); }); - // Tests for closed polygons polys.forEach(function(p) { // geoWithin query var docArray = []; - var q = {geo: {$geoWithin: {$geometry: p}}}; + var q = { + geo: {$geoWithin: {$geometry: p}} + }; // Test query in aggregate docArray = coll.aggregate({$match: q}).toArray(); assert.eq(p.nW, docArray.length, "aggregate within " + p.name); @@ -827,7 +616,9 @@ indexes.forEach(function(index) { assert.eq(p.nW, docArray.length, "within " + p.name); // geoIntersects query - q = {geo: {$geoIntersects: {$geometry: p}}}; + q = { + geo: {$geoIntersects: {$geometry: p}} + }; // Test query in aggregate docArray = coll.aggregate({$match: q}).toArray(); assert.eq(p.nI, docArray.length, "aggregate intersects " + p.name); @@ -836,7 +627,7 @@ indexes.forEach(function(index) { // Update on matching docs var result = coll.update(q, {$set: {stored: ObjectId()}}, {multi: true}); // only check nModified if write commands are enabled - if ( coll.getMongo().writeMode() == "commands" ) { + if (coll.getMongo().writeMode() == "commands") { assert.eq(p.nI, result.nModified, "update " + p.name); } // Remove & restore matching docs @@ -853,14 +644,11 @@ indexes.forEach(function(index) { nsidedPolys.forEach(function(p) { // within - assert.eq(p.nW, - coll.count({geo: {$geoWithin: {$geometry: p}}}), - "within " + p.name); + assert.eq(p.nW, coll.count({geo: {$geoWithin: {$geometry: p}}}), "within " + p.name); // intersects - assert.eq(p.nI, - coll.count({geo: {$geoIntersects: {$geometry: p}}}), - "intersection " + p.name); + assert.eq( + p.nI, coll.count({geo: {$geoIntersects: {$geometry: p}}}), "intersection " + p.name); }); |