From be207d7d036e8be1575dbc082a7ef740329eaaa2 Mon Sep 17 00:00:00 2001 From: athanasios <ath.kouk.oid@gmail.com> Date: Wed, 15 Jul 2020 20:50:18 +0200 Subject: [PATCH] boundingbox now optional --- config.js | 3 ++- routes/v1.js | 14 +++++++------- src/assets.js | 18 +++++++++++++++++- src/context.js | 3 +-- src/geographicBoundingBox.js | 1 + src/getSceneHandler.js | 2 +- src/nodes.js | 6 ++++-- 7 files changed, 33 insertions(+), 14 deletions(-) diff --git a/config.js b/config.js index c29eefe..229d311 100644 --- a/config.js +++ b/config.js @@ -1,5 +1,6 @@ const config = { - port: 9000 + port: 9000, + boundingBoxBufferPercent: 15 } module.exports = config; \ No newline at end of file diff --git a/routes/v1.js b/routes/v1.js index 2b8a791..c8890ef 100644 --- a/routes/v1.js +++ b/routes/v1.js @@ -1,10 +1,11 @@ const express = require("express"); -const { check, validationResult, oneOf } = require("express-validator") +const { check, validationResult } = require("express-validator") const { toLower } = require("../src/customSanitizers"); const { errorHandler } = require("../src/errorHandler"); const checkFactory = require("../src/validationCheckFactory"); const { getSceneHandler } = require("../src/getSceneHandler"); const { getCapabilitiesHandler } = require("../src/getCapabilitiesHandler"); +const assets = require("../src/assets"); const bb = require("../src/boundingbox"); const redirectTo = require("../src/redirectTo"); @@ -56,8 +57,11 @@ const sceneChecks = [ .exists().withMessage("MissingParameterValue") .customSanitizer(toLower) .equals("getscene").withMessage("InvalidParameterValue"), - check("boundingbox") + check("layers") .exists().withMessage("MissingParameterValue") + .custom(value => assets.allLayersExist(value)).withMessage("UnknownLayer"), + check("boundingbox") + .optional() .matches(/^((\-?\d+(\.\d+)?),){3}(\-?\d+(\.\d+)?)$/).withMessage("InvalidParameterValue") .custom(value => bb.isValid(value)).withMessage("InvalidParameterValue"), check("cullingvolume") @@ -74,11 +78,7 @@ const sceneChecks = [ .matches(/^((\-?\d+(\.\d+)?),){1}(\-?\d+(\.\d+)?)$/).withMessage("InvalidParameterValue"), check("time") .exists().withMessage("MissingParameterValue") - .matches(/\d+/).withMessage("InvalidParameterValue"), - check("intersect") - .exists().withMessage("MissingParameterValue") - .customSanitizer(toLower) - .isIn(["true", "false"]).withMessage("InvalidParameterValue") + .matches(/\d+/).withMessage("InvalidParameterValue") ]; router.route("/scene").get(sceneChecks, (req, res) => { diff --git a/src/assets.js b/src/assets.js index 98017b6..30f1a6e 100644 --- a/src/assets.js +++ b/src/assets.js @@ -2,6 +2,22 @@ const fs = require("fs"); const boxIntersect = require("box-intersect"); const path = require('path'); +const getLayers = (layers) => { + return new Promise((resolve, reject) => { + fs.readFile("./assets/assets.json", (err, data) => { + if (err) { + reject(); + } + let assets = JSON.parse(data); + let requestedLayers = layers.split(","); + + assets = assets.filter(asset => requestedLayers.includes(asset.id)); + assets = assets.filter(asset => asset.scope == "public"); + resolve(assets); + }); + }); +} + const getIntersectingLayers = (bb, layers) => { return new Promise((resolve, reject) => { @@ -124,4 +140,4 @@ const isPublic = (url) => { } -module.exports = { getIntersectingLayers, getIntersecting, allLayersExist, getPublicLayers, isPublic }; \ No newline at end of file +module.exports = { getIntersectingLayers, getIntersecting, allLayersExist, getPublicLayers, isPublic, getLayers }; \ No newline at end of file diff --git a/src/context.js b/src/context.js index 6e15ab8..d613551 100644 --- a/src/context.js +++ b/src/context.js @@ -12,8 +12,7 @@ const fromRequest = (req) => { camera: camera.fromString(req.query.camera), offCenterFrustum: offCenterFrustum.fromString(req.query.frustum), drawingBuffer: drawingBuffer.fromString(req.query.drawingbuffer), - requestTime: req.query.time, - intersect: JSON.parse(req.query.intersect.toLowerCase()) + requestTime: req.query.time }; } diff --git a/src/geographicBoundingBox.js b/src/geographicBoundingBox.js index 2d20803..5d39594 100644 --- a/src/geographicBoundingBox.js +++ b/src/geographicBoundingBox.js @@ -61,6 +61,7 @@ class GeographicBoundingBox { } const fromString = (str) => { + if(!str) return null; let tokens = str.split(","); return new GeographicBoundingBox(...tokens.map(token => parseFloat(token))); } diff --git a/src/getSceneHandler.js b/src/getSceneHandler.js index 2b4c696..045afdf 100644 --- a/src/getSceneHandler.js +++ b/src/getSceneHandler.js @@ -3,7 +3,7 @@ const Traverse = require("./traverse"); const getSceneHandler = (req, res) => { - assets.getIntersecting(req.query.boundingbox).then(layers => { + assets.getLayers(req.query.layers).then(layers => { let traverse = new Traverse(); traverse.begin(req, layers[0].url) diff --git a/src/nodes.js b/src/nodes.js index 454be1e..f034c34 100644 --- a/src/nodes.js +++ b/src/nodes.js @@ -1,3 +1,5 @@ +const config = require("../config"); + class Nodes { constructor() { @@ -21,9 +23,9 @@ class Nodes { time: context.requestTime }; - if (context.intersect) { + if (context.bb != null) { let requestedBB = context.bb.clone(); - requestedBB.extend(25); + requestedBB.extend(config.boundingBoxBufferPercent); if (requestedBB.intersectWithGeographic(boundingSphere.geographicCenter)) { this.nodes.push(entry); } -- GitLab