@golemio/mvt-maps 0.0.3-dev.1886957851 β 0.0.3-dev.1898247231
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 +1 -0
- package/dist/output-gateway/controllers/V2MvtController.js +10 -0
- package/dist/output-gateway/controllers/V2MvtController.js.map +1 -1
- package/dist/output-gateway/routers/V2MvtRouter.js +8 -0
- package/dist/output-gateway/routers/V2MvtRouter.js.map +1 -1
- package/dist/output-gateway/services/MvtClusterService.d.ts +6 -0
- package/dist/output-gateway/services/MvtClusterService.js +40 -4
- package/dist/output-gateway/services/MvtClusterService.js.map +1 -1
- package/docs/openapi-output.yaml +69 -0
- package/package.json +1 -1
|
@@ -4,5 +4,6 @@ export declare class V2MvtController {
|
|
|
4
4
|
private service;
|
|
5
5
|
constructor(service: MvtClusterService);
|
|
6
6
|
getAll: (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
7
|
+
validate: (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
7
8
|
private parseParams;
|
|
8
9
|
}
|
|
@@ -31,6 +31,16 @@ let V2MvtController = exports.V2MvtController = class V2MvtController {
|
|
|
31
31
|
next(err);
|
|
32
32
|
}
|
|
33
33
|
};
|
|
34
|
+
this.validate = async (req, res, next) => {
|
|
35
|
+
try {
|
|
36
|
+
const params = this.parseParams(req);
|
|
37
|
+
const result = await this.service.validation(params.table, params.geometry, params.attributes, params.clusterPoint, params.colorAttribute);
|
|
38
|
+
res.status(200).send(result);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
next(err);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
34
44
|
}
|
|
35
45
|
parseParams(req) {
|
|
36
46
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"V2MvtController.js","sourceRoot":"","sources":["../../../src/output-gateway/controllers/V2MvtController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,6EAAwE;AACxE,iEAAwE;AAExE,sEAAoE;AACpE,qEAAmE;AAG5D,IAAM,eAAe,6BAArB,MAAM,eAAe;IACxB,YAA4D,OAAkC;QAA1B,YAAO,GAAP,OAAO,CAAmB;QAEvF,WAAM,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;YACtE,IAAI;gBACA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACrC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CACrC,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,CAAC,EACR,MAAM,CAAC,CAAC,EACR,MAAM,CAAC,CAAC,EACR,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,cAAc,CACxB,CAAC;gBAEF,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,oCAAoC,CAAC,CAAC;gBACpE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAChC;YAAC,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC,GAAG,CAAC,CAAC;aACb;QACL,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"V2MvtController.js","sourceRoot":"","sources":["../../../src/output-gateway/controllers/V2MvtController.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,14 @@ class V2MvtRouter extends AbstractRouter_1.AbstractRouter {
|
|
|
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
31
|
], Validation_1.checkErrors, this.cacheHeaderMiddleware.getMiddleware(5 * 60, 60), this.controller.getAll);
|
|
32
|
+
this.router.get("/validation", [
|
|
33
|
+
(0, express_validator_1.query)("table").exists().isString().not().isArray(),
|
|
34
|
+
(0, express_validator_1.query)("geometry").exists().isString().not().isArray(),
|
|
35
|
+
(0, express_validator_1.query)("attributes").exists(),
|
|
36
|
+
(0, express_validator_1.query)("attributes.*").exists().isString().not().isArray(),
|
|
37
|
+
(0, express_validator_1.query)("clusterPoint").optional().isString().not().isArray(),
|
|
38
|
+
(0, express_validator_1.query)("colorAttribute").optional().isString().not().isArray(),
|
|
39
|
+
], Validation_1.checkErrors, this.cacheHeaderMiddleware.getMiddleware(5 * 60, 60), this.controller.validate);
|
|
32
40
|
}
|
|
33
41
|
}
|
|
34
42
|
const v2MvtRouter = new V2MvtRouter();
|
|
@@ -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;SAChE,EACD,wBAAW,EACX,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EACpD,IAAI,CAAC,UAAU,CAAC,MAAM,CACzB,CAAC;IACN,CAAC;CACJ;AAED,MAAM,WAAW,GAAmB,IAAI,WAAW,EAAE,CAAC;AAE7C,kCAAW"}
|
|
1
|
+
{"version":3,"file":"V2MvtRouter.js","sourceRoot":"","sources":["../../../src/output-gateway/routers/V2MvtRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import { ILogger } from "@golemio/core/dist/helpers";
|
|
2
2
|
import { IDatabaseConnector } from "@golemio/core/dist/helpers/data-access/postgres/IDatabaseConnector";
|
|
3
|
+
interface IValidationResult {
|
|
4
|
+
valid: boolean;
|
|
5
|
+
error?: string;
|
|
6
|
+
}
|
|
3
7
|
export declare class MvtClusterService {
|
|
4
8
|
private connector;
|
|
5
9
|
private logger;
|
|
6
10
|
constructor(connector: IDatabaseConnector, logger: ILogger);
|
|
7
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
|
+
validation(table: string, geometry: string, attributes: string[], clusterPoint?: string, colorAttribute?: string): Promise<IValidationResult>;
|
|
8
13
|
private getBaseQuery;
|
|
9
14
|
private getLevelClusterQuery;
|
|
10
15
|
private getLevelGroupQuery;
|
|
11
16
|
private getTileQuery;
|
|
12
17
|
}
|
|
18
|
+
export {};
|
|
@@ -49,8 +49,8 @@ let MvtClusterService = exports.MvtClusterService = class MvtClusterService {
|
|
|
49
49
|
SUM(size) as size,
|
|
50
50
|
clusters AS clusterNo,
|
|
51
51
|
(
|
|
52
|
-
CASE COUNT(previousClusterNo)
|
|
53
|
-
WHEN 1 THEN FIRST(expansionZoom)
|
|
52
|
+
CASE COUNT(previousClusterNo)
|
|
53
|
+
WHEN 1 THEN FIRST(expansionZoom)
|
|
54
54
|
ELSE ${zoomLevel + 1} END
|
|
55
55
|
) AS expansionZoom, ${attributes}
|
|
56
56
|
ST_Centroid(ST_Collect(center)) as center,
|
|
@@ -60,8 +60,8 @@ let MvtClusterService = exports.MvtClusterService = class MvtClusterService {
|
|
|
60
60
|
};
|
|
61
61
|
this.getTileQuery = ({ x, y, z, table, geometry, extent, bufferSize, attributes }) => {
|
|
62
62
|
return `SELECT
|
|
63
|
-
case size
|
|
64
|
-
WHEN 1 THEN
|
|
63
|
+
case size
|
|
64
|
+
WHEN 1 THEN
|
|
65
65
|
ST_AsMVTGeom(ST_Transform(zoomGeom, 3857), TileBBox(${z}, ${x}, ${y}, 3857), ${extent}, ${bufferSize}, false)
|
|
66
66
|
ELSE ST_AsMVTGeom(ST_Transform(${geometry}, 3857), TileBBox(${z}, ${x}, ${y}, 3857), ${extent}, ${bufferSize}, false)
|
|
67
67
|
end AS geom,
|
|
@@ -107,6 +107,42 @@ let MvtClusterService = exports.MvtClusterService = class MvtClusterService {
|
|
|
107
107
|
throw new golemio_errors_1.GeneralError("Error while getting tile", this.constructor.name, error);
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
|
+
async validation(table, geometry, attributes, clusterPoint, colorAttribute) {
|
|
111
|
+
try {
|
|
112
|
+
const [schemaName, tableName] = table.split(".");
|
|
113
|
+
const allColumns = [
|
|
114
|
+
geometry,
|
|
115
|
+
...attributes,
|
|
116
|
+
...(clusterPoint ? [clusterPoint] : []),
|
|
117
|
+
...(colorAttribute ? [colorAttribute] : []),
|
|
118
|
+
];
|
|
119
|
+
const tableRows = await this.connector
|
|
120
|
+
.getConnection()
|
|
121
|
+
.query(`SELECT 1 FROM information_schema.tables WHERE table_schema = $1 AND table_name = $2`, {
|
|
122
|
+
bind: [schemaName, tableName],
|
|
123
|
+
type: sequelize_1.QueryTypes.SELECT,
|
|
124
|
+
});
|
|
125
|
+
const columnRows = await this.connector
|
|
126
|
+
.getConnection()
|
|
127
|
+
.query(`SELECT column_name FROM information_schema.columns WHERE table_schema = $1 AND table_name = $2`, {
|
|
128
|
+
bind: [schemaName, tableName],
|
|
129
|
+
type: sequelize_1.QueryTypes.SELECT,
|
|
130
|
+
});
|
|
131
|
+
if (!tableRows.length) {
|
|
132
|
+
return { valid: false, error: `Table ${table} does not exist` };
|
|
133
|
+
}
|
|
134
|
+
const actualCols = columnRows.map((col) => col.column_name);
|
|
135
|
+
const missing = allColumns.filter((col) => !actualCols.includes(col));
|
|
136
|
+
if (missing.length) {
|
|
137
|
+
return { valid: false, error: `Missing columns: ${missing.join(", ")}` };
|
|
138
|
+
}
|
|
139
|
+
return { valid: true };
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
this.logger.error(error, `Error executing validation: ${error.message}`);
|
|
143
|
+
return { valid: false, error: "Error executing validation" };
|
|
144
|
+
}
|
|
145
|
+
}
|
|
110
146
|
};
|
|
111
147
|
exports.MvtClusterService = MvtClusterService = __decorate([
|
|
112
148
|
(0, tsyringe_1.injectable)(),
|
|
@@ -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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"}
|
package/docs/openapi-output.yaml
CHANGED
|
@@ -126,6 +126,75 @@ paths:
|
|
|
126
126
|
format: binary
|
|
127
127
|
401:
|
|
128
128
|
$ref: "#/components/responses/UnauthorizedError"
|
|
129
|
+
/v2/mvt/validation:
|
|
130
|
+
get:
|
|
131
|
+
tags:
|
|
132
|
+
- πΊοΈ MVT Maps (v2)
|
|
133
|
+
summary: Validate attributes of MVT request
|
|
134
|
+
description: |
|
|
135
|
+
Ensure the provided data conforms to the database schema requirements.
|
|
136
|
+
parameters:
|
|
137
|
+
- name: table
|
|
138
|
+
in: query
|
|
139
|
+
description: Fully qualified table name (e.g. `schema.table`) to fetch data from.
|
|
140
|
+
required: true
|
|
141
|
+
schema:
|
|
142
|
+
type: string
|
|
143
|
+
example: test.vehicle_status
|
|
144
|
+
- name: geometry
|
|
145
|
+
in: query
|
|
146
|
+
description: Name of the geometry column in the table.
|
|
147
|
+
required: true
|
|
148
|
+
schema:
|
|
149
|
+
type: string
|
|
150
|
+
example: location
|
|
151
|
+
- name: attributes
|
|
152
|
+
in: query
|
|
153
|
+
description: List of attribute columns to include in the tile features.
|
|
154
|
+
required: true
|
|
155
|
+
schema:
|
|
156
|
+
type: array
|
|
157
|
+
items:
|
|
158
|
+
type: string
|
|
159
|
+
example: [ "id", "system_id", "description" ]
|
|
160
|
+
- name: clusterPoint
|
|
161
|
+
in: query
|
|
162
|
+
description: Name of the column that will be used for clustering, use only if it differs from geometry. (e.g. calculating clustering for polygons can take longer and result in bigger clusters.)
|
|
163
|
+
required: false
|
|
164
|
+
schema:
|
|
165
|
+
type: string
|
|
166
|
+
example: point
|
|
167
|
+
- name: colorAttribute
|
|
168
|
+
in: query
|
|
169
|
+
description: Name of the column to use for coloring features
|
|
170
|
+
required: false
|
|
171
|
+
schema:
|
|
172
|
+
type: string
|
|
173
|
+
example: color
|
|
174
|
+
responses:
|
|
175
|
+
200:
|
|
176
|
+
description: OK
|
|
177
|
+
headers:
|
|
178
|
+
Cache-Control:
|
|
179
|
+
description: Cache control directive for caching proxies.
|
|
180
|
+
schema:
|
|
181
|
+
type: string
|
|
182
|
+
example: public, s-maxage=300, stale-while-revalidate=5
|
|
183
|
+
content:
|
|
184
|
+
application/json; charset=utf-8:
|
|
185
|
+
schema:
|
|
186
|
+
type: object
|
|
187
|
+
properties:
|
|
188
|
+
valid:
|
|
189
|
+
type: boolean
|
|
190
|
+
example: false
|
|
191
|
+
error:
|
|
192
|
+
type: string
|
|
193
|
+
example: Table schema.table does not exist
|
|
194
|
+
required:
|
|
195
|
+
- valid
|
|
196
|
+
401:
|
|
197
|
+
$ref: "#/components/responses/UnauthorizedError"
|
|
129
198
|
|
|
130
199
|
components:
|
|
131
200
|
headers:
|