@loaders.gl/mvt 4.3.0-alpha.3 → 4.3.0-alpha.4

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.
@@ -0,0 +1,4 @@
1
+ import type { Schema } from '@loaders.gl/schema';
2
+ import type { TileJSONLayer } from "./parse-tilejson.js";
3
+ export declare function getSchemaFromTileJSONLayer(layer: TileJSONLayer): Schema;
4
+ //# sourceMappingURL=get-schemas-from-tilejson.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-schemas-from-tilejson.d.ts","sourceRoot":"","sources":["../../src/lib/get-schemas-from-tilejson.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,MAAM,EAAiD,MAAM,oBAAoB,CAAC;AAC/F,OAAO,KAAK,EAAC,aAAa,EAAgB,4BAAyB;AAInE,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAevE"}
@@ -0,0 +1,55 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ // LAYERS
5
+ export function getSchemaFromTileJSONLayer(layer) {
6
+ const fields = [];
7
+ if (layer.fields) {
8
+ for (const field of layer.fields) {
9
+ fields.push({
10
+ name: field.name,
11
+ type: getDataTypeFromTileJSONField(field),
12
+ metadata: getMetadataFromTileJSONField(field)
13
+ });
14
+ }
15
+ }
16
+ return {
17
+ metadata: getMetadataFromTileJSONLayer(layer),
18
+ fields
19
+ };
20
+ }
21
+ function getMetadataFromTileJSONLayer(layer) {
22
+ const metadata = {};
23
+ for (const [key, value] of Object.entries(layer)) {
24
+ if (key !== 'fields' && value) {
25
+ metadata[key] = JSON.stringify(value);
26
+ }
27
+ }
28
+ return metadata;
29
+ }
30
+ // FIELDS
31
+ function getDataTypeFromTileJSONField(field) {
32
+ switch (field.type.toLowerCase()) {
33
+ case 'float32':
34
+ return 'float32';
35
+ case 'number':
36
+ case 'float64':
37
+ return 'float64';
38
+ case 'string':
39
+ case 'utf8':
40
+ return 'utf8';
41
+ case 'boolean':
42
+ return 'bool';
43
+ default:
44
+ return 'null';
45
+ }
46
+ }
47
+ function getMetadataFromTileJSONField(field) {
48
+ const metadata = {};
49
+ for (const [key, value] of Object.entries(field)) {
50
+ if (key !== 'name' && value) {
51
+ metadata[key] = JSON.stringify(value);
52
+ }
53
+ }
54
+ return metadata;
55
+ }
@@ -1,14 +1,22 @@
1
+ import { Schema } from '@loaders.gl/schema';
1
2
  export type TileJSONOptions = {
2
3
  /** max number of values. If not provided, include all values in the source tilestats */
3
4
  maxValues?: number;
4
5
  };
5
6
  /** Parsed and typed TileJSON, merges Tilestats information if present */
6
7
  export type TileJSON = {
8
+ /** Name of the tileset (for presentation in UI) */
7
9
  name?: string;
10
+ /** A description of the contents or purpose of the tileset */
8
11
  description?: string;
12
+ /** The version of the tileset */
9
13
  version?: string;
10
14
  tileFormat?: string;
11
15
  tilesetType?: string;
16
+ /** Generating application. Tippecanoe adds this. */
17
+ generator?: string;
18
+ /** Generating application options. Tippecanoe adds this. */
19
+ generatorOptions?: string;
12
20
  /** Tile indexing scheme */
13
21
  scheme?: 'xyz' | 'tms';
14
22
  /** Sharded URLs */
@@ -23,10 +31,6 @@ export type TileJSON = {
23
31
  htmlAttribution?: string;
24
32
  htmlLegend?: string;
25
33
  layers?: TileJSONLayer[];
26
- /** Generating application. Tippecanoe adds this. */
27
- generator?: string;
28
- /** Generating application options. Tippecanoe adds this. */
29
- generatorOptions?: string;
30
34
  /** Any nested JSON metadata */
31
35
  metaJson?: any | null;
32
36
  };
@@ -44,6 +48,7 @@ export type TileJSONLayer = {
44
48
  minZoom?: number;
45
49
  maxZoom?: number;
46
50
  fields: TileJSONField[];
51
+ schema?: Schema;
47
52
  };
48
53
  export type TileJSONField = {
49
54
  /** The name of this attribute */
@@ -1 +1 @@
1
- {"version":3,"file":"parse-tilejson.d.ts","sourceRoot":"","sources":["../../src/lib/parse-tilejson.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GAAG;IAC5B,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,yEAAyE;AACzE,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB,mBAAmB;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,wHAAwH;IACxH,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IAEzB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,2FAA2F;IAC3F,IAAI,EAAE,MAAM,CAAC;IAEb,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IAIrB,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uEAAuE;IAEvE,OAAO;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IAIrB,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;CACpB,CAAC;AA+CF;;;;;GAKG;AAEH,wBAAgB,aAAa,CAAC,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,GAAG,QAAQ,GAAG,IAAI,CAiE1F"}
1
+ {"version":3,"file":"parse-tilejson.d.ts","sourceRoot":"","sources":["../../src/lib/parse-tilejson.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAG1C,MAAM,MAAM,eAAe,GAAG;IAC5B,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,yEAAyE;AACzE,MAAM,MAAM,QAAQ,GAAG;IACrB,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,2BAA2B;IAC3B,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB,mBAAmB;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,wHAAwH;IACxH,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IAEzB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,2FAA2F;IAC3F,IAAI,EAAE,MAAM,CAAC;IAEb,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IAIrB,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uEAAuE;IAEvE,OAAO;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,aAAa,EAAE,CAAC;IAExB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IAIrB,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;CACpB,CAAC;AA+CF;;;;;GAKG;AAEH,wBAAgB,aAAa,CAAC,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,GAAG,QAAQ,GAAG,IAAI,CAiE1F"}
@@ -1,6 +1,7 @@
1
1
  // loaders.gl
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
+ import { getSchemaFromTileJSONLayer } from "./get-schemas-from-tilejson.js";
4
5
  const isObject = (x) => x !== null && typeof x === 'object';
5
6
  /**
6
7
  * Parse TileJSON from metadata
@@ -125,15 +126,14 @@ function parseTilestatsForLayer(layer, options) {
125
126
  function mergeLayers(layers, tilestatsLayers) {
126
127
  return layers.map((layer) => {
127
128
  const tilestatsLayer = tilestatsLayers.find((tsLayer) => tsLayer.name === layer.name);
128
- // For aesthetics in JSON dumps, we preserve field order (make sure layers is last)
129
- const fields = tilestatsLayer?.fields || [];
130
- const layer2 = { ...layer };
131
- delete layer2.fields;
132
- return {
133
- ...layer2,
129
+ const fields = tilestatsLayer?.fields || layer.fields || [];
130
+ const mergedLayer = {
131
+ ...layer,
134
132
  ...tilestatsLayer,
135
133
  fields
136
134
  };
135
+ mergedLayer.schema = getSchemaFromTileJSONLayer(mergedLayer);
136
+ return mergedLayer;
137
137
  });
138
138
  }
139
139
  /**
@@ -260,7 +260,7 @@ function attributeTypeToFieldType(aType) {
260
260
  const type = aType.toLowerCase();
261
261
  if (!type || !attrTypeMap[type]) {
262
262
  // console.warn(
263
- // `cannot convert feature type ${type} to loaders.gl data type, use string by default`
263
+ // `cannot convert attribute type ${type} to loaders.gl data type, use string by default`
264
264
  // );
265
265
  }
266
266
  return attrTypeMap[type] || { type: 'string' };
@@ -1,4 +1,41 @@
1
- /** TODO where is this used? */
1
+ /** For local coordinates, the tileIndex is not required */
2
+ type MVTLocalCoordinatesOptions = {
3
+ /**
4
+ * When set to `local`, the parser will return a flat array of GeoJSON objects with local coordinates decoded from tile origin.
5
+ */
6
+ coordinates: 'local';
7
+ tileIndex: null;
8
+ };
9
+ /** In WGS84 coordinates, the tileIndex is required */
10
+ type MVTWgs84CoordinatesOptions = {
11
+ /**
12
+ * When set to `wgs84`, the parser will return a flat array of GeoJSON objects with coordinates in longitude, latitude decoded from the provided tile index.
13
+ */
14
+ coordinates?: 'wgs84';
15
+ /**
16
+ * Mandatory with `wgs84` coordinates option. An object containing tile index values (`x`, `y`,
17
+ * `z`) to reproject features' coordinates into WGS84.
18
+ */
19
+ tileIndex?: {
20
+ x: number;
21
+ y: number;
22
+ z: number;
23
+ };
24
+ };
25
+ export type MVTOptions = (MVTLocalCoordinatesOptions | MVTWgs84CoordinatesOptions) & {
26
+ shape?: 'geojson-table' | 'columnar-table' | 'geojson' | 'binary' | 'binary-geometry';
27
+ /**
28
+ * When non-`null`, the layer name of each feature is added to
29
+ * `feature.properties[layerProperty]`. (A `feature.properties` object is created if the feature
30
+ * has no existing properties). If set to `null`, a layer name property will not be added.
31
+ */
32
+ layerProperty?: string | number;
33
+ /**
34
+ * Optional list of layer names. If not `null`, only features belonging to the named layers will
35
+ * be included in the output. If `null`, features from all layers are returned.
36
+ */
37
+ layers?: string[];
38
+ };
2
39
  export type MVTMapboxGeometry = {
3
40
  type?: string;
4
41
  id?: number;
@@ -16,4 +53,5 @@ export type MVTMapboxCoordinates = {
16
53
  };
17
54
  id?: number;
18
55
  };
56
+ export {};
19
57
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAIA,+BAA+B;AAC/B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,iBAAiB,CAAC;KAChC,CAAC;IACF,UAAU,EAAE;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;KAAC,CAAC;IAC5D,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAIA,2DAA2D;AAC3D,KAAK,0BAA0B,GAAG;IAChC;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;CACjB,CAAC;AAEF,sDAAsD;AACtD,KAAK,0BAA0B,GAAG;IAChC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,SAAS,CAAC,EAAE;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,0BAA0B,GAAG,0BAA0B,CAAC,GAAG;IACnF,KAAK,CAAC,EAAE,eAAe,GAAG,gBAAgB,GAAG,SAAS,GAAG,QAAQ,GAAG,iBAAiB,CAAC;IACtF;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEhC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,iBAAiB,CAAC;KAChC,CAAC;IACF,UAAU,EAAE;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;KAAC,CAAC;IAC5D,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC"}
package/dist/lib/types.js CHANGED
@@ -1,4 +1,4 @@
1
1
  // loaders.gl
2
2
  // SPDX-License-Identifier: MIT
3
- // Copyright vis.gl contributors
3
+ // Copyright (c) vis.gl contributors
4
4
  export {};
@@ -20,6 +20,8 @@ export type MVTLoaderOptions = LoaderOptions & {
20
20
  workerUrl?: string;
21
21
  };
22
22
  gis?: {
23
+ /** @deprecated Use options.mvt.shape === 'binary-geometry' */
24
+ binary?: boolean;
23
25
  /** @deprecated. Use options.mvt.shape */
24
26
  format?: 'geojson-table' | 'columnar-table' | 'geojson' | 'binary' | 'binary-geometry';
25
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"mvt-loader.d.ts","sourceRoot":"","sources":["../src/mvt-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAA2B,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAEtF,OAAO,EAAC,QAAQ,EAAC,2BAAwB;AAMzC,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE;QACJ,6BAA6B;QAC7B,KAAK,CAAC,EAAE,eAAe,GAAG,gBAAgB,GAAG,SAAS,GAAG,QAAQ,GAAG,iBAAiB,CAAC;QACtF,sHAAsH;QACtH,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;QAChC,uJAAuJ;QACvJ,SAAS,CAAC,EAAE;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAC,CAAC;QAC9C,0GAA0G;QAC1G,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAChC,gJAAgJ;QAChJ,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,8EAA8E;QAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,yCAAyC;QACzC,MAAM,CAAC,EAAE,eAAe,GAAG,gBAAgB,GAAG,SAAS,GAAG,QAAQ,GAAG,iBAAiB,CAAC;KACxF,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;CA+B3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS;yDAEiB,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;CAOtD,CAAC"}
1
+ {"version":3,"file":"mvt-loader.d.ts","sourceRoot":"","sources":["../src/mvt-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAA2B,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAEtF,OAAO,EAAC,QAAQ,EAAC,2BAAwB;AAMzC,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE;QACJ,6BAA6B;QAC7B,KAAK,CAAC,EAAE,eAAe,GAAG,gBAAgB,GAAG,SAAS,GAAG,QAAQ,GAAG,iBAAiB,CAAC;QACtF,sHAAsH;QACtH,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;QAChC,uJAAuJ;QACvJ,SAAS,CAAC,EAAE;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAC,CAAC;QAC9C,0GAA0G;QAC1G,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAChC,gJAAgJ;QAChJ,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,8EAA8E;QAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,8DAA8D;QAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,yCAAyC;QACzC,MAAM,CAAC,EAAE,eAAe,GAAG,gBAAgB,GAAG,SAAS,GAAG,QAAQ,GAAG,iBAAiB,CAAC;KACxF,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;CA+B3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS;yDAEiB,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;CAOtD,CAAC"}
@@ -5,7 +5,7 @@
5
5
  import { parseMVT } from "./lib/parse-mvt.js";
6
6
  // __VERSION__ is injected by babel-plugin-version-inline
7
7
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
8
- const VERSION = typeof "4.3.0-alpha.2" !== 'undefined' ? "4.3.0-alpha.2" : 'latest';
8
+ const VERSION = typeof "4.3.0-alpha.3" !== 'undefined' ? "4.3.0-alpha.3" : 'latest';
9
9
  /**
10
10
  * Worker loader for the Mapbox Vector Tile format
11
11
  */
@@ -1649,7 +1649,7 @@
1649
1649
  var navigator_ = globalThis.navigator || {};
1650
1650
 
1651
1651
  // ../../node_modules/@probe.gl/log/node_modules/@probe.gl/env/dist/utils/globals.js
1652
- var VERSION = true ? "4.3.0-alpha.2" : "untranspiled source";
1652
+ var VERSION = true ? "4.3.0-alpha.3" : "untranspiled source";
1653
1653
  var isBrowser2 = isBrowser();
1654
1654
 
1655
1655
  // ../../node_modules/@probe.gl/log/dist/utils/local-storage.js
@@ -2147,7 +2147,7 @@
2147
2147
  });
2148
2148
 
2149
2149
  // ../loader-utils/src/lib/log-utils/log.ts
2150
- var VERSION2 = true ? "4.3.0-alpha.2" : "latest";
2150
+ var VERSION2 = true ? "4.3.0-alpha.3" : "latest";
2151
2151
  var version = VERSION2[0] >= "0" && VERSION2[0] <= "9" ? `v${VERSION2}` : "";
2152
2152
  function createLog() {
2153
2153
  const log2 = new Log({ id: "loaders.gl" });
@@ -3019,7 +3019,7 @@
3019
3019
  }
3020
3020
 
3021
3021
  // src/mvt-loader.ts
3022
- var VERSION3 = true ? "4.3.0-alpha.2" : "latest";
3022
+ var VERSION3 = true ? "4.3.0-alpha.3" : "latest";
3023
3023
  var MVTWorkerLoader = {
3024
3024
  dataType: null,
3025
3025
  batchType: null,
@@ -4,7 +4,7 @@
4
4
  import { parseTileJSON } from "./lib/parse-tilejson.js";
5
5
  // __VERSION__ is injected by babel-plugin-version-inline
6
6
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
7
- const VERSION = typeof "4.3.0-alpha.2" !== 'undefined' ? "4.3.0-alpha.2" : 'latest';
7
+ const VERSION = typeof "4.3.0-alpha.3" !== 'undefined' ? "4.3.0-alpha.3" : 'latest';
8
8
  /**
9
9
  * Loader for TileJSON metadata
10
10
  */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@loaders.gl/mvt",
3
3
  "description": "Loader for Mapbox Vector Tiles",
4
- "version": "4.3.0-alpha.3",
4
+ "version": "4.3.0-alpha.4",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "publishConfig": {
@@ -26,6 +26,9 @@
26
26
  "types": "./dist/index.d.ts",
27
27
  "import": "./dist/index.js",
28
28
  "require": "./dist/index.cjs"
29
+ },
30
+ "./mvt-worker.js": {
31
+ "import": "./dist/mvt-worker.js"
29
32
  }
30
33
  },
31
34
  "sideEffects": false,
@@ -41,10 +44,10 @@
41
44
  "build-worker": "esbuild src/workers/mvt-worker.ts --bundle --outfile=dist/mvt-worker.js --define:__VERSION__=\\\"$npm_package_version\\\""
42
45
  },
43
46
  "dependencies": {
44
- "@loaders.gl/gis": "4.3.0-alpha.3",
45
- "@loaders.gl/images": "4.3.0-alpha.3",
46
- "@loaders.gl/loader-utils": "4.3.0-alpha.3",
47
- "@loaders.gl/schema": "4.3.0-alpha.3",
47
+ "@loaders.gl/gis": "4.3.0-alpha.4",
48
+ "@loaders.gl/images": "4.3.0-alpha.4",
49
+ "@loaders.gl/loader-utils": "4.3.0-alpha.4",
50
+ "@loaders.gl/schema": "4.3.0-alpha.4",
48
51
  "@math.gl/polygon": "^4.0.0",
49
52
  "@probe.gl/stats": "^4.0.0",
50
53
  "pbf": "^3.2.1"
@@ -55,5 +58,5 @@
55
58
  "peerDependencies": {
56
59
  "@loaders.gl/core": "^4.0.0"
57
60
  },
58
- "gitHead": "3213679d79e6ff2814d48fd3337acfa446c74099"
61
+ "gitHead": "4900ac4c4de20366c050b80cef04dc5b52d167af"
59
62
  }
@@ -0,0 +1,64 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {Schema, Field, DataType, SchemaMetadata, FieldMetadata} from '@loaders.gl/schema';
6
+ import type {TileJSONLayer, TileJSONField} from './parse-tilejson';
7
+
8
+ // LAYERS
9
+
10
+ export function getSchemaFromTileJSONLayer(layer: TileJSONLayer): Schema {
11
+ const fields: Field[] = [];
12
+ if (layer.fields) {
13
+ for (const field of layer.fields) {
14
+ fields.push({
15
+ name: field.name,
16
+ type: getDataTypeFromTileJSONField(field),
17
+ metadata: getMetadataFromTileJSONField(field)
18
+ });
19
+ }
20
+ }
21
+ return {
22
+ metadata: getMetadataFromTileJSONLayer(layer),
23
+ fields
24
+ };
25
+ }
26
+
27
+ function getMetadataFromTileJSONLayer(layer: TileJSONLayer): SchemaMetadata {
28
+ const metadata: Record<string, string> = {};
29
+ for (const [key, value] of Object.entries(layer)) {
30
+ if (key !== 'fields' && value) {
31
+ metadata[key] = JSON.stringify(value);
32
+ }
33
+ }
34
+ return metadata;
35
+ }
36
+
37
+ // FIELDS
38
+
39
+ function getDataTypeFromTileJSONField(field: TileJSONField): DataType {
40
+ switch (field.type.toLowerCase()) {
41
+ case 'float32':
42
+ return 'float32';
43
+ case 'number':
44
+ case 'float64':
45
+ return 'float64';
46
+ case 'string':
47
+ case 'utf8':
48
+ return 'utf8';
49
+ case 'boolean':
50
+ return 'bool';
51
+ default:
52
+ return 'null';
53
+ }
54
+ }
55
+
56
+ function getMetadataFromTileJSONField(field: TileJSONField): FieldMetadata {
57
+ const metadata: Record<string, string> = {};
58
+ for (const [key, value] of Object.entries(field)) {
59
+ if (key !== 'name' && value) {
60
+ metadata[key] = JSON.stringify(value);
61
+ }
62
+ }
63
+ return metadata;
64
+ }
@@ -2,6 +2,9 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
+ import {Schema} from '@loaders.gl/schema';
6
+ import {getSchemaFromTileJSONLayer} from './get-schemas-from-tilejson';
7
+
5
8
  export type TileJSONOptions = {
6
9
  /** max number of values. If not provided, include all values in the source tilestats */
7
10
  maxValues?: number;
@@ -9,13 +12,21 @@ export type TileJSONOptions = {
9
12
 
10
13
  /** Parsed and typed TileJSON, merges Tilestats information if present */
11
14
  export type TileJSON = {
15
+ /** Name of the tileset (for presentation in UI) */
12
16
  name?: string;
17
+ /** A description of the contents or purpose of the tileset */
13
18
  description?: string;
19
+ /** The version of the tileset */
14
20
  version?: string;
15
21
 
16
22
  tileFormat?: string;
17
23
  tilesetType?: string;
18
24
 
25
+ /** Generating application. Tippecanoe adds this. */
26
+ generator?: string;
27
+ /** Generating application options. Tippecanoe adds this. */
28
+ generatorOptions?: string;
29
+
19
30
  /** Tile indexing scheme */
20
31
  scheme?: 'xyz' | 'tms';
21
32
  /** Sharded URLs */
@@ -33,11 +44,6 @@ export type TileJSON = {
33
44
  // Combination of tilestats (if present) and tilejson layer information
34
45
  layers?: TileJSONLayer[];
35
46
 
36
- /** Generating application. Tippecanoe adds this. */
37
- generator?: string;
38
- /** Generating application options. Tippecanoe adds this. */
39
- generatorOptions?: string;
40
-
41
47
  /** Any nested JSON metadata */
42
48
  metaJson?: any | null;
43
49
  };
@@ -61,6 +67,8 @@ export type TileJSONLayer = {
61
67
  minZoom?: number;
62
68
  maxZoom?: number;
63
69
  fields: TileJSONField[];
70
+
71
+ schema?: Schema;
64
72
  };
65
73
 
66
74
  export type TileJSONField = {
@@ -262,17 +270,16 @@ function parseTilestatsForLayer(layer: TilestatsLayer, options: TileJSONOptions)
262
270
  }
263
271
 
264
272
  function mergeLayers(layers: TileJSONLayer[], tilestatsLayers: TileJSONLayer[]): TileJSONLayer[] {
265
- return layers.map((layer) => {
273
+ return layers.map((layer: TileJSONLayer): TileJSONLayer => {
266
274
  const tilestatsLayer = tilestatsLayers.find((tsLayer) => tsLayer.name === layer.name);
267
- // For aesthetics in JSON dumps, we preserve field order (make sure layers is last)
268
- const fields = tilestatsLayer?.fields || [];
269
- const layer2: Partial<TileJSONLayer> = {...layer};
270
- delete layer2.fields;
271
- return {
272
- ...layer2,
275
+ const fields = tilestatsLayer?.fields || layer.fields || [];
276
+ const mergedLayer = {
277
+ ...layer,
273
278
  ...tilestatsLayer,
274
279
  fields
275
280
  } as TileJSONLayer;
281
+ mergedLayer.schema = getSchemaFromTileJSONLayer(mergedLayer);
282
+ return mergedLayer;
276
283
  });
277
284
  }
278
285
 
@@ -419,7 +426,7 @@ function attributeTypeToFieldType(aType: string): {type: string} {
419
426
  const type = aType.toLowerCase();
420
427
  if (!type || !attrTypeMap[type]) {
421
428
  // console.warn(
422
- // `cannot convert feature type ${type} to loaders.gl data type, use string by default`
429
+ // `cannot convert attribute type ${type} to loaders.gl data type, use string by default`
423
430
  // );
424
431
  }
425
432
  return attrTypeMap[type] || {type: 'string'};
package/src/lib/types.ts CHANGED
@@ -1,8 +1,46 @@
1
1
  // loaders.gl
2
2
  // SPDX-License-Identifier: MIT
3
- // Copyright vis.gl contributors
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ /** For local coordinates, the tileIndex is not required */
6
+ type MVTLocalCoordinatesOptions = {
7
+ /**
8
+ * When set to `local`, the parser will return a flat array of GeoJSON objects with local coordinates decoded from tile origin.
9
+ */
10
+ coordinates: 'local';
11
+ tileIndex: null;
12
+ };
13
+
14
+ /** In WGS84 coordinates, the tileIndex is required */
15
+ type MVTWgs84CoordinatesOptions = {
16
+ /**
17
+ * When set to `wgs84`, the parser will return a flat array of GeoJSON objects with coordinates in longitude, latitude decoded from the provided tile index.
18
+ */
19
+ coordinates?: 'wgs84';
20
+
21
+ /**
22
+ * Mandatory with `wgs84` coordinates option. An object containing tile index values (`x`, `y`,
23
+ * `z`) to reproject features' coordinates into WGS84.
24
+ */
25
+ tileIndex?: {x: number; y: number; z: number};
26
+ };
27
+
28
+ export type MVTOptions = (MVTLocalCoordinatesOptions | MVTWgs84CoordinatesOptions) & {
29
+ shape?: 'geojson-table' | 'columnar-table' | 'geojson' | 'binary' | 'binary-geometry';
30
+ /**
31
+ * When non-`null`, the layer name of each feature is added to
32
+ * `feature.properties[layerProperty]`. (A `feature.properties` object is created if the feature
33
+ * has no existing properties). If set to `null`, a layer name property will not be added.
34
+ */
35
+ layerProperty?: string | number;
36
+
37
+ /**
38
+ * Optional list of layer names. If not `null`, only features belonging to the named layers will
39
+ * be included in the output. If `null`, features from all layers are returned.
40
+ */
41
+ layers?: string[];
42
+ };
4
43
 
5
- /** TODO where is this used? */
6
44
  export type MVTMapboxGeometry = {
7
45
  type?: string;
8
46
  id?: number;
package/src/mvt-loader.ts CHANGED
@@ -26,6 +26,8 @@ export type MVTLoaderOptions = LoaderOptions & {
26
26
  workerUrl?: string;
27
27
  };
28
28
  gis?: {
29
+ /** @deprecated Use options.mvt.shape === 'binary-geometry' */
30
+ binary?: boolean;
29
31
  /** @deprecated. Use options.mvt.shape */
30
32
  format?: 'geojson-table' | 'columnar-table' | 'geojson' | 'binary' | 'binary-geometry';
31
33
  };