style: minor clone refactoring
Signed-off-by: Michael Nutt <michael@nuttnet.net>
This commit is contained in:
parent
950db94fd9
commit
755c47021f
1 changed files with 71 additions and 44 deletions
115
src/server.js
115
src/server.js
|
|
@ -453,63 +453,71 @@ function start(opts) {
|
||||||
serveTemplate('/$', 'index', (req) => {
|
serveTemplate('/$', 'index', (req) => {
|
||||||
let styles = {};
|
let styles = {};
|
||||||
for (const id of Object.keys(serving.styles || {})) {
|
for (const id of Object.keys(serving.styles || {})) {
|
||||||
styles[id] = Object.assign({}, serving.styles[id]);
|
let style = {
|
||||||
styles[id].serving_data = serving.styles[id];
|
...serving.styles[id],
|
||||||
styles[id].serving_rendered = serving.rendered[id];
|
serving_data: serving.styles[id],
|
||||||
if (styles[id].serving_rendered) {
|
serving_rendered: serving.rendered[id],
|
||||||
const center = styles[id].serving_rendered.tileJSON.center;
|
};
|
||||||
|
|
||||||
|
if (style.serving_rendered) {
|
||||||
|
const { center } = style.serving_rendered.tileJSON;
|
||||||
if (center) {
|
if (center) {
|
||||||
styles[id].viewer_hash = `#${center[2]}/${center[1].toFixed(
|
style.viewer_hash = `#${center[2]}/${center[1].toFixed(
|
||||||
5,
|
5,
|
||||||
)}/${center[0].toFixed(5)}`;
|
)}/${center[0].toFixed(5)}`;
|
||||||
|
|
||||||
const centerPx = mercator.px([center[0], center[1]], center[2]);
|
const centerPx = mercator.px([center[0], center[1]], center[2]);
|
||||||
styles[id].thumbnail = `${center[2]}/${Math.floor(
|
style.thumbnail = `${center[2]}/${Math.floor(
|
||||||
centerPx[0] / 256,
|
centerPx[0] / 256,
|
||||||
)}/${Math.floor(centerPx[1] / 256)}.png`;
|
)}/${Math.floor(centerPx[1] / 256)}.png`;
|
||||||
}
|
}
|
||||||
|
|
||||||
styles[id].xyz_link = getTileUrls(
|
style.xyz_link = getTileUrls(
|
||||||
req,
|
req,
|
||||||
styles[id].serving_rendered.tileJSON.tiles,
|
style.serving_rendered.tileJSON.tiles,
|
||||||
`styles/${id}`,
|
`styles/${id}`,
|
||||||
styles[id].serving_rendered.tileJSON.format,
|
style.serving_rendered.tileJSON.format,
|
||||||
opts.publicUrl,
|
opts.publicUrl,
|
||||||
)[0];
|
)[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
styles[id] = style;
|
||||||
}
|
}
|
||||||
|
|
||||||
let data = {};
|
let datas = {};
|
||||||
for (const id of Object.keys(serving.data || {})) {
|
for (const id of Object.keys(serving.data || {})) {
|
||||||
data[id] = Object.assign({}, serving.data[id]);
|
let data = Object.assign({}, serving.data[id]);
|
||||||
let tilejson = Object.assign({}, serving.data[id].tileJSON);
|
|
||||||
const center = tilejson.center;
|
const { tileJSON } = serving.data[id];
|
||||||
|
const { center } = tileJSON;
|
||||||
|
|
||||||
if (center) {
|
if (center) {
|
||||||
data[id].viewer_hash = `#${center[2]}/${center[1].toFixed(
|
data.viewer_hash = `#${center[2]}/${center[1].toFixed(
|
||||||
5,
|
5,
|
||||||
)}/${center[0].toFixed(5)}`;
|
)}/${center[0].toFixed(5)}`;
|
||||||
}
|
}
|
||||||
data[id].is_vector = tilejson.format === 'pbf';
|
|
||||||
if (!data[id].is_vector) {
|
data.is_vector = tileJSON.format === 'pbf';
|
||||||
|
if (!data.is_vector) {
|
||||||
if (center) {
|
if (center) {
|
||||||
const centerPx = mercator.px([center[0], center[1]], center[2]);
|
const centerPx = mercator.px([center[0], center[1]], center[2]);
|
||||||
data[id].thumbnail = `${center[2]}/${Math.floor(
|
data.thumbnail = `${center[2]}/${Math.floor(
|
||||||
centerPx[0] / 256,
|
centerPx[0] / 256,
|
||||||
)}/${Math.floor(centerPx[1] / 256)}.${tilejson.format}`;
|
)}/${Math.floor(centerPx[1] / 256)}.${tileJSON.format}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
data[id].xyz_link = getTileUrls(
|
data.xyz_link = getTileUrls(
|
||||||
req,
|
req,
|
||||||
tilejson.tiles,
|
tileJSON.tiles,
|
||||||
`data/${id}`,
|
`data/${id}`,
|
||||||
tilejson.format,
|
tileJSON.format,
|
||||||
opts.publicUrl,
|
opts.publicUrl,
|
||||||
{
|
{
|
||||||
pbf: options.pbfAlias,
|
pbf: options.pbfAlias,
|
||||||
},
|
},
|
||||||
)[0];
|
)[0];
|
||||||
}
|
}
|
||||||
if (data[id].filesize) {
|
if (data.filesize) {
|
||||||
let suffix = 'kB';
|
let suffix = 'kB';
|
||||||
let size = parseInt(data_.filesize, 10) / 1024;
|
let size = parseInt(data_.filesize, 10) / 1024;
|
||||||
if (size > 1024) {
|
if (size > 1024) {
|
||||||
|
|
@ -520,27 +528,33 @@ function start(opts) {
|
||||||
suffix = 'GB';
|
suffix = 'GB';
|
||||||
size /= 1024;
|
size /= 1024;
|
||||||
}
|
}
|
||||||
data[id].formatted_filesize = `${size.toFixed(2)} ${suffix}`;
|
data.formatted_filesize = `${size.toFixed(2)} ${suffix}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
datas[id] = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
styles: Object.keys(styles).length ? styles : null,
|
styles: Object.keys(styles).length ? styles : null,
|
||||||
data: Object.keys(data).length ? data : null,
|
data: Object.keys(datas).length ? datas : null,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
serveTemplate('/styles/:id/$', 'viewer', (req) => {
|
serveTemplate('/styles/:id/$', 'viewer', (req) => {
|
||||||
const id = req.params.id;
|
const { id } = req.params;
|
||||||
const style = clone(((serving.styles || {})[id] || {}).styleJSON);
|
const style = serving.styles?.[id]?.styleJSON;
|
||||||
|
|
||||||
if (!style) {
|
if (!style) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
style.id = id;
|
|
||||||
style.name = (serving.styles[id] || serving.rendered[id]).name;
|
return {
|
||||||
style.serving_data = serving.styles[id];
|
id,
|
||||||
style.serving_rendered = serving.rendered[id];
|
name: (serving.styles[id] || serving.rendered[id]).name,
|
||||||
return style;
|
serving_data: serving.styles[id],
|
||||||
|
serving_rendered: serving.rendered[id],
|
||||||
|
...style
|
||||||
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -549,37 +563,49 @@ function start(opts) {
|
||||||
});
|
});
|
||||||
*/
|
*/
|
||||||
serveTemplate('/styles/:id/wmts.xml', 'wmts', (req) => {
|
serveTemplate('/styles/:id/wmts.xml', 'wmts', (req) => {
|
||||||
const id = req.params.id;
|
const { id } = req.params;
|
||||||
const wmts = clone((serving.styles || {})[id]);
|
const wmts = serving.styles?.[id];
|
||||||
|
|
||||||
if (!wmts) {
|
if (!wmts) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wmts.hasOwnProperty('serve_rendered') && !wmts.serve_rendered) {
|
if (wmts.hasOwnProperty('serve_rendered') && !wmts.serve_rendered) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
wmts.id = id;
|
|
||||||
wmts.name = (serving.styles[id] || serving.rendered[id]).name;
|
let baseUrl;
|
||||||
if (opts.publicUrl) {
|
if (opts.publicUrl) {
|
||||||
wmts.baseUrl = opts.publicUrl;
|
baseUrl = opts.publicUrl;
|
||||||
} else {
|
} else {
|
||||||
wmts.baseUrl = `${
|
baseUrl = `${
|
||||||
req.get('X-Forwarded-Protocol')
|
req.get('X-Forwarded-Protocol')
|
||||||
? req.get('X-Forwarded-Protocol')
|
? req.get('X-Forwarded-Protocol')
|
||||||
: req.protocol
|
: req.protocol
|
||||||
}://${req.get('host')}/`;
|
}://${req.get('host')}/`;
|
||||||
}
|
}
|
||||||
return wmts;
|
|
||||||
|
return {
|
||||||
|
id,
|
||||||
|
name: (serving.styles[id] || serving.rendered[id]).name,
|
||||||
|
baseUrl,
|
||||||
|
...wmts,
|
||||||
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
serveTemplate('/data/:id/$', 'data', (req) => {
|
serveTemplate('/data/:id/$', 'data', (req) => {
|
||||||
const id = req.params.id;
|
const { id } = req.params;
|
||||||
const data = clone(serving.data[id]);
|
const data = serving.data[id];
|
||||||
|
|
||||||
if (!data) {
|
if (!data) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
data.id = id;
|
|
||||||
data.is_vector = data.tileJSON.format === 'pbf';
|
return {
|
||||||
return data;
|
id,
|
||||||
|
is_vector: data.tileJSON.format === 'pbf',
|
||||||
|
...data
|
||||||
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
let startupComplete = false;
|
let startupComplete = false;
|
||||||
|
|
@ -587,6 +613,7 @@ function start(opts) {
|
||||||
console.log('Startup complete');
|
console.log('Startup complete');
|
||||||
startupComplete = true;
|
startupComplete = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get('/health', (req, res, next) => {
|
app.get('/health', (req, res, next) => {
|
||||||
if (startupComplete) {
|
if (startupComplete) {
|
||||||
return res.status(200).send('OK');
|
return res.status(200).send('OK');
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue