From f82e4031802742419bdd071eb09a4219b476b6f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Mon, 25 Feb 2019 19:40:18 +0100 Subject: [PATCH] Implement query to get features of a cluster for an aggregated map from @jgoizueta's cluster query --- .../models/aggregation/aggregation-query.js | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/lib/cartodb/models/aggregation/aggregation-query.js b/lib/cartodb/models/aggregation/aggregation-query.js index 1bddf02d..f74df93a 100644 --- a/lib/cartodb/models/aggregation/aggregation-query.js +++ b/lib/cartodb/models/aggregation/aggregation-query.js @@ -448,3 +448,31 @@ const aggregationQueryTemplates = { module.exports.SUPPORTED_PLACEMENTS = Object.keys(aggregationQueryTemplates); module.exports.GEOMETRY_COLUMN = 'the_geom_webmercator'; + +const clusterFeaturesQuery = ctx => ` + WITH + _cdb_params AS ( + SELECT + ${gridResolution(ctx)} AS res + ), + _cell AS ( + SELECT + ST_MakeEnvelope( + Floor(ST_X(_cdb_query.the_geom_webmercator)/_cdb_params.res)*_cdb_params.res, + Floor(ST_Y(_cdb_query.the_geom_webmercator)/_cdb_params.res)*_cdb_params.res, + Floor(ST_X(_cdb_query.the_geom_webmercator)/_cdb_params.res + 1)*_cdb_params.res, + Floor(ST_Y(_cdb_query.the_geom_webmercator)/_cdb_params.res + 1)*_cdb_params.res, + 3857 + ) AS bbox + FROM (${ctx.sourceQuery}) _cdb_query, _cdb_params + WHERE _cdb_query.cartodb_id = ${ctx.id} + ) + SELECT _cdb_query.* FROM _cell, (${ctx.sourceQuery}) _cdb_query + WHERE ST_Intersects(_cdb_query.the_geom_webmercator, _cell.bbox) +`; + +module.exports.featuresQuery = (id, options) => clusterFeaturesQuery({ + id, + sourceQuery: options.query, + res: 256/options.resolution +});