UNPKG

3.53 kBJavaScriptView Raw
1var fs = require('fs')
2var test = require('tape')
3var envelope = require('turf-envelope')
4var aggregate = require('../')
5
6test('basic', function (t) {
7 var groups = JSON.parse(fs.readFileSync(__dirname + '/fixtures/groups.geojson'))
8 var data = JSON.parse(fs.readFileSync(__dirname + '/fixtures/data.geojson'))
9
10 var result = aggregate(groups, data, {
11 'something': aggregate.sum('something'),
12 'something-aw': aggregate.areaWeightedSum('something'),
13 'something-mean': aggregate.areaWeightedMean('something'),
14 'area': aggregate.totalArea(),
15 'count': aggregate.count()
16 })
17
18 t.equal(result.features[0].properties.something, 1729)
19
20 // check out the area-weighted aggregation
21 var actual = {
22 'something-aw': 0,
23 'area': 0
24 }
25 result.features.forEach(function (feat) {
26 for (var k in actual) {
27 actual[k] += feat.properties[k] || 0
28 }
29 })
30 var expected = {
31 'something-aw': 544975601.80 * 729 + 1892440077.76 * 1000,
32 'area': 544975601.80 + 1892440077.76
33 }
34
35 for (var k in actual) {
36 t.ok(Math.abs(actual[k] - expected[k]) / expected[k] < 0.01, k + ' ' + actual[k] + ' vs ' + expected[k])
37 }
38
39 t.end()
40})
41
42test('easy area weighted mean', function (t) {
43 var data = JSON.parse(fs.readFileSync(__dirname + '/fixtures/data.geojson'))
44 var groups = {
45 type: 'FeatureCollection',
46 features: [envelope(data)]
47 }
48
49 var result = aggregate(groups, data, {
50 'something-aw': aggregate.areaWeightedSum('something'),
51 'something-mean': aggregate.areaWeightedMean('something'),
52 'area': aggregate.totalArea()
53 })
54
55 var props = result.features[0].properties
56 var actual = props['something-mean']
57 var expected = props['something-aw'] / props.area
58 t.ok(Math.abs(actual - expected) / expected < 0.01)
59 t.end()
60})
61
62test('aggregate all features', function (t) {
63 var data = JSON.parse(fs.readFileSync(__dirname + '/fixtures/data.geojson'))
64
65 var result = aggregate(data, {
66 'something': aggregate.sum('something'),
67 'something-aw': aggregate.areaWeightedSum('something'),
68 'something-mean': aggregate.areaWeightedMean('something'),
69 'area': aggregate.totalArea(),
70 'count': aggregate.count()
71 })
72
73 t.deepEqual(result, {
74 something: 1729,
75 'something-aw': 2289727291472.8496,
76 'something-mean': 939.4077959999869,
77 area: 2437415679.5616817,
78 count: 2
79 })
80 t.end()
81})
82
83test('union', function (t) {
84 var data = JSON.parse(fs.readFileSync(__dirname + '/fixtures/data.geojson'))
85
86 var result = aggregate(data, {
87 'u1': aggregate.union('something'),
88 'u2': aggregate.union('arr1'),
89 'u3': aggregate.union('arr2')
90 })
91
92 for (var k in result) {
93 result[k] = JSON.parse(result[k])
94 }
95
96 t.deepEqual(result, {
97 'u1': [1000, 729],
98 'u2': [1, 2, 3, 4],
99 'u3': [2001, 'dave', 'hal']
100 })
101 t.end()
102})
103
104test('streaming', function (t) {
105 var data = JSON.parse(fs.readFileSync(__dirname + '/fixtures/data.geojson')).features
106
107 var stream = aggregate({
108 'something': aggregate.sum('something'),
109 'something-aw': aggregate.areaWeightedSum('something'),
110 'something-mean': aggregate.areaWeightedMean('something'),
111 'area': aggregate.totalArea(),
112 'count': aggregate.count()
113 })
114
115 stream.on('data', function (result) {
116 t.deepEqual(result, {
117 something: 1729,
118 'something-aw': 2289727291472.8496,
119 'something-mean': 939.4077959999869,
120 area: 2437415679.5616817,
121 count: 2
122 })
123 t.end()
124 })
125
126 data.forEach(function (feature) { stream.write(feature) })
127 stream.end()
128
129})
130