Allow override zoom+center or bbox for static named maps previews
This commit is contained in:
parent
b99db7cb69
commit
6639664b3f
@ -14,6 +14,9 @@ var REQUEST_QUERY_PARAMS_WHITELIST = [
|
|||||||
'api_key',
|
'api_key',
|
||||||
'auth_token',
|
'auth_token',
|
||||||
'callback',
|
'callback',
|
||||||
|
'zoom',
|
||||||
|
'lon',
|
||||||
|
'lat',
|
||||||
// widgets & filters
|
// widgets & filters
|
||||||
'filters', // json
|
'filters', // json
|
||||||
'own_filter', // 0, 1
|
'own_filter', // 0, 1
|
||||||
|
@ -140,7 +140,7 @@ NamedMapsController.prototype.staticMap = function(req, res) {
|
|||||||
function prepareImageOptions(err, _namedMapProvider) {
|
function prepareImageOptions(err, _namedMapProvider) {
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
namedMapProvider = _namedMapProvider;
|
namedMapProvider = _namedMapProvider;
|
||||||
self.getStaticImageOptions(cdbUser, namedMapProvider, this);
|
self.getStaticImageOptions(cdbUser, req.params, namedMapProvider, this);
|
||||||
},
|
},
|
||||||
function getImage(err, imageOpts) {
|
function getImage(err, imageOpts) {
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
@ -192,9 +192,37 @@ var DEFAULT_ZOOM_CENTER = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
NamedMapsController.prototype.getStaticImageOptions = function(cdbUser, namedMapProvider, callback) {
|
function numMapper(n) {
|
||||||
|
return +n;
|
||||||
|
}
|
||||||
|
|
||||||
|
NamedMapsController.prototype.getStaticImageOptions = function(cdbUser, params, namedMapProvider, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
|
if ([params.zoom, params.lon, params.lat].map(numMapper).every(Number.isFinite)) {
|
||||||
|
return callback(null, {
|
||||||
|
zoom: params.zoom,
|
||||||
|
center: {
|
||||||
|
lng: params.lon,
|
||||||
|
lat: params.lat
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (params.bbox) {
|
||||||
|
var bbox = params.bbox.split(',').map(numMapper);
|
||||||
|
if (bbox.length === 4 && bbox.every(Number.isFinite)) {
|
||||||
|
return callback(null, {
|
||||||
|
bounds: {
|
||||||
|
west: bbox[0],
|
||||||
|
south: bbox[1],
|
||||||
|
east: bbox[2],
|
||||||
|
north: bbox[3]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
step(
|
step(
|
||||||
function getTemplate() {
|
function getTemplate() {
|
||||||
namedMapProvider.getTemplate(this);
|
namedMapProvider.getTemplate(this);
|
||||||
@ -205,6 +233,9 @@ NamedMapsController.prototype.getStaticImageOptions = function(cdbUser, namedMap
|
|||||||
if (template.view) {
|
if (template.view) {
|
||||||
var zoomCenter = templateZoomCenter(template.view);
|
var zoomCenter = templateZoomCenter(template.view);
|
||||||
if (zoomCenter) {
|
if (zoomCenter) {
|
||||||
|
if (Number.isFinite(+params.zoom)) {
|
||||||
|
zoomCenter.zoom = +params.zoom;
|
||||||
|
}
|
||||||
return zoomCenter;
|
return zoomCenter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
var qs = require('querystring');
|
||||||
var testHelper = require('../support/test_helper');
|
var testHelper = require('../support/test_helper');
|
||||||
var RedisPool = require('redis-mpool');
|
var RedisPool = require('redis-mpool');
|
||||||
|
|
||||||
@ -53,10 +54,18 @@ describe('named maps static view', function() {
|
|||||||
templateMaps.delTemplate(username, templateName, done);
|
templateMaps.delTemplate(username, templateName, done);
|
||||||
});
|
});
|
||||||
|
|
||||||
function getStaticMap(callback) {
|
function getStaticMap(params, callback) {
|
||||||
|
if (!callback) {
|
||||||
|
callback = params;
|
||||||
|
params = null;
|
||||||
|
}
|
||||||
|
|
||||||
var url = '/api/v1/map/static/named/' + templateName + '/640/480.png';
|
var url = '/api/v1/map/static/named/' + templateName + '/640/480.png';
|
||||||
|
|
||||||
|
if (params !== null) {
|
||||||
|
url += '?' + qs.stringify(params);
|
||||||
|
}
|
||||||
|
|
||||||
var requestOptions = {
|
var requestOptions = {
|
||||||
url: url,
|
url: url,
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
@ -163,4 +172,30 @@ describe('named maps static view', function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should return override zoom', function (done) {
|
||||||
|
var view = {
|
||||||
|
bounds: {
|
||||||
|
west: 0,
|
||||||
|
south: 0,
|
||||||
|
east: 45,
|
||||||
|
north: 45
|
||||||
|
},
|
||||||
|
zoom: 4,
|
||||||
|
center: {
|
||||||
|
lng: 40,
|
||||||
|
lat: 20
|
||||||
|
}
|
||||||
|
};
|
||||||
|
templateMaps.addTemplate(username, createTemplate(view), function (err) {
|
||||||
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
|
getStaticMap({ zoom: 3 }, function(err, img) {
|
||||||
|
assert.ok(!err);
|
||||||
|
img.save('/tmp/static.png');
|
||||||
|
assert.imageIsSimilarToFile(img, previewFixture('override-zoom'), IMAGE_TOLERANCE, done);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
BIN
test/fixtures/previews/populated_places_simple_reduced-override-zoom.png
vendored
Normal file
BIN
test/fixtures/previews/populated_places_simple_reduced-override-zoom.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 88 KiB |
Loading…
Reference in New Issue
Block a user