1 | var fs = require('fs')
|
2 | var test = require('tape')
|
3 | var envelope = require('turf-envelope')
|
4 | var aggregate = require('../')
|
5 |
|
6 | test('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 |
|
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 |
|
42 | test('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 |
|
62 | test('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 |
|
83 | test('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 |
|
104 | test('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 |
|