@golemio/mvt-maps 1.0.1-dev.1913484303 → 1.0.1-dev.1945447563
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/output-gateway/controllers/V2MvtController.d.ts +5 -2
- package/dist/output-gateway/controllers/V2MvtController.js +31 -5
- package/dist/output-gateway/controllers/V2MvtController.js.map +1 -1
- package/dist/output-gateway/routers/V2MvtRouter.js +3 -0
- package/dist/output-gateway/routers/V2MvtRouter.js.map +1 -1
- package/dist/output-gateway/services/FilterBuilder.d.ts +9 -0
- package/dist/output-gateway/services/FilterBuilder.js +58 -0
- package/dist/output-gateway/services/FilterBuilder.js.map +1 -0
- package/dist/output-gateway/services/IFilterParam.d.ts +5 -0
- package/dist/output-gateway/services/IFilterParam.js +3 -0
- package/dist/output-gateway/services/IFilterParam.js.map +1 -0
- package/dist/output-gateway/services/MvtClusterService.d.ts +2 -1
- package/dist/output-gateway/services/MvtClusterService.js +5 -1
- package/dist/output-gateway/services/MvtClusterService.js.map +1 -1
- package/docs/implementation_documentation.md +7 -0
- package/docs/openapi-output.yaml +15 -0
- package/package.json +1 -1
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import { NextFunction, Request, Response } from "@golemio/core/dist/shared/express";
|
|
2
1
|
import { MvtClusterService } from "../services/MvtClusterService";
|
|
2
|
+
import { ILogger } from "@golemio/core/dist/helpers/logger/LoggerProvider";
|
|
3
|
+
import { NextFunction, Request, Response } from "@golemio/core/dist/shared/express";
|
|
3
4
|
export declare class V2MvtController {
|
|
4
5
|
private service;
|
|
5
|
-
|
|
6
|
+
private logger;
|
|
7
|
+
constructor(service: MvtClusterService, logger: ILogger);
|
|
6
8
|
getAll: (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
7
9
|
validate: (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
8
10
|
private parseParams;
|
|
11
|
+
private parseFilterParams;
|
|
9
12
|
}
|
|
@@ -13,17 +13,20 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.V2MvtController = void 0;
|
|
16
|
-
const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
|
|
17
|
-
const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
|
|
18
16
|
const ModuleContainerToken_1 = require("../ioc/ModuleContainerToken");
|
|
19
17
|
const MvtClusterService_1 = require("../services/MvtClusterService");
|
|
18
|
+
const CoreToken_1 = require("@golemio/core/dist/helpers/ioc/CoreToken");
|
|
19
|
+
const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
|
|
20
|
+
const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
|
|
20
21
|
let V2MvtController = exports.V2MvtController = class V2MvtController {
|
|
21
|
-
constructor(service) {
|
|
22
|
+
constructor(service, logger) {
|
|
22
23
|
this.service = service;
|
|
24
|
+
this.logger = logger;
|
|
23
25
|
this.getAll = async (req, res, next) => {
|
|
24
26
|
try {
|
|
25
27
|
const params = this.parseParams(req);
|
|
26
|
-
const
|
|
28
|
+
const filterParams = this.parseFilterParams(req);
|
|
29
|
+
const result = await this.service.getTile(params.table, params.geometry, params.x, params.y, params.z, params.maxZoom, params.attributes, params.radius, params.clusterPoint, params.colorAttribute, filterParams);
|
|
27
30
|
res.setHeader("Content-Type", "application/vnd.mapbox-vector-tile");
|
|
28
31
|
res.status(200).send(result);
|
|
29
32
|
}
|
|
@@ -63,10 +66,33 @@ let V2MvtController = exports.V2MvtController = class V2MvtController {
|
|
|
63
66
|
throw new golemio_errors_1.GeneralError("Param parsing error", this.constructor.name, err, 500);
|
|
64
67
|
}
|
|
65
68
|
}
|
|
69
|
+
parseFilterParams(req) {
|
|
70
|
+
// Syntax: object structure in req.query.filter.<field_name>.<operator>=<value>
|
|
71
|
+
try {
|
|
72
|
+
const filters = [];
|
|
73
|
+
if (req.query.filter && typeof req.query.filter === "object") {
|
|
74
|
+
const filterObj = req.query.filter;
|
|
75
|
+
for (const field of Object.keys(filterObj)) {
|
|
76
|
+
const operators = filterObj[field];
|
|
77
|
+
if (operators && typeof operators === "object") {
|
|
78
|
+
for (const operator of Object.keys(operators)) {
|
|
79
|
+
const value = operators[operator];
|
|
80
|
+
filters.push({ field, operator, value });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return filters;
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
throw new golemio_errors_1.GeneralError("Filter parameters error", this.constructor.name, err, 500);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
66
91
|
};
|
|
67
92
|
exports.V2MvtController = V2MvtController = __decorate([
|
|
68
93
|
(0, tsyringe_1.injectable)(),
|
|
69
94
|
__param(0, (0, tsyringe_1.inject)(ModuleContainerToken_1.ModuleContainerToken.MvtClusterService)),
|
|
70
|
-
|
|
95
|
+
__param(1, (0, tsyringe_1.inject)(CoreToken_1.CoreToken.Logger)),
|
|
96
|
+
__metadata("design:paramtypes", [MvtClusterService_1.MvtClusterService, Object])
|
|
71
97
|
], V2MvtController);
|
|
72
98
|
//# sourceMappingURL=V2MvtController.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"V2MvtController.js","sourceRoot":"","sources":["../../../src/output-gateway/controllers/V2MvtController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"V2MvtController.js","sourceRoot":"","sources":["../../../src/output-gateway/controllers/V2MvtController.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,9 @@ class V2MvtRouter extends AbstractRouter_1.AbstractRouter {
|
|
|
28
28
|
(0, express_validator_1.query)("radius").optional().isInt(),
|
|
29
29
|
(0, express_validator_1.query)("clusterPoint").optional().isString().not().isArray(),
|
|
30
30
|
(0, express_validator_1.query)("colorAttribute").optional().isString().not().isArray(),
|
|
31
|
+
(0, express_validator_1.query)("filter").optional().isObject(),
|
|
32
|
+
(0, express_validator_1.query)("filter.*").optional().isObject(),
|
|
33
|
+
(0, express_validator_1.query)("filter.*.*").optional().isString().not().isArray(),
|
|
31
34
|
], Validation_1.checkErrors, this.cacheHeaderMiddleware.getMiddleware(5 * 60, 60), this.controller.getAll);
|
|
32
35
|
this.router.get("/validation", [
|
|
33
36
|
(0, express_validator_1.query)("table").exists().isString().not().isArray(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"V2MvtRouter.js","sourceRoot":"","sources":["../../../src/output-gateway/routers/V2MvtRouter.ts"],"names":[],"mappings":";;;AAAA,kCAA0C;AAC1C,sEAAoE;AACpE,sFAAmF;AAEnF,+DAAuE;AACvE,6EAA2E;AAC3E,mFAA2E;AAC3E,2CAA2C;AAG3C,MAAM,WAAY,SAAQ,+BAAc;IAIpC;QACI,KAAK,CAAC,wBAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAE9B,IAAI,CAAC,UAAU,GAAG,iBAAY,CAAC,OAAO,CAAC,2CAAoB,CAAC,eAAe,CAAC,CAAC;QAC7E,IAAI,CAAC,qBAAqB,GAAG,iBAAY,CAAC,OAAO,CAAwB,oBAAc,CAAC,qBAAqB,CAAC,CAAC;QAC/G,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAES,UAAU;QAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CACX,WAAW,EACX;YACI,IAAA,yBAAK,EAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;YAC3C,IAAA,yBAAK,EAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;YAC3C,IAAA,yBAAK,EAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;YAC3C,IAAA,yBAAK,EAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;YAClD,IAAA,yBAAK,EAAC,UAAU,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;YACrD,IAAA,yBAAK,EAAC,YAAY,CAAC,CAAC,MAAM,EAAE;YAC5B,IAAA,yBAAK,EAAC,cAAc,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;YACzD,IAAA,yBAAK,EAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;YACjC,IAAA,yBAAK,EAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE;YAClC,IAAA,yBAAK,EAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;YAC3D,IAAA,yBAAK,EAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;
|
|
1
|
+
{"version":3,"file":"V2MvtRouter.js","sourceRoot":"","sources":["../../../src/output-gateway/routers/V2MvtRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IFilterParam } from "./IFilterParam";
|
|
2
|
+
export declare class FilterBuilder {
|
|
3
|
+
private static readonly operatorBuilders;
|
|
4
|
+
static prepareFilterQuery(filterParams: IFilterParam[]): {
|
|
5
|
+
query: string[];
|
|
6
|
+
bindings: any[];
|
|
7
|
+
};
|
|
8
|
+
private static parseValue;
|
|
9
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FilterBuilder = void 0;
|
|
4
|
+
class FilterBuilder {
|
|
5
|
+
static prepareFilterQuery(filterParams) {
|
|
6
|
+
let bindingIndex = 1;
|
|
7
|
+
const filterQueries = [];
|
|
8
|
+
const filterBindings = [];
|
|
9
|
+
for (const filterParam of filterParams) {
|
|
10
|
+
const { field, operator, value } = filterParam;
|
|
11
|
+
const parsedValue = this.parseValue(operator, value);
|
|
12
|
+
if (Array.isArray(parsedValue)) {
|
|
13
|
+
const filterQuery = this.operatorBuilders[operator](field, bindingIndex, parsedValue.length);
|
|
14
|
+
filterQueries.push(filterQuery);
|
|
15
|
+
filterBindings.push(...parsedValue);
|
|
16
|
+
bindingIndex += parsedValue.length;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
const filterQuery = this.operatorBuilders[operator](field, bindingIndex);
|
|
20
|
+
filterQueries.push(filterQuery);
|
|
21
|
+
filterBindings.push(parsedValue);
|
|
22
|
+
bindingIndex++;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
query: filterQueries,
|
|
27
|
+
bindings: filterBindings,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
static parseValue(operator, value) {
|
|
31
|
+
if (operator === "in") {
|
|
32
|
+
return value.split(",");
|
|
33
|
+
}
|
|
34
|
+
else if (operator === "gt" || operator === "gte" || operator === "lt" || operator === "lte") {
|
|
35
|
+
return Number(value);
|
|
36
|
+
}
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.FilterBuilder = FilterBuilder;
|
|
41
|
+
FilterBuilder.operatorBuilders = {
|
|
42
|
+
eq: (field, bindingIndex) => `${field} = \$${bindingIndex}`,
|
|
43
|
+
ne: (field, bindingIndex) => `${field} != \$${bindingIndex}`,
|
|
44
|
+
gt: (field, bindingIndex) => `${field} > \$${bindingIndex}`,
|
|
45
|
+
gte: (field, bindingIndex) => `${field} >= \$${bindingIndex}`,
|
|
46
|
+
lt: (field, bindingIndex) => `${field} < \$${bindingIndex}`,
|
|
47
|
+
lte: (field, bindingIndex) => `${field} <= \$${bindingIndex}`,
|
|
48
|
+
in: (field, bindingIndex, count) => {
|
|
49
|
+
if (count) {
|
|
50
|
+
return `${field} IN (${Array.from({ length: count }, (_, i) => `\$${bindingIndex + i}`).join(",")})`;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
return `${field} IN (\$${bindingIndex})`;
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
//...
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=FilterBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterBuilder.js","sourceRoot":"","sources":["../../../src/output-gateway/services/FilterBuilder.ts"],"names":[],"mappings":";;;AAEA,MAAa,aAAa;IAkBf,MAAM,CAAC,kBAAkB,CAAC,YAA4B;QACzD,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,MAAM,cAAc,GAAU,EAAE,CAAC;QAEjC,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;YACpC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC;YAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAErD,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;gBAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;gBAC7F,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAChC,cAAc,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;gBACpC,YAAY,IAAI,WAAW,CAAC,MAAM,CAAC;aACtC;iBAAM;gBACH,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;gBACzE,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAChC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACjC,YAAY,EAAE,CAAC;aAClB;SACJ;QAED,OAAO;YACH,KAAK,EAAE,aAAa;YACpB,QAAQ,EAAE,cAAc;SAC3B,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,UAAU,CAAC,QAAgB,EAAE,KAAa;QACrD,IAAI,QAAQ,KAAK,IAAI,EAAE;YACnB,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SAC3B;aAAM,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,KAAK,EAAE;YAC3F,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;SACxB;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;;AAtDL,sCAuDC;AAtD2B,8BAAgB,GAAoF;IACxH,EAAE,EAAE,CAAC,KAAa,EAAE,YAAoB,EAAE,EAAE,CAAC,GAAG,KAAK,QAAQ,YAAY,EAAE;IAC3E,EAAE,EAAE,CAAC,KAAa,EAAE,YAAoB,EAAE,EAAE,CAAC,GAAG,KAAK,SAAS,YAAY,EAAE;IAC5E,EAAE,EAAE,CAAC,KAAa,EAAE,YAAoB,EAAE,EAAE,CAAC,GAAG,KAAK,QAAQ,YAAY,EAAE;IAC3E,GAAG,EAAE,CAAC,KAAa,EAAE,YAAoB,EAAE,EAAE,CAAC,GAAG,KAAK,SAAS,YAAY,EAAE;IAC7E,EAAE,EAAE,CAAC,KAAa,EAAE,YAAoB,EAAE,EAAE,CAAC,GAAG,KAAK,QAAQ,YAAY,EAAE;IAC3E,GAAG,EAAE,CAAC,KAAa,EAAE,YAAoB,EAAE,EAAE,CAAC,GAAG,KAAK,SAAS,YAAY,EAAE;IAC7E,EAAE,EAAE,CAAC,KAAa,EAAE,YAAoB,EAAE,KAAc,EAAE,EAAE;QACxD,IAAI,KAAK,EAAE;YACP,OAAO,GAAG,KAAK,QAAQ,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;SACxG;aAAM;YACH,OAAO,GAAG,KAAK,UAAU,YAAY,GAAG,CAAC;SAC5C;IACL,CAAC;IACD,KAAK;CACR,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IFilterParam.js","sourceRoot":"","sources":["../../../src/output-gateway/services/IFilterParam.ts"],"names":[],"mappings":""}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ILogger } from "@golemio/core/dist/helpers";
|
|
2
2
|
import { IDatabaseConnector } from "@golemio/core/dist/helpers/data-access/postgres/IDatabaseConnector";
|
|
3
|
+
import { IFilterParam } from "./IFilterParam";
|
|
3
4
|
interface IValidationResult {
|
|
4
5
|
valid: boolean;
|
|
5
6
|
error?: string;
|
|
@@ -8,7 +9,7 @@ export declare class MvtClusterService {
|
|
|
8
9
|
private connector;
|
|
9
10
|
private logger;
|
|
10
11
|
constructor(connector: IDatabaseConnector, logger: ILogger);
|
|
11
|
-
getTile(table: string, geometry: string, x: number, y: number, z: number, zoomLevel: number, attributes: string[], radius?: number, clusterPoint?: string, colorAttribute?: string): Promise<Uint8Array>;
|
|
12
|
+
getTile(table: string, geometry: string, x: number, y: number, z: number, zoomLevel: number, attributes: string[], radius?: number, clusterPoint?: string, colorAttribute?: string, filterParams?: IFilterParam[]): Promise<Uint8Array>;
|
|
12
13
|
validation(table: string, geometry: string, attributes: string[], clusterPoint?: string, colorAttribute?: string): Promise<IValidationResult>;
|
|
13
14
|
private getBaseQuery;
|
|
14
15
|
private getLevelClusterQuery;
|
|
@@ -18,6 +18,7 @@ const CoreToken_1 = require("@golemio/core/dist/helpers/ioc/CoreToken");
|
|
|
18
18
|
const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
|
|
19
19
|
const sequelize_1 = require("@golemio/core/dist/shared/sequelize");
|
|
20
20
|
const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
|
|
21
|
+
const FilterBuilder_1 = require("./FilterBuilder");
|
|
21
22
|
let MvtClusterService = exports.MvtClusterService = class MvtClusterService {
|
|
22
23
|
constructor(connector, logger) {
|
|
23
24
|
this.connector = connector;
|
|
@@ -72,7 +73,7 @@ let MvtClusterService = exports.MvtClusterService = class MvtClusterService {
|
|
|
72
73
|
FROM ${table}`;
|
|
73
74
|
};
|
|
74
75
|
}
|
|
75
|
-
async getTile(table, geometry, x, y, z, zoomLevel, attributes, radius = 15, clusterPoint, colorAttribute) {
|
|
76
|
+
async getTile(table, geometry, x, y, z, zoomLevel, attributes, radius = 15, clusterPoint, colorAttribute, filterParams) {
|
|
76
77
|
const defaultConfig = {
|
|
77
78
|
sourceLayer: "points",
|
|
78
79
|
extent: 4096,
|
|
@@ -83,6 +84,7 @@ let MvtClusterService = exports.MvtClusterService = class MvtClusterService {
|
|
|
83
84
|
getTileQuery: this.getTileQuery,
|
|
84
85
|
};
|
|
85
86
|
const allAttributes = [...attributes, ...(colorAttribute ? [colorAttribute] : []), ...(geometry ? [geometry] : [])];
|
|
87
|
+
const { query: filterQueries, bindings: filterValues } = FilterBuilder_1.FilterBuilder.prepareFilterQuery(filterParams ?? []);
|
|
86
88
|
const query = (0, clusterbuster_1.createQueryForTile)({
|
|
87
89
|
...defaultConfig,
|
|
88
90
|
z,
|
|
@@ -93,12 +95,14 @@ let MvtClusterService = exports.MvtClusterService = class MvtClusterService {
|
|
|
93
95
|
geometry: geometry,
|
|
94
96
|
radius,
|
|
95
97
|
attributes: allAttributes,
|
|
98
|
+
query: filterQueries,
|
|
96
99
|
getLevelClusterQuery: this.getLevelClusterQuery,
|
|
97
100
|
getLevelGroupQuery: this.getLevelGroupQuery,
|
|
98
101
|
});
|
|
99
102
|
try {
|
|
100
103
|
const result = await this.connector.getConnection().query(query, {
|
|
101
104
|
type: sequelize_1.QueryTypes.SELECT,
|
|
105
|
+
bind: filterValues,
|
|
102
106
|
});
|
|
103
107
|
return result[0].mvt;
|
|
104
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MvtClusterService.js","sourceRoot":"","sources":["../../../src/output-gateway/services/MvtClusterService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,0DASgC;AAGhC,wEAAqE;AACrE,6EAAwE;AACxE,mEAAiE;AACjE,iEAAwE;
|
|
1
|
+
{"version":3,"file":"MvtClusterService.js","sourceRoot":"","sources":["../../../src/output-gateway/services/MvtClusterService.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,3 +33,10 @@ Hlavní funkcionality:
|
|
|
33
33
|
- zdrojové tabulky
|
|
34
34
|
- Libovolná tabulka obsahující prostorová data ve formátu podporovaném PostGIS. Například: `vehiclesharing.vehicle_status`, `parkings.parkings`
|
|
35
35
|
- Obsah odpovědi je ve formátu application/x-protobuf (binární MVT).
|
|
36
|
+
|
|
37
|
+
#### filtrování
|
|
38
|
+
|
|
39
|
+
- Filtrování je možné provést pomocí parametru `filter`. Pravidla pro převod do sql jsou v souboru [`src/output-gateway/services/FilterBuilder.ts`](../src/output-gateway/services/FilterBuilder.ts).
|
|
40
|
+
- Syntaxe: `filter.<field_name>.<operator>=<value>`, kde `field_name` je název sloupce v tabulce, `operator` je operátor filtrace a `value` je filtrovaná hodnota.
|
|
41
|
+
- Příklad url: `http://localhost:3004/v2/mvt/10/10/10?filter[status][eq]=active`
|
|
42
|
+
- Implementované operátory: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`
|
package/docs/openapi-output.yaml
CHANGED
|
@@ -105,6 +105,21 @@ paths:
|
|
|
105
105
|
schema:
|
|
106
106
|
type: string
|
|
107
107
|
example: color
|
|
108
|
+
- name: filter
|
|
109
|
+
in: query
|
|
110
|
+
style: deepObject
|
|
111
|
+
explode: true
|
|
112
|
+
description: object for filter parameters
|
|
113
|
+
required: false
|
|
114
|
+
schema:
|
|
115
|
+
type: object
|
|
116
|
+
description: attribute name
|
|
117
|
+
additionalProperties:
|
|
118
|
+
type: object
|
|
119
|
+
description: operator
|
|
120
|
+
additionalProperties:
|
|
121
|
+
description: value
|
|
122
|
+
type: string
|
|
108
123
|
responses:
|
|
109
124
|
200:
|
|
110
125
|
description: OK
|