diff --git a/lib/cartodb/models/mapconfig_analysis_layers_adapter.js b/lib/cartodb/models/mapconfig_analysis_layers_adapter.js index 703216f4..2b000ecc 100644 --- a/lib/cartodb/models/mapconfig_analysis_layers_adapter.js +++ b/lib/cartodb/models/mapconfig_analysis_layers_adapter.js @@ -11,6 +11,15 @@ function MapConfigAnalysisLayersAdapter(templateMaps) { module.exports = MapConfigAnalysisLayersAdapter; +var SKIP_COLUMNS = { + 'the_geom': true, + 'the_geom_webmercator': true +}; + +function skipColumns(columnNames) { + return columnNames + .filter(function(columnName) { return !SKIP_COLUMNS[columnName]; }); +} var multitypeStyleTemplate = dot.template([ "#points['mapnik::geometry_type'=1] {", @@ -31,7 +40,7 @@ var multitypeStyleTemplate = dot.template([ "}", "#polygons['mapnik::geometry_type'=3] {", " polygon-fill: {{=it._color}};", - " polygon-opacity: 0.7;", + " polygon-opacity: {{=it._opacity}};", " line-color: #FFF;", " line-width: 0.5;", " line-opacity: {{=it._opacity}};", @@ -46,21 +55,36 @@ function multiTypeStyle(color, opacity) { } var layerQueryTemplate = dot.template([ - 'SELECT ST_Transform(the_geom, 3857) the_geom_webmercator', + 'SELECT ST_Transform(the_geom, 3857) the_geom_webmercator, {{=it._columns}}', 'FROM ({{=it._query}}) _cdb_analysis_query' ].join('\n')); -function getLayer(query, color, opacity) { +function layerQuery(query, columnNames) { + return layerQueryTemplate({ _query: query, _columns: skipColumns(columnNames).join(', ') }); +} + +function getLayer(query, columnNames, color, opacity) { return { type: 'mapnik', options: { - sql: layerQueryTemplate({ _query: query } ), + sql: layerQuery(query, columnNames), cartocss: multiTypeStyle(color, opacity), cartocss_version: '2.3.0' } }; } +function getLayerWithStyle(query, columnNames, cartocss) { + return { + type: 'mapnik', + options: { + sql: layerQuery(query, columnNames), + cartocss: cartocss, + cartocss_version: '2.3.0' + } + }; +} + MapConfigAnalysisLayersAdapter.prototype.getLayers = function(analysisConfiguration, requestMapConfig, callback) { if (!Array.isArray(requestMapConfig.layers)) { @@ -79,11 +103,19 @@ MapConfigAnalysisLayersAdapter.prototype.getLayers = function(analysisConfigurat var layers = []; - analysis.getSortedNodes().reverse().forEach(function(node) { - layers.push(getLayer(node.getQuery(), 'grey', 0.2)); + analysis.getSortedNodes().reverse().forEach(function(node, i) { + var layer = getLayer(node.getQuery(), node.getColumns(), '#333', 0.1 * i); + if (!!node.params && !!node.params.cartocss) { + layer = getLayerWithStyle(node.getQuery(), node.getColumns(), node.params.cartocss); + } + layers.push(layer); }); - layers.push(getLayer(analysis.getQuery())); + layers.push(getLayerWithStyle( + analysis.getQuery(), + analysis.getRoot().getColumns(), + layer.options.cartocss + )); return done(null, { layers: layers }); });