287 lines
8.6 KiB
JavaScript
287 lines
8.6 KiB
JavaScript
'use strict';
|
|
|
|
require('../../support/test-helper');
|
|
|
|
var assert = require('../../support/assert');
|
|
var TestClient = require('../../support/test-client');
|
|
var dot = require('dot');
|
|
var debug = require('debug')('windshaft:cartodb:test');
|
|
|
|
describe('analysis-layers use cases', function () {
|
|
var multitypeStyleTemplate = dot.template(
|
|
`#points['mapnik::geometry_type'=1] {
|
|
marker-fill-opacity: {{=it._opacity}};
|
|
marker-line-color: #FFF;
|
|
marker-line-width: 0.5;
|
|
marker-line-opacity: {{=it._opacity}};
|
|
marker-placement: point;
|
|
marker-type: ellipse;
|
|
marker-width: 8;
|
|
marker-fill: {{=it._color}};
|
|
marker-allow-overlap: true;
|
|
}
|
|
#lines['mapnik::geometry_type'=2] {
|
|
line-color: {{=it._color}};
|
|
line-width: 2;
|
|
line-opacity: {{=it._opacity}};
|
|
}
|
|
#polygons['mapnik::geometry_type'=3] {
|
|
polygon-fill: {{=it._color}};
|
|
polygon-opacity: {{=it._opacity}};
|
|
line-color: #FFF;
|
|
line-width: 0.5;
|
|
line-opacity: {{=it._opacity}};
|
|
}`
|
|
);
|
|
|
|
function cartocss (color, opacity) {
|
|
return multitypeStyleTemplate({
|
|
_color: color || '#F11810',
|
|
_opacity: Number.isFinite(opacity) ? opacity : 1
|
|
});
|
|
}
|
|
|
|
function mapConfig (layers, dataviews, analysis) {
|
|
return {
|
|
version: '1.5.0',
|
|
layers: layers,
|
|
dataviews: dataviews || {},
|
|
analyses: analysis || []
|
|
};
|
|
}
|
|
|
|
var DEFAULT_MULTITYPE_STYLE = cartocss();
|
|
|
|
var TILE_ANALYSIS_TABLES = { z: 14, x: 8023, y: 6177 };
|
|
|
|
var pointInPolygonDef = {
|
|
id: 'a1',
|
|
type: 'point-in-polygon',
|
|
params: {
|
|
points_source: {
|
|
type: 'source',
|
|
params: {
|
|
query: 'select * from analysis_rent_listings'
|
|
}
|
|
},
|
|
polygons_source: {
|
|
type: 'buffer',
|
|
params: {
|
|
source: {
|
|
type: 'source',
|
|
params: {
|
|
query: 'select * from analysis_banks'
|
|
}
|
|
},
|
|
radius: 250
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
var bufferDef = {
|
|
id: 'b1',
|
|
type: 'buffer',
|
|
params: {
|
|
source: {
|
|
type: 'source',
|
|
params: {
|
|
query: 'select * from analysis_banks'
|
|
}
|
|
},
|
|
radius: 250
|
|
}
|
|
};
|
|
|
|
var useCases = [
|
|
{
|
|
desc: '1 mapnik layer',
|
|
mapConfig: {
|
|
version: '1.5.0',
|
|
layers: [
|
|
{
|
|
type: 'cartodb',
|
|
options: {
|
|
sql: 'select * from analysis_rent_listings',
|
|
cartocss: DEFAULT_MULTITYPE_STYLE,
|
|
cartocss_version: '2.3.0'
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
|
|
{
|
|
desc: '2 mapnik layers',
|
|
mapConfig: mapConfig([
|
|
{
|
|
type: 'cartodb',
|
|
options: {
|
|
sql: 'select * from analysis_banks',
|
|
cartocss: cartocss('#2167AB'),
|
|
cartocss_version: '2.3.0'
|
|
}
|
|
},
|
|
{
|
|
type: 'cartodb',
|
|
options: {
|
|
sql: 'select * from analysis_rent_listings',
|
|
cartocss: DEFAULT_MULTITYPE_STYLE,
|
|
cartocss_version: '2.3.0'
|
|
}
|
|
}
|
|
])
|
|
},
|
|
|
|
{
|
|
desc: 'rent listings + buffer over atm-machines',
|
|
mapConfig: mapConfig([
|
|
{
|
|
type: 'cartodb',
|
|
options: {
|
|
sql: 'select * from analysis_rent_listings',
|
|
cartocss: DEFAULT_MULTITYPE_STYLE,
|
|
cartocss_version: '2.3.0'
|
|
}
|
|
},
|
|
{
|
|
type: 'cartodb',
|
|
options: {
|
|
source: {
|
|
id: 'b1'
|
|
},
|
|
cartocss: DEFAULT_MULTITYPE_STYLE,
|
|
cartocss_version: '2.3.0'
|
|
}
|
|
}
|
|
],
|
|
{},
|
|
[
|
|
bufferDef
|
|
]
|
|
)
|
|
},
|
|
|
|
{
|
|
desc: 'rent listings + point-in-polygon from buffer atm-machines and rent listings',
|
|
mapConfig: mapConfig([
|
|
{
|
|
type: 'cartodb',
|
|
options: {
|
|
sql: 'select * from analysis_rent_listings',
|
|
cartocss: DEFAULT_MULTITYPE_STYLE,
|
|
cartocss_version: '2.3.0'
|
|
}
|
|
},
|
|
{
|
|
type: 'cartodb',
|
|
options: {
|
|
source: {
|
|
id: 'a1'
|
|
},
|
|
cartocss: DEFAULT_MULTITYPE_STYLE,
|
|
cartocss_version: '2.3.0'
|
|
}
|
|
}
|
|
],
|
|
{},
|
|
[
|
|
pointInPolygonDef
|
|
]
|
|
)
|
|
},
|
|
|
|
{
|
|
desc: 'point-in-polygon from buffer atm-machines and rent listings + rent listings',
|
|
mapConfig: mapConfig(
|
|
[
|
|
{
|
|
type: 'cartodb',
|
|
options: {
|
|
source: {
|
|
id: 'a1'
|
|
},
|
|
cartocss: DEFAULT_MULTITYPE_STYLE,
|
|
cartocss_version: '2.3.0'
|
|
}
|
|
},
|
|
{
|
|
type: 'cartodb',
|
|
options: {
|
|
sql: 'select * from analysis_rent_listings',
|
|
cartocss: DEFAULT_MULTITYPE_STYLE,
|
|
cartocss_version: '2.3.0'
|
|
}
|
|
}
|
|
],
|
|
{},
|
|
[
|
|
pointInPolygonDef
|
|
]
|
|
)
|
|
},
|
|
|
|
{
|
|
desc: 'buffer + point-in-polygon from buffer atm-machines and rent listings + rent listings',
|
|
mapConfig: mapConfig(
|
|
[
|
|
{
|
|
type: 'cartodb',
|
|
options: {
|
|
sql: 'select * from analysis_rent_listings',
|
|
cartocss: DEFAULT_MULTITYPE_STYLE,
|
|
cartocss_version: '2.3.0'
|
|
}
|
|
},
|
|
{
|
|
type: 'cartodb',
|
|
options: {
|
|
source: {
|
|
id: 'a1'
|
|
},
|
|
cartocss: DEFAULT_MULTITYPE_STYLE,
|
|
cartocss_version: '2.3.0'
|
|
}
|
|
},
|
|
{
|
|
type: 'cartodb',
|
|
options: {
|
|
source: {
|
|
id: 'b1'
|
|
},
|
|
cartocss: DEFAULT_MULTITYPE_STYLE,
|
|
cartocss_version: '2.3.0'
|
|
}
|
|
}
|
|
],
|
|
{},
|
|
[
|
|
bufferDef,
|
|
pointInPolygonDef
|
|
]
|
|
)
|
|
}
|
|
];
|
|
|
|
useCases.forEach(function (useCase) {
|
|
if (useCase.skip) {
|
|
return debug(JSON.stringify(useCase.mapConfig, null, 4));
|
|
}
|
|
it(`should implement use case: '${useCase.desc}'`, function (done) {
|
|
var testClient = new TestClient(useCase.mapConfig, 1234);
|
|
|
|
var tile = useCase.tile || TILE_ANALYSIS_TABLES;
|
|
|
|
testClient.getTile(tile.z, tile.x, tile.y, function (err, res, image) {
|
|
assert.ok(!err, err);
|
|
|
|
// image.save('/tmp/tests/' + imageIdx + '---' + useCase.desc.replace(/\s/g, '-') + '.png');
|
|
|
|
assert.strictEqual(image.width(), 256);
|
|
|
|
testClient.drain(done);
|
|
});
|
|
});
|
|
});
|
|
});
|