Simplify aggregation templates
This commit is contained in:
parent
65beb6e460
commit
286daa9bec
@ -4,31 +4,6 @@ const timeDimension = require('./time-dimension');
|
|||||||
|
|
||||||
const DEFAULT_PLACEMENT = 'point-sample';
|
const DEFAULT_PLACEMENT = 'point-sample';
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a template function (function that accepts template parameters and returns a string)
|
|
||||||
* to generate an aggregation query.
|
|
||||||
* Valid options to define the query template are:
|
|
||||||
* - placement
|
|
||||||
* - columns
|
|
||||||
* - dimensions*
|
|
||||||
* The query template parameters taken by the result template function are:
|
|
||||||
* - sourceQuery
|
|
||||||
* - res
|
|
||||||
* - columns
|
|
||||||
* - dimensions
|
|
||||||
*/
|
|
||||||
const templateForOptions = (options) => {
|
|
||||||
let templateFn = defaultAggregationQueryTemplate;
|
|
||||||
if (!options.isDefaultAggregation) {
|
|
||||||
templateFn = aggregationQueryTemplates[options.placement || DEFAULT_PLACEMENT];
|
|
||||||
if (!templateFn) {
|
|
||||||
throw new Error("Invalid Aggregation placement: '" + options.placement + "'");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return templateFn;
|
|
||||||
};
|
|
||||||
|
|
||||||
function optionsToParams (options) {
|
function optionsToParams (options) {
|
||||||
return {
|
return {
|
||||||
sourceQuery: options.query,
|
sourceQuery: options.query,
|
||||||
@ -55,7 +30,7 @@ function optionsToParams (options) {
|
|||||||
* When placement, columns or dimensions are specified, columns are aggregated as requested
|
* When placement, columns or dimensions are specified, columns are aggregated as requested
|
||||||
* (by default only _cdb_feature_count) and with the_geom_webmercator as defined by placement.
|
* (by default only _cdb_feature_count) and with the_geom_webmercator as defined by placement.
|
||||||
*/
|
*/
|
||||||
const queryForOptions = (options) => templateForOptions(options)(optionsToParams(options));
|
const queryForOptions = (options) => aggregationQueryTemplate(optionsToParams(options));
|
||||||
|
|
||||||
module.exports = queryForOptions;
|
module.exports = queryForOptions;
|
||||||
|
|
||||||
@ -398,7 +373,7 @@ const aggregatedPosCoordinate = (ctx, coordinate) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const defaultAggregationQueryTemplate = ctx => `
|
const aggregationQueryTemplate = ctx => `
|
||||||
WITH __cdb_grid_params AS
|
WITH __cdb_grid_params AS
|
||||||
(
|
(
|
||||||
${gridInfoQuery(ctx)}
|
${gridInfoQuery(ctx)}
|
||||||
@ -437,14 +412,7 @@ SELECT * FROM
|
|||||||
${aggregatedPointJoin(ctx)}
|
${aggregatedPointJoin(ctx)}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const aggregationQueryTemplates = {
|
module.exports.SUPPORTED_PLACEMENTS = ['centroid', 'point-grid', 'point-sample'];
|
||||||
'centroid': defaultAggregationQueryTemplate,
|
|
||||||
'point-grid': defaultAggregationQueryTemplate,
|
|
||||||
'point-sample': defaultAggregationQueryTemplate
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports.SUPPORTED_PLACEMENTS = Object.keys(aggregationQueryTemplates);
|
|
||||||
module.exports.GEOMETRY_COLUMN = 'the_geom_webmercator';
|
module.exports.GEOMETRY_COLUMN = 'the_geom_webmercator';
|
||||||
|
|
||||||
const clusterFeaturesQuery = ctx => `
|
const clusterFeaturesQuery = ctx => `
|
||||||
|
Loading…
Reference in New Issue
Block a user