Improve styling in analysis layers

This commit is contained in:
Raul Ochoa
2016-03-02 12:42:42 +01:00
parent a44477dddc
commit ce032fcc96

View File

@@ -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 });
});