67 lines
1.8 KiB
JavaScript
67 lines
1.8 KiB
JavaScript
const RasterAggregation = require('./raster-aggregation');
|
|
const VectorAggregation = require('./vector-aggregation');
|
|
const RASTER_AGGREGATION = 'RasterAggregation';
|
|
const VECTOR_AGGREGATION = 'VectorAggregation';
|
|
|
|
module.exports = class AggregationProxy {
|
|
static get THRESHOLD() {
|
|
return 1e5; // 100K
|
|
}
|
|
|
|
constructor (mapconfig, query, {
|
|
resolution = 256,
|
|
threshold = AggregationProxy.THRESHOLD,
|
|
placement = 'centroid',
|
|
columns = {}
|
|
} = {}) {
|
|
this.mapconfig = mapconfig;
|
|
this.query = query;
|
|
this.resolution = resolution;
|
|
this.threshold = threshold;
|
|
this.placement = placement;
|
|
this.columns = columns;
|
|
this.implementation = this._getAggregationImplementation();
|
|
}
|
|
|
|
_getAggregationImplementation () {
|
|
let implementation = null;
|
|
|
|
switch (this._getAggregationType()) {
|
|
case VECTOR_AGGREGATION:
|
|
implementation = new VectorAggregation(
|
|
this.query,
|
|
this.resolution,
|
|
this.threshold,
|
|
this.placement,
|
|
this.columns
|
|
);
|
|
break;
|
|
case RASTER_AGGREGATION:
|
|
implementation = new RasterAggregation(
|
|
this.query,
|
|
this.resolution,
|
|
this.threshold,
|
|
this.placement,
|
|
this.columns
|
|
);
|
|
break;
|
|
default:
|
|
throw new Error('Unsupported aggregation type');
|
|
}
|
|
|
|
return implementation;
|
|
}
|
|
|
|
_getAggregationType () {
|
|
if (this.mapconfig.isVectorOnlyMapConfig()) {
|
|
return VECTOR_AGGREGATION;
|
|
}
|
|
|
|
return RASTER_AGGREGATION;
|
|
}
|
|
|
|
sql () {
|
|
return this.implementation.sql();
|
|
}
|
|
};
|