ogcopenapis 0.0.11 → 1.0.0

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.
Files changed (60) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +310 -72
  3. package/lib/OgcOpenApiCrsTools.d.ts +10 -9
  4. package/lib/OgcOpenApiCrsTools.d.ts.map +1 -0
  5. package/lib/OgcOpenApiCrsTools.js +40 -39
  6. package/lib/OgcOpenApiCrsTools.js.map +1 -0
  7. package/lib/OgcOpenApiFeatureStore.d.ts +94 -93
  8. package/lib/OgcOpenApiFeatureStore.d.ts.map +1 -0
  9. package/lib/OgcOpenApiFeatureStore.js +200 -240
  10. package/lib/OgcOpenApiFeatureStore.js.map +1 -0
  11. package/lib/OgcOpenApiFetchTools.d.ts +37 -29
  12. package/lib/OgcOpenApiFetchTools.d.ts.map +1 -0
  13. package/lib/OgcOpenApiFetchTools.js +68 -48
  14. package/lib/OgcOpenApiFetchTools.js.map +1 -0
  15. package/lib/OgcOpenApiGetCapabilities.d.ts +209 -112
  16. package/lib/OgcOpenApiGetCapabilities.d.ts.map +1 -0
  17. package/lib/OgcOpenApiGetCapabilities.js +424 -277
  18. package/lib/OgcOpenApiGetCapabilities.js.map +1 -0
  19. package/lib/OgcOpenApiMapsModel.d.ts +41 -36
  20. package/lib/OgcOpenApiMapsModel.d.ts.map +1 -0
  21. package/lib/OgcOpenApiMapsModel.js +88 -75
  22. package/lib/OgcOpenApiMapsModel.js.map +1 -0
  23. package/lib/OgcOpenApiMvtTools.d.ts +12 -0
  24. package/lib/OgcOpenApiMvtTools.d.ts.map +1 -0
  25. package/lib/OgcOpenApiMvtTools.js +100 -0
  26. package/lib/OgcOpenApiMvtTools.js.map +1 -0
  27. package/lib/OgcOpenApiStyleTools.d.ts +51 -0
  28. package/lib/OgcOpenApiStyleTools.d.ts.map +1 -0
  29. package/lib/OgcOpenApiStyleTools.js +155 -0
  30. package/lib/OgcOpenApiStyleTools.js.map +1 -0
  31. package/lib/OgcOpenApiTileMatrixTools.d.ts +41 -0
  32. package/lib/OgcOpenApiTileMatrixTools.d.ts.map +1 -0
  33. package/lib/OgcOpenApiTileMatrixTools.js +88 -0
  34. package/lib/OgcOpenApiTileMatrixTools.js.map +1 -0
  35. package/lib/OgcOpenApiTilesModel.d.ts +56 -31
  36. package/lib/OgcOpenApiTilesModel.d.ts.map +1 -0
  37. package/lib/OgcOpenApiTilesModel.js +167 -128
  38. package/lib/OgcOpenApiTilesModel.js.map +1 -0
  39. package/lib/OgcOpenApiVectorTilesModel.d.ts +39 -0
  40. package/lib/OgcOpenApiVectorTilesModel.d.ts.map +1 -0
  41. package/lib/OgcOpenApiVectorTilesModel.js +122 -0
  42. package/lib/OgcOpenApiVectorTilesModel.js.map +1 -0
  43. package/lib/OgcOpenApiWmtsTools.d.ts +30 -0
  44. package/lib/OgcOpenApiWmtsTools.d.ts.map +1 -0
  45. package/lib/OgcOpenApiWmtsTools.js +89 -0
  46. package/lib/OgcOpenApiWmtsTools.js.map +1 -0
  47. package/package.json +68 -39
  48. package/src/OgcOpenApiCrsTools.ts +40 -0
  49. package/src/OgcOpenApiFeatureStore.ts +296 -0
  50. package/src/OgcOpenApiFetchTools.ts +84 -0
  51. package/src/OgcOpenApiGetCapabilities.ts +641 -0
  52. package/src/OgcOpenApiMapsModel.ts +128 -0
  53. package/src/OgcOpenApiMvtTools.ts +104 -0
  54. package/src/OgcOpenApiStyleTools.ts +187 -0
  55. package/src/OgcOpenApiTileMatrixTools.ts +111 -0
  56. package/src/OgcOpenApiTilesModel.ts +214 -0
  57. package/src/OgcOpenApiVectorTilesModel.ts +141 -0
  58. package/src/OgcOpenApiWmtsTools.ts +114 -0
  59. package/lib/OgcOpenApiGetCollectionTiles.d.ts +0 -7
  60. package/lib/OgcOpenApiGetCollectionTiles.js +0 -7
@@ -1,128 +1,167 @@
1
- import { UrlTileSetModel } from "@luciad/ria/model/tileset/UrlTileSetModel";
2
- import { getReference } from "@luciad/ria/reference/ReferenceProvider";
3
- import { createBounds } from "@luciad/ria/shape/ShapeFactory";
4
- import { OgcOpenApiCrsTools } from "./OgcOpenApiCrsTools";
5
- export class OgcOpenApiTilesModel extends UrlTileSetModel {
6
- constructor(options) {
7
- const crsName = OgcOpenApiCrsTools.getReferenceName(options.tileMatrix.crs);
8
- const reference = getReference(crsName);
9
- const levelCount = options.tileMatrix.tileMatrices.filter((t) => Number(t.id) > -1).length;
10
- let invertY = true;
11
- let axisX = 0;
12
- let axisY = 1;
13
- const orderedAxes0 = options.tileMatrix.orderedAxes[0].toUpperCase();
14
- if (orderedAxes0 === "LAT" || orderedAxes0 === "N" || orderedAxes0 === "S") {
15
- axisX = 1;
16
- axisY = 0;
17
- }
18
- //const tm0 = options.tileMatrix.tileMatrices.find(t=>Number(t.id)===0);
19
- const tm0 = options.tileMatrix.tileMatrices[0];
20
- const calculated = {
21
- tileWidth: 256,
22
- tileHeight: 256,
23
- };
24
- let bounds;
25
- if (options.tileMatrix.boundingBox && options.tileMatrix.boundingBox.lowerLeft && options.tileMatrix.boundingBox.upperRight) {
26
- bounds = createBounds(reference, [
27
- options.tileMatrix.boundingBox.lowerLeft[1], options.tileMatrix.boundingBox.upperRight[1] - options.tileMatrix.boundingBox.lowerLeft[1],
28
- options.tileMatrix.boundingBox.lowerLeft[0], options.tileMatrix.boundingBox.upperRight[0] - options.tileMatrix.boundingBox.lowerLeft[0],
29
- ]);
30
- }
31
- let level0Columns = 1;
32
- let level0Rows = 1;
33
- let tileHeight = 256;
34
- let tileWidth = 256;
35
- if (tm0) {
36
- const cornerOfOrigin = tm0.cornerOfOrigin ? tm0.cornerOfOrigin : "TOPLEFT";
37
- calculated.tileWidth = tm0.tileWidth;
38
- calculated.tileHeight = tm0.tileHeight;
39
- level0Rows = tm0.matrixHeight;
40
- level0Columns = tm0.matrixWidth;
41
- tileHeight = tm0.tileHeight;
42
- tileWidth = tm0.tileHeight;
43
- bounds = bounds ? bounds : reference.bounds;
44
- if (cornerOfOrigin.toUpperCase() === "TOPLEFT") {
45
- invertY = true;
46
- // bounds = bounds ? bounds : createBounds(reference, [tm0.pointOfOrigin[axisX],tm0.matrixWidth, tm0.pointOfOrigin[axisY]-tm0.matrixHeight, tm0.matrixHeight])
47
- }
48
- else {
49
- invertY = false;
50
- //bounds = bounds ? bounds : createBounds(reference, [tm0.pointOfOrigin[axisX],tm0.matrixWidth, tm0.pointOfOrigin[axisY], tm0.matrixHeight])
51
- }
52
- }
53
- const o = {
54
- baseURL: options.baseURL,
55
- reference: reference,
56
- bounds: bounds,
57
- tileHeight,
58
- tileWidth,
59
- levelCount: levelCount,
60
- level0Columns,
61
- level0Rows,
62
- dataType: options.dataType,
63
- samplingMode: options.samplingMode,
64
- credentials: options.credentials,
65
- requestHeaders: options.requestHeaders ? options.requestHeaders : {},
66
- };
67
- super(o);
68
- this.plevel0Rows = level0Rows;
69
- this.transparent = typeof options.transparent !== "undefined" ? options.transparent : true;
70
- this.bgcolor = options.bgcolor;
71
- this.invertY = invertY;
72
- this.tileMatrix = options.tileMatrix;
73
- this.proxy = options.proxify;
74
- this.modelDescriptor = {
75
- source: options.baseURL,
76
- name: options.collection,
77
- description: "OGC Open API Tiles",
78
- type: super.dataType
79
- };
80
- }
81
- getTileURL(baseURL, tile) {
82
- const tileCorrected = Object.assign({}, tile);
83
- // return this.debugAsImage(tileCorrected)
84
- const maxY = this.plevel0Rows * Math.pow(2, tile.level) - 1;
85
- tileCorrected.y = this.invertY ? maxY - tile.y : tile.y;
86
- const zoomLevel = this.tileMatrix.tileMatrices.find(t => Number(t.id) === tile.level);
87
- const level = zoomLevel ? zoomLevel.id : tile.level.toString();
88
- const urlParameters = {
89
- transparent: this.transparent,
90
- bgcolor: this.transparent ? undefined : this.bgcolor
91
- };
92
- const query = OgcOpenApiTilesModel.createURLParameters(urlParameters);
93
- const targetUrl = baseURL.replace("{tileMatrix}", level).replace("{tileRow}", tileCorrected.y.toString()).replace("{tileCol}", tileCorrected.x.toString());
94
- let tileUrl = targetUrl + (query && query !== "") ? targetUrl + "?" + query : targetUrl;
95
- if (typeof this.proxy === "function") {
96
- const proxyfied = this.proxy(tileUrl, {});
97
- tileUrl = proxyfied.url;
98
- }
99
- return tileUrl;
100
- }
101
- debugAsImage(tileCorrected) {
102
- const canvas = document.createElement('canvas');
103
- if (canvas) {
104
- canvas.width = this.getTileWidth(tileCorrected.level);
105
- canvas.height = this.getTileHeight(tileCorrected.level);
106
- const ctx = canvas.getContext("2d");
107
- if (ctx) {
108
- ctx.font = "30px Arial";
109
- ctx.fillText(`x:${tileCorrected.x}, y:${tileCorrected.y}, z:${tileCorrected.level}`, 10, canvas.height / 2);
110
- }
111
- const dataURL = canvas.toDataURL();
112
- return dataURL;
113
- }
114
- return null;
115
- }
116
- static createURLParameters(obj) {
117
- let str = Object.keys(obj).filter(k => obj[k] !== undefined).map(function (key) {
118
- if (Array.isArray(obj[key])) {
119
- return key + '=' + obj[key].join(",");
120
- }
121
- if (typeof obj[key] == "boolean") {
122
- return key + '=' + (obj[key] ? "true" : "false");
123
- }
124
- return key + '=' + obj[key];
125
- }).join('&');
126
- return str;
127
- }
128
- }
1
+ import { WMTSTileSetModel } from "@luciad/ria/model/tileset/WMTSTileSetModel.js";
2
+ import { WMTSRequestEncoding } from "@luciad/ria/model/tileset/WMTSRequestEncoding.js";
3
+ import { RasterDataType } from "@luciad/ria/model/tileset/RasterDataType.js";
4
+ import { RasterSamplingMode } from "@luciad/ria/model/tileset/RasterSamplingMode.js";
5
+ import { OgcOpenApiTileMatrixTools } from "./OgcOpenApiTileMatrixTools.js";
6
+ import { OgcOpenApiWmtsTools } from "./OgcOpenApiWmtsTools.js";
7
+ export class OgcOpenApiTilesModel extends WMTSTileSetModel {
8
+ /**
9
+ * Creates the model with LuciadRIA's WMTS support, which handles tile matrix sets that are quad-trees and
10
+ * tile matrix sets that are not, such as GlobalCRS84Scale.
11
+ */
12
+ static async createFromTileSet(options) {
13
+ const tileSet = options.tileMatrix;
14
+ // WMTS 1.0 has no other corner of origin than the top left
15
+ if (tileSet.tileMatrices.some(m => typeof m.cornerOfOrigin === "string" && m.cornerOfOrigin.toUpperCase() === "BOTTOMLEFT")) {
16
+ return new OgcOpenApiTilesModel(options);
17
+ }
18
+ const format = options.format ? options.format : "image/png";
19
+ const capabilities = await OgcOpenApiWmtsTools.createCapabilities({
20
+ layer: options.collection, tileMatrix: tileSet, template: options.baseURL, format,
21
+ tileMatrixSetLimits: options.tileMatrixSetLimits, extent: options.extent,
22
+ });
23
+ const wmts = WMTSTileSetModel.createFromCapabilities(capabilities, { layer: options.collection }, { format });
24
+ return new OgcOpenApiTilesModel(options, OgcOpenApiTilesModel.getTileStructure(wmts, tileSet));
25
+ }
26
+ /**
27
+ * @deprecated Supports quad-tree tile matrix sets only, use createFromTileSet
28
+ */
29
+ constructor(options, wmtsStructure) {
30
+ const tileGrid = wmtsStructure ? null : OgcOpenApiTileMatrixTools.createTileGrid(options.tileMatrix);
31
+ const tileMatrices = wmtsStructure ? wmtsStructure.tileMatrices :
32
+ tileGrid.tileMatrices.map(m => ({ id: m.id, matrixHeight: m.matrixHeight }));
33
+ const structure = wmtsStructure ? wmtsStructure.structure : {
34
+ reference: tileGrid.reference,
35
+ bounds: tileGrid.bounds,
36
+ levelCount: tileGrid.levelCount,
37
+ level0Columns: tileGrid.level0Columns,
38
+ level0Rows: tileGrid.level0Rows,
39
+ tileWidth: tileGrid.tileWidth,
40
+ tileHeight: tileGrid.tileHeight,
41
+ };
42
+ const template = OgcOpenApiWmtsTools.toWmtsTemplate(options.baseURL);
43
+ const o = {
44
+ baseURL: template,
45
+ url: template,
46
+ layer: options.collection,
47
+ tileMatrixSet: options.tileMatrix.id,
48
+ tileMatrices: tileMatrices.map(m => m.id),
49
+ format: options.format ? options.format : "image/png",
50
+ requestEncoding: WMTSRequestEncoding.REST,
51
+ structure,
52
+ // Tiles can be missing inside the limits, do not stop refining at them
53
+ isSparseTileSet: !!options.tileMatrixSetLimits,
54
+ dataType: options.dataType,
55
+ samplingMode: options.samplingMode,
56
+ credentials: options.credentials,
57
+ requestHeaders: options.requestHeaders ? options.requestHeaders : {},
58
+ };
59
+ super(o);
60
+ this.tileGrid = tileGrid;
61
+ this.ogcTemplate = options.baseURL;
62
+ this.ogcTileMatrices = tileMatrices;
63
+ this.tileMatrixSetLimits = options.tileMatrixSetLimits;
64
+ this.transparent = typeof options.transparent !== "undefined" ? options.transparent : true;
65
+ this.bgcolor = options.bgcolor;
66
+ this.proxy = options.proxify;
67
+ this.modelDescriptor = {
68
+ source: options.baseURL,
69
+ name: options.collection,
70
+ description: "OGC Open API Tiles",
71
+ type: this.dataType
72
+ };
73
+ }
74
+ getTileURL(baseURL, tile) {
75
+ // return this.debugAsImage(tile)
76
+ if (!this.hasData(tile))
77
+ return null;
78
+ const targetUrl = this.tileGrid ?
79
+ OgcOpenApiTileMatrixTools.resolveTileTemplate(this.ogcTemplate, this.tileGrid, tile) :
80
+ super.getTileURL(baseURL, tile);
81
+ if (targetUrl === null)
82
+ return null;
83
+ let tileUrl = OgcOpenApiTileMatrixTools.appendQueryParameters(targetUrl, {
84
+ transparent: this.transparent,
85
+ bgcolor: this.transparent ? undefined : this.bgcolor
86
+ });
87
+ if (typeof this.proxy === "function") {
88
+ const proxyfied = this.proxy(tileUrl, {});
89
+ tileUrl = proxyfied.url;
90
+ }
91
+ return tileUrl;
92
+ }
93
+ // Whether the tile is inside the tileMatrixSetLimits, all tiles are when there are no limits
94
+ hasData(tile) {
95
+ if (!this.tileMatrixSetLimits)
96
+ return true;
97
+ const tileMatrix = this.ogcTileMatrices[tile.level];
98
+ if (!tileMatrix)
99
+ return false;
100
+ const limits = this.tileMatrixSetLimits.find(l => l.tileMatrix === tileMatrix.id);
101
+ const tileRow = tileMatrix.matrixHeight - 1 - tile.y;
102
+ return !!limits &&
103
+ tileRow >= limits.minTileRow && tileRow <= limits.maxTileRow &&
104
+ tile.x >= limits.minTileCol && tile.x <= limits.maxTileCol;
105
+ }
106
+ // Reads the levels of the model that LuciadRIA's WMTS support created, as a quad-tree structure when they are one
107
+ static getTileStructure(wmts, tileSet) {
108
+ const levels = [];
109
+ for (let level = 0; level < wmts.levelCount; level++) {
110
+ levels.push({
111
+ bounds: wmts.getBounds(level),
112
+ tileColumnCount: wmts.getTileColumnCount(level),
113
+ tileRowCount: wmts.getTileRowCount(level),
114
+ tileWidth: wmts.getTileWidth(level),
115
+ tileHeight: wmts.getTileHeight(level),
116
+ });
117
+ }
118
+ // The OGC tile matrix of each level, in order and with the same number of columns and rows
119
+ const tileMatrices = [];
120
+ let next = 0;
121
+ for (const level of levels) {
122
+ while (next < tileSet.tileMatrices.length &&
123
+ (tileSet.tileMatrices[next].matrixWidth !== level.tileColumnCount || tileSet.tileMatrices[next].matrixHeight !== level.tileRowCount))
124
+ next++;
125
+ if (next >= tileSet.tileMatrices.length)
126
+ throw new Error("The tile matrices of " + tileSet.id + " do not match the WMTS levels");
127
+ tileMatrices.push({ id: tileSet.tileMatrices[next].id, matrixHeight: tileSet.tileMatrices[next].matrixHeight });
128
+ next++;
129
+ }
130
+ const first = levels[0];
131
+ const isQuadTree = levels.every((level, l) => level.tileColumnCount === first.tileColumnCount * Math.pow(2, l) &&
132
+ level.tileRowCount === first.tileRowCount * Math.pow(2, l) &&
133
+ level.tileWidth === first.tileWidth && level.tileHeight === first.tileHeight &&
134
+ level.bounds.equals(first.bounds));
135
+ // A quad-tree structure also works on a Canvas map, a structure per level only on a WebGL map
136
+ const structure = isQuadTree ? {
137
+ reference: wmts.reference,
138
+ bounds: first.bounds,
139
+ levelCount: levels.length,
140
+ level0Columns: first.tileColumnCount,
141
+ level0Rows: first.tileRowCount,
142
+ tileWidth: first.tileWidth,
143
+ tileHeight: first.tileHeight,
144
+ } : {
145
+ reference: wmts.reference,
146
+ bounds: first.bounds,
147
+ tileMatrix: levels,
148
+ };
149
+ return { structure, tileMatrices };
150
+ }
151
+ debugAsImage(tileCorrected) {
152
+ const canvas = document.createElement('canvas');
153
+ if (canvas) {
154
+ canvas.width = this.getTileWidth(tileCorrected.level);
155
+ canvas.height = this.getTileHeight(tileCorrected.level);
156
+ const ctx = canvas.getContext("2d");
157
+ if (ctx) {
158
+ ctx.font = "30px Arial";
159
+ ctx.fillText(`x:${tileCorrected.x}, y:${tileCorrected.y}, z:${tileCorrected.level}`, 10, canvas.height / 2);
160
+ }
161
+ const dataURL = canvas.toDataURL();
162
+ return dataURL;
163
+ }
164
+ return null;
165
+ }
166
+ }
167
+ //# sourceMappingURL=OgcOpenApiTilesModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OgcOpenApiTilesModel.js","sourceRoot":"","sources":["../src/OgcOpenApiTilesModel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { MapboxVectorTileSetModel } from "@luciad/ria/model/tileset/mapbox/MapboxVectorTileSetModel.js";
2
+ import type { TileCoordinate } from "@luciad/ria/model/tileset/TileCoordinate.js";
3
+ import { Bounds } from "@luciad/ria/shape/Bounds.js";
4
+ import type { ProxifyFunction, TileMatrixLimits, TileSetData, TileSetLayer } from "./OgcOpenApiGetCapabilities.js";
5
+ export interface OgcOpenApiVectorTilesModelOptions {
6
+ tileMatrix: TileSetData;
7
+ baseURL: string;
8
+ collection: string;
9
+ credentials?: boolean;
10
+ requestHeaders?: {
11
+ [p: string]: string;
12
+ };
13
+ tileMatrixSetLimits?: TileMatrixLimits[];
14
+ bounds?: Bounds;
15
+ styleUrl?: string;
16
+ proxify?: ProxifyFunction;
17
+ }
18
+ export declare class OgcOpenApiVectorTilesModel extends MapboxVectorTileSetModel {
19
+ private tileGrid;
20
+ private tileTemplate;
21
+ private serverOptions;
22
+ private tileMatrixSetLimits;
23
+ constructor(options: OgcOpenApiVectorTilesModelOptions);
24
+ getVectorTile(tile: TileCoordinate, signal?: AbortSignal): Promise<ArrayBuffer | null>;
25
+ /**
26
+ * The layers in the tiles, read from a few sample tiles. For tilesets whose metadata does not list their layers,
27
+ * the layer names in the tiles cannot be guessed: some servers name a layer after the collection, others not.
28
+ * extent, in CRS:84 as [minX, minY, maxX, maxY], is where the data is, such as the extent of the collection.
29
+ * Resolves the layers of the first sample tile that has any, or an empty array.
30
+ */
31
+ discoverLayers(options?: {
32
+ extent?: number[];
33
+ maxRequests?: number;
34
+ }): Promise<TileSetLayer[]>;
35
+ private getSampleTiles;
36
+ private hasData;
37
+ private static getMaxLevel;
38
+ }
39
+ //# sourceMappingURL=OgcOpenApiVectorTilesModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OgcOpenApiVectorTilesModel.d.ts","sourceRoot":"","sources":["../src/OgcOpenApiVectorTilesModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,wBAAwB,EAAC,MAAM,8DAA8D,CAAC;AACtG,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,6CAA6C,CAAC;AAChF,OAAO,EAAC,MAAM,EAAC,MAAM,6BAA6B,CAAC;AAInD,OAAO,KAAK,EAAC,eAAe,EAAE,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAC,MAAM,gCAAgC,CAAC;AAKjH,MAAM,WAAW,iCAAiC;IAC9C,UAAU,EAAE,WAAW,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAEzC,mBAAmB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAEzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,EAAE,eAAe,CAAA;CAC5B;AAED,qBAAa,0BAA2B,SAAQ,wBAAwB;IACpE,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,mBAAmB,CAAiC;gBAEhD,OAAO,EAAE,iCAAiC;IA0BtD,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAkBtF;;;;;OAKG;IACG,cAAc,CAAC,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAYxG,OAAO,CAAC,cAAc;IA6BtB,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,MAAM,CAAC,WAAW;CAM7B"}
@@ -0,0 +1,122 @@
1
+ import { MapboxVectorTileSetModel } from "@luciad/ria/model/tileset/mapbox/MapboxVectorTileSetModel.js";
2
+ import { Bounds } from "@luciad/ria/shape/Bounds.js";
3
+ import { getReference } from "@luciad/ria/reference/ReferenceProvider.js";
4
+ import { createPoint } from "@luciad/ria/shape/ShapeFactory.js";
5
+ import { createTransformation } from "@luciad/ria/transformation/TransformationFactory.js";
6
+ import { OgcOpenApiMvtTools } from "./OgcOpenApiMvtTools.js";
7
+ import { OgcOpenApiFetchTools } from "./OgcOpenApiFetchTools.js";
8
+ import { OgcOpenApiTileMatrixTools } from "./OgcOpenApiTileMatrixTools.js";
9
+ export class OgcOpenApiVectorTilesModel extends MapboxVectorTileSetModel {
10
+ constructor(options) {
11
+ const tileGrid = OgcOpenApiTileMatrixTools.createTileGrid(options.tileMatrix);
12
+ const maxLevel = OgcOpenApiVectorTilesModel.getMaxLevel(tileGrid, options.tileMatrixSetLimits);
13
+ super({
14
+ baseURL: options.baseURL,
15
+ structure: {
16
+ reference: tileGrid.reference,
17
+ bounds: tileGrid.bounds,
18
+ level0Columns: tileGrid.level0Columns,
19
+ level0Rows: tileGrid.level0Rows,
20
+ },
21
+ // LuciadRIA 2026.1.1 paints nothing when minLevel > 0, levels without data are skipped in getVectorTile
22
+ minLevel: 0,
23
+ maxLevel,
24
+ bounds: options.bounds,
25
+ name: options.collection,
26
+ styleUrl: options.styleUrl ? options.styleUrl : null,
27
+ credentials: options.credentials,
28
+ requestHeaders: options.requestHeaders ? options.requestHeaders : {},
29
+ });
30
+ this.tileGrid = tileGrid;
31
+ this.tileTemplate = options.baseURL;
32
+ this.serverOptions = OgcOpenApiFetchTools.createFetchOptions({ originalUrl: options.baseURL, proxify: options.proxify });
33
+ this.tileMatrixSetLimits = options.tileMatrixSetLimits;
34
+ }
35
+ getVectorTile(tile, signal) {
36
+ if (!this.hasData(tile))
37
+ return Promise.resolve(null);
38
+ const targetUrl = OgcOpenApiTileMatrixTools.resolveTileTemplate(this.tileTemplate, this.tileGrid, tile);
39
+ if (targetUrl === null)
40
+ return Promise.resolve(null);
41
+ const tileUrl = OgcOpenApiTileMatrixTools.appendQueryParameters(targetUrl, this.requestParameters ? this.requestParameters : {});
42
+ return OgcOpenApiFetchTools.fetch(tileUrl, {
43
+ method: "GET",
44
+ credentials: this.credentials ? "same-origin" : "omit",
45
+ headers: this.requestHeaders ? this.requestHeaders : {},
46
+ signal
47
+ }, this.serverOptions).then(response => {
48
+ // Servers answer a tile without data with 204, 404 or an empty 200
49
+ if (response.status === 204 || response.status === 404)
50
+ return null;
51
+ if (response.status !== 200)
52
+ throw new Error("Invalid response: " + response.status + " for " + tileUrl);
53
+ return response.arrayBuffer().then(content => content.byteLength > 0 ? content : null);
54
+ });
55
+ }
56
+ /**
57
+ * The layers in the tiles, read from a few sample tiles. For tilesets whose metadata does not list their layers,
58
+ * the layer names in the tiles cannot be guessed: some servers name a layer after the collection, others not.
59
+ * extent, in CRS:84 as [minX, minY, maxX, maxY], is where the data is, such as the extent of the collection.
60
+ * Resolves the layers of the first sample tile that has any, or an empty array.
61
+ */
62
+ async discoverLayers(options = {}) {
63
+ const maxRequests = typeof options.maxRequests === "number" ? options.maxRequests : 6;
64
+ for (const tile of this.getSampleTiles(options.extent).slice(0, maxRequests)) {
65
+ const content = await this.getVectorTile(tile).catch(() => null);
66
+ if (!content)
67
+ continue;
68
+ const layers = await OgcOpenApiMvtTools.getLayers(content).catch(() => []);
69
+ if (layers.length > 0)
70
+ return layers;
71
+ }
72
+ return [];
73
+ }
74
+ // Tiles likely to have data: the middle tile of the limits per level, or the tile at the center of the extent
75
+ getSampleTiles(extent) {
76
+ if (this.tileMatrixSetLimits) {
77
+ return this.tileMatrixSetLimits
78
+ .map(l => OgcOpenApiTileMatrixTools.getLuciadTile(this.tileGrid, l.tileMatrix, Math.floor((l.minTileRow + l.maxTileRow) / 2), Math.floor((l.minTileCol + l.maxTileCol) / 2)))
79
+ .filter(tile => tile !== null)
80
+ .sort((a, b) => a.level - b.level);
81
+ }
82
+ if (!extent || extent.length < 4) {
83
+ const tiles = [];
84
+ for (let x = 0; x < this.tileGrid.level0Columns; x++) {
85
+ for (let y = 0; y < this.tileGrid.level0Rows; y++)
86
+ tiles.push({ level: 0, x, y });
87
+ }
88
+ return tiles;
89
+ }
90
+ const crs84 = getReference("CRS:84");
91
+ const center = createTransformation(crs84, this.tileGrid.reference)
92
+ .transform(createPoint(crs84, [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2]));
93
+ const bounds = this.tileGrid.bounds;
94
+ return [0, 2, 4, 6, 8, 10, 12].filter(level => level < this.tileGrid.levelCount).map(level => {
95
+ const columns = this.tileGrid.level0Columns * Math.pow(2, level);
96
+ const rows = this.tileGrid.level0Rows * Math.pow(2, level);
97
+ const x = Math.floor((center.x - bounds.x) / (bounds.width / columns));
98
+ const y = Math.floor((center.y - bounds.y) / (bounds.height / rows));
99
+ return { level, x: Math.min(Math.max(x, 0), columns - 1), y: Math.min(Math.max(y, 0), rows - 1) };
100
+ });
101
+ }
102
+ // Whether the tile is inside the tileMatrixSetLimits, all tiles are when there are no limits
103
+ hasData(tile) {
104
+ if (!this.tileMatrixSetLimits)
105
+ return true;
106
+ const ogcTile = OgcOpenApiTileMatrixTools.getOgcTile(this.tileGrid, tile);
107
+ if (ogcTile === null)
108
+ return false;
109
+ const limits = this.tileMatrixSetLimits.find(l => l.tileMatrix === ogcTile.tileMatrix);
110
+ return !!limits &&
111
+ ogcTile.tileRow >= limits.minTileRow && ogcTile.tileRow <= limits.maxTileRow &&
112
+ ogcTile.tileCol >= limits.minTileCol && ogcTile.tileCol <= limits.maxTileCol;
113
+ }
114
+ // The deepest level in the tileMatrixSetLimits, LuciadRIA over-zooms beyond it
115
+ static getMaxLevel(tileGrid, tileMatrixSetLimits) {
116
+ const levels = tileMatrixSetLimits ?
117
+ tileMatrixSetLimits.map(l => tileGrid.tileMatrices.findIndex(m => m.id === l.tileMatrix)).filter(level => level > -1) :
118
+ [];
119
+ return levels.length === 0 ? tileGrid.levelCount - 1 : Math.max(...levels);
120
+ }
121
+ }
122
+ //# sourceMappingURL=OgcOpenApiVectorTilesModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OgcOpenApiVectorTilesModel.js","sourceRoot":"","sources":["../src/OgcOpenApiVectorTilesModel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { WMTSCapabilities } from "@luciad/ria/model/capabilities/WMTSCapabilities.js";
2
+ import type { TileMatrixLimits, TileSetData } from "./OgcOpenApiGetCapabilities.js";
3
+ /**
4
+ * Describes an OGC API tileset as a WMTS 1.0 layer, so that LuciadRIA's WMTS support reads its tile matrix set:
5
+ * quad-trees and tile matrix sets that are not quad-trees, with their tile matrix limits.
6
+ */
7
+ export interface OgcOpenApiWmtsLayer {
8
+ layer: string;
9
+ tileMatrix: TileSetData;
10
+ template: string;
11
+ format: string;
12
+ tileMatrixSetLimits?: TileMatrixLimits[];
13
+ extent?: number[];
14
+ }
15
+ declare class OgcOpenApiWmtsTools {
16
+ /**
17
+ * WMTS uses {TileMatrix}, {TileRow} and {TileCol} where OGC API Tiles uses {tileMatrix}, {tileRow} and {tileCol}
18
+ */
19
+ static toWmtsTemplate(template: string): string;
20
+ static toCrsUrn(crs: string): string;
21
+ static toCapabilitiesXml(description: OgcOpenApiWmtsLayer): string;
22
+ /**
23
+ * LuciadRIA's WMTSCapabilities for the tileset. The document is passed as a data URL, so it is not requested.
24
+ */
25
+ static createCapabilities(description: OgcOpenApiWmtsLayer): Promise<WMTSCapabilities>;
26
+ private static element;
27
+ private static escape;
28
+ }
29
+ export { OgcOpenApiWmtsTools };
30
+ //# sourceMappingURL=OgcOpenApiWmtsTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OgcOpenApiWmtsTools.d.ts","sourceRoot":"","sources":["../src/OgcOpenApiWmtsTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,oDAAoD,CAAC;AAKpF,OAAO,KAAK,EAAC,gBAAgB,EAAE,WAAW,EAAC,MAAM,gCAAgC,CAAC;AAElF;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,WAAW,CAAC;IAExB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAEzC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAOD,cAAM,mBAAmB;IAErB;;OAEG;WACW,cAAc,CAAC,QAAQ,EAAE,MAAM;WAK/B,QAAQ,CAAC,GAAG,EAAE,MAAM;WAOpB,iBAAiB,CAAC,WAAW,EAAE,mBAAmB,GAAG,MAAM;IAkDzE;;OAEG;WACW,kBAAkB,CAAC,WAAW,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAK7F,OAAO,CAAC,MAAM,CAAC,OAAO;IAItB,OAAO,CAAC,MAAM,CAAC,MAAM;CAGxB;AAED,OAAO,EACH,mBAAmB,EACtB,CAAA"}
@@ -0,0 +1,89 @@
1
+ import { WMTSCapabilities } from "@luciad/ria/model/capabilities/WMTSCapabilities.js";
2
+ import { WMTSRequestEncoding } from "@luciad/ria/model/tileset/WMTSRequestEncoding.js";
3
+ import { CoordinateType } from "@luciad/ria/reference/CoordinateType.js";
4
+ import { getReference } from "@luciad/ria/reference/ReferenceProvider.js";
5
+ import { OgcOpenApiCrsTools } from "./OgcOpenApiCrsTools.js";
6
+ // Meters per degree at the equator, to derive a scale denominator from the cell size of a geographic tile matrix set
7
+ const METERS_PER_DEGREE = 2 * Math.PI * 6378137 / 360;
8
+ // The standardized rendering pixel size of WMTS, 0.28 mm
9
+ const PIXEL_SIZE = 0.00028;
10
+ class OgcOpenApiWmtsTools {
11
+ /**
12
+ * WMTS uses {TileMatrix}, {TileRow} and {TileCol} where OGC API Tiles uses {tileMatrix}, {tileRow} and {tileCol}
13
+ */
14
+ static toWmtsTemplate(template) {
15
+ return template.replace("{tileMatrix}", "{TileMatrix}").replace("{tileRow}", "{TileRow}").replace("{tileCol}", "{TileCol}");
16
+ }
17
+ // http://www.opengis.net/def/crs/EPSG/0/3857 becomes urn:ogc:def:crs:EPSG::3857
18
+ static toCrsUrn(crs) {
19
+ const match = /^https?:\/\/www\.opengis\.net\/def\/crs\/([^/]+)\/([^/]+)\/([^/]+)$/.exec(crs.replace(/[<>]/g, "").trim());
20
+ if (!match)
21
+ return crs;
22
+ const [, authority, version, code] = match;
23
+ return "urn:ogc:def:crs:" + authority + ":" + (version === "0" ? "" : version) + ":" + code;
24
+ }
25
+ static toCapabilitiesXml(description) {
26
+ const tileSet = description.tileMatrix;
27
+ const isGeographic = getReference(OgcOpenApiCrsTools.getReferenceName(tileSet.crs)).coordinateType === CoordinateType.GEODETIC;
28
+ const matrices = tileSet.tileMatrices.map(m => {
29
+ const scaleDenominator = typeof m.scaleDenominator === "number" ? m.scaleDenominator :
30
+ m.cellSize * (isGeographic ? METERS_PER_DEGREE : 1) / PIXEL_SIZE;
31
+ return "<TileMatrix>" +
32
+ OgcOpenApiWmtsTools.element("ows:Identifier", m.id) +
33
+ OgcOpenApiWmtsTools.element("ScaleDenominator", scaleDenominator) +
34
+ // Both pointOfOrigin and TopLeftCorner are in the axis order of the CRS
35
+ OgcOpenApiWmtsTools.element("TopLeftCorner", m.pointOfOrigin[0] + " " + m.pointOfOrigin[1]) +
36
+ OgcOpenApiWmtsTools.element("TileWidth", m.tileWidth) +
37
+ OgcOpenApiWmtsTools.element("TileHeight", m.tileHeight) +
38
+ OgcOpenApiWmtsTools.element("MatrixWidth", m.matrixWidth) +
39
+ OgcOpenApiWmtsTools.element("MatrixHeight", m.matrixHeight) +
40
+ "</TileMatrix>";
41
+ }).join("");
42
+ const limits = description.tileMatrixSetLimits && description.tileMatrixSetLimits.length > 0 ?
43
+ "<TileMatrixSetLimits>" + description.tileMatrixSetLimits.map(l => "<TileMatrixLimits>" +
44
+ OgcOpenApiWmtsTools.element("TileMatrix", l.tileMatrix) +
45
+ OgcOpenApiWmtsTools.element("MinTileRow", l.minTileRow) +
46
+ OgcOpenApiWmtsTools.element("MaxTileRow", l.maxTileRow) +
47
+ OgcOpenApiWmtsTools.element("MinTileCol", l.minTileCol) +
48
+ OgcOpenApiWmtsTools.element("MaxTileCol", l.maxTileCol) +
49
+ "</TileMatrixLimits>").join("") + "</TileMatrixSetLimits>" : "";
50
+ const extent = description.extent && description.extent.length >= 4 ?
51
+ "<ows:WGS84BoundingBox>" +
52
+ OgcOpenApiWmtsTools.element("ows:LowerCorner", description.extent[0] + " " + description.extent[1]) +
53
+ OgcOpenApiWmtsTools.element("ows:UpperCorner", description.extent[2] + " " + description.extent[3]) +
54
+ "</ows:WGS84BoundingBox>" : "";
55
+ return '<?xml version="1.0" encoding="UTF-8"?>' +
56
+ '<Capabilities xmlns="http://www.opengis.net/wmts/1.0" xmlns:ows="http://www.opengis.net/ows/1.1" version="1.0.0">' +
57
+ "<ows:ServiceIdentification><ows:Title>OGC API Tiles</ows:Title><ows:ServiceType>OGC WMTS</ows:ServiceType>" +
58
+ "<ows:ServiceTypeVersion>1.0.0</ows:ServiceTypeVersion></ows:ServiceIdentification>" +
59
+ "<Contents><Layer>" +
60
+ OgcOpenApiWmtsTools.element("ows:Title", description.layer) +
61
+ OgcOpenApiWmtsTools.element("ows:Identifier", description.layer) +
62
+ extent +
63
+ '<Style isDefault="true"><ows:Identifier>default</ows:Identifier></Style>' +
64
+ OgcOpenApiWmtsTools.element("Format", description.format) +
65
+ "<TileMatrixSetLink>" + OgcOpenApiWmtsTools.element("TileMatrixSet", tileSet.id) + limits + "</TileMatrixSetLink>" +
66
+ '<ResourceURL format="' + OgcOpenApiWmtsTools.escape(description.format) + '" resourceType="tile" template="' +
67
+ OgcOpenApiWmtsTools.escape(OgcOpenApiWmtsTools.toWmtsTemplate(description.template)) + '"/>' +
68
+ "</Layer><TileMatrixSet>" +
69
+ OgcOpenApiWmtsTools.element("ows:Identifier", tileSet.id) +
70
+ OgcOpenApiWmtsTools.element("ows:SupportedCRS", OgcOpenApiWmtsTools.toCrsUrn(tileSet.crs)) +
71
+ matrices +
72
+ "</TileMatrixSet></Contents></Capabilities>";
73
+ }
74
+ /**
75
+ * LuciadRIA's WMTSCapabilities for the tileset. The document is passed as a data URL, so it is not requested.
76
+ */
77
+ static createCapabilities(description) {
78
+ const url = "data:application/xml;charset=utf-8," + encodeURIComponent(OgcOpenApiWmtsTools.toCapabilitiesXml(description));
79
+ return WMTSCapabilities.fromURL(url, { preferredRequestEncoding: WMTSRequestEncoding.REST });
80
+ }
81
+ static element(name, value) {
82
+ return "<" + name + ">" + OgcOpenApiWmtsTools.escape(String(value)) + "</" + name + ">";
83
+ }
84
+ static escape(value) {
85
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
86
+ }
87
+ }
88
+ export { OgcOpenApiWmtsTools };
89
+ //# sourceMappingURL=OgcOpenApiWmtsTools.js.map