@loaders.gl/mvt 4.3.1 → 4.4.0-alpha.1
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/dist.dev.js +151 -93
- package/dist/dist.min.js +1 -1
- package/dist/index.cjs +74 -78
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/lib/parse-mvt.d.ts.map +1 -1
- package/dist/lib/pojo-parser/mvt-constants.d.ts +116 -0
- package/dist/lib/pojo-parser/mvt-constants.d.ts.map +1 -0
- package/dist/lib/pojo-parser/mvt-constants.js +126 -0
- package/dist/lib/pojo-parser/mvt-types.d.ts +17 -0
- package/dist/lib/pojo-parser/mvt-types.d.ts.map +1 -0
- package/dist/lib/pojo-parser/mvt-types.js +4 -0
- package/dist/lib/pojo-parser/parse-geometry-from-pbf.d.ts +77 -0
- package/dist/lib/pojo-parser/parse-geometry-from-pbf.d.ts.map +1 -0
- package/dist/lib/pojo-parser/parse-geometry-from-pbf.js +234 -0
- package/dist/lib/pojo-parser/parse-mvt-from-pbf.d.ts +25 -0
- package/dist/lib/pojo-parser/parse-mvt-from-pbf.d.ts.map +1 -0
- package/dist/lib/pojo-parser/parse-mvt-from-pbf.js +262 -0
- package/dist/lib/vector-tile/vector-tile-feature.d.ts +2 -1
- package/dist/lib/vector-tile/vector-tile-feature.d.ts.map +1 -1
- package/dist/lib/vector-tile/vector-tile-layer.d.ts +1 -1
- package/dist/lib/vector-tile/vector-tile-layer.d.ts.map +1 -1
- package/dist/mvt-format.d.ts +12 -0
- package/dist/mvt-format.d.ts.map +1 -0
- package/dist/mvt-format.js +20 -0
- package/dist/mvt-loader.d.ts +12 -12
- package/dist/mvt-loader.d.ts.map +1 -1
- package/dist/mvt-loader.js +3 -13
- package/dist/mvt-source.d.ts +22 -24
- package/dist/mvt-source.d.ts.map +1 -1
- package/dist/mvt-source.js +14 -23
- package/dist/mvt-worker.js +20 -15
- package/dist/table-tile-source.d.ts +38 -38
- package/dist/table-tile-source.d.ts.map +1 -1
- package/dist/table-tile-source.js +54 -53
- package/dist/tilejson-loader.js +1 -1
- package/package.json +7 -7
- package/src/index.ts +2 -2
- package/src/lib/parse-mvt.ts +2 -8
- package/src/lib/pojo-parser/mvt-constants.ts +135 -0
- package/src/lib/pojo-parser/mvt-types.ts +22 -0
- package/src/lib/pojo-parser/parse-geometry-from-pbf.ts +285 -0
- package/src/lib/pojo-parser/parse-mvt-from-pbf.ts +310 -0
- package/src/lib/vector-tile/vector-tile-feature.ts +2 -6
- package/src/lib/vector-tile/vector-tile-layer.ts +1 -1
- package/src/mvt-format.ts +23 -0
- package/src/mvt-loader.ts +2 -13
- package/src/mvt-source.ts +33 -38
- package/src/table-tile-source.ts +116 -96
package/dist/mvt-worker.js
CHANGED
|
@@ -1275,8 +1275,8 @@
|
|
|
1275
1275
|
}
|
|
1276
1276
|
};
|
|
1277
1277
|
|
|
1278
|
-
// ../gis/src/lib/
|
|
1279
|
-
function
|
|
1278
|
+
// ../gis/src/lib/feature-collection-converters/convert-flat-geojson-to-binary-features.ts
|
|
1279
|
+
function convertFlatGeojsonToBinaryFeatureCollection(features, geometryInfo, options) {
|
|
1280
1280
|
const propArrayTypes = extractNumericPropTypes(features);
|
|
1281
1281
|
const numericPropKeys = Object.keys(propArrayTypes).filter((k) => propArrayTypes[k] !== Array);
|
|
1282
1282
|
return fillArrays(
|
|
@@ -1563,14 +1563,14 @@
|
|
|
1563
1563
|
return constructor === Float64Array || Math.fround(x) !== x ? Float64Array : Float32Array;
|
|
1564
1564
|
}
|
|
1565
1565
|
|
|
1566
|
-
// ../../node_modules/@probe.gl/
|
|
1566
|
+
// ../../node_modules/@probe.gl/env/dist/lib/globals.js
|
|
1567
1567
|
var window_ = globalThis;
|
|
1568
1568
|
var document_ = globalThis.document || {};
|
|
1569
1569
|
var process_ = globalThis.process || {};
|
|
1570
1570
|
var console_ = globalThis.console;
|
|
1571
1571
|
var navigator_ = globalThis.navigator || {};
|
|
1572
1572
|
|
|
1573
|
-
// ../../node_modules/@probe.gl/
|
|
1573
|
+
// ../../node_modules/@probe.gl/env/dist/lib/is-electron.js
|
|
1574
1574
|
function isElectron(mockUserAgent) {
|
|
1575
1575
|
if (typeof window !== "undefined" && window.process?.type === "renderer") {
|
|
1576
1576
|
return true;
|
|
@@ -1583,7 +1583,7 @@
|
|
|
1583
1583
|
return Boolean(userAgent && userAgent.indexOf("Electron") >= 0);
|
|
1584
1584
|
}
|
|
1585
1585
|
|
|
1586
|
-
// ../../node_modules/@probe.gl/
|
|
1586
|
+
// ../../node_modules/@probe.gl/env/dist/lib/is-browser.js
|
|
1587
1587
|
function isBrowser() {
|
|
1588
1588
|
const isNode = (
|
|
1589
1589
|
// @ts-expect-error
|
|
@@ -1592,7 +1592,7 @@
|
|
|
1592
1592
|
return !isNode || isElectron();
|
|
1593
1593
|
}
|
|
1594
1594
|
|
|
1595
|
-
// ../../node_modules/@probe.gl/
|
|
1595
|
+
// ../../node_modules/@probe.gl/env/dist/index.js
|
|
1596
1596
|
var VERSION = true ? "4.0.7" : "untranspiled source";
|
|
1597
1597
|
|
|
1598
1598
|
// ../../node_modules/@probe.gl/log/dist/utils/local-storage.js
|
|
@@ -1995,7 +1995,7 @@
|
|
|
1995
1995
|
var dist_default = new Log({ id: "@probe.gl/log" });
|
|
1996
1996
|
|
|
1997
1997
|
// ../loader-utils/src/lib/log-utils/log.ts
|
|
1998
|
-
var VERSION2 = true ? "4.
|
|
1998
|
+
var VERSION2 = true ? "4.4.0-alpha.0" : "latest";
|
|
1999
1999
|
var version = VERSION2[0] >= "0" && VERSION2[0] <= "9" ? `v${VERSION2}` : "";
|
|
2000
2000
|
function createLog() {
|
|
2001
2001
|
const log2 = new Log({ id: "loaders.gl" });
|
|
@@ -2779,7 +2779,7 @@
|
|
|
2779
2779
|
}
|
|
2780
2780
|
function parseToBinary(arrayBuffer, options) {
|
|
2781
2781
|
const [flatGeoJsonFeatures, geometryInfo] = parseToFlatGeoJson(arrayBuffer, options);
|
|
2782
|
-
const binaryData =
|
|
2782
|
+
const binaryData = convertFlatGeojsonToBinaryFeatureCollection(flatGeoJsonFeatures, geometryInfo);
|
|
2783
2783
|
binaryData.byteLength = arrayBuffer.byteLength;
|
|
2784
2784
|
return binaryData;
|
|
2785
2785
|
}
|
|
@@ -2866,15 +2866,11 @@
|
|
|
2866
2866
|
return decodedFeature;
|
|
2867
2867
|
}
|
|
2868
2868
|
|
|
2869
|
-
// src/mvt-
|
|
2870
|
-
var
|
|
2871
|
-
var MVTWorkerLoader = {
|
|
2872
|
-
dataType: null,
|
|
2873
|
-
batchType: null,
|
|
2869
|
+
// src/mvt-format.ts
|
|
2870
|
+
var MVTFormat = {
|
|
2874
2871
|
name: "Mapbox Vector Tile",
|
|
2875
2872
|
id: "mvt",
|
|
2876
2873
|
module: "mvt",
|
|
2877
|
-
version: VERSION3,
|
|
2878
2874
|
// Note: ArcGIS uses '.pbf' extension and 'application/octet-stream'
|
|
2879
2875
|
extensions: ["mvt", "pbf"],
|
|
2880
2876
|
mimeTypes: [
|
|
@@ -2883,8 +2879,17 @@
|
|
|
2883
2879
|
"application/x-protobuf"
|
|
2884
2880
|
// 'application/octet-stream'
|
|
2885
2881
|
],
|
|
2882
|
+
category: "geometry"
|
|
2883
|
+
};
|
|
2884
|
+
|
|
2885
|
+
// src/mvt-loader.ts
|
|
2886
|
+
var VERSION3 = true ? "4.4.0-alpha.0" : "latest";
|
|
2887
|
+
var MVTWorkerLoader = {
|
|
2888
|
+
...MVTFormat,
|
|
2889
|
+
dataType: null,
|
|
2890
|
+
batchType: null,
|
|
2891
|
+
version: VERSION3,
|
|
2886
2892
|
worker: true,
|
|
2887
|
-
category: "geometry",
|
|
2888
2893
|
options: {
|
|
2889
2894
|
mvt: {
|
|
2890
2895
|
shape: "geojson",
|
|
@@ -1,37 +1,13 @@
|
|
|
1
|
-
import { VectorTileSource, TileSourceMetadata } from '@loaders.gl/loader-utils';
|
|
2
|
-
import
|
|
3
|
-
import { Schema, GeoJSONTable, Feature, BinaryFeatureCollection } from '@loaders.gl/schema';
|
|
1
|
+
import type { DataSourceOptions, VectorTileSource, TileSourceMetadata, GetTileDataParameters, GetTileParameters } from '@loaders.gl/loader-utils';
|
|
2
|
+
import { DataSource } from '@loaders.gl/loader-utils';
|
|
3
|
+
import type { Schema, GeoJSONTable, Feature, BinaryFeatureCollection } from '@loaders.gl/schema';
|
|
4
4
|
import { Stats } from '@probe.gl/stats';
|
|
5
5
|
import type { ProtoFeature } from "./lib/vector-tiler/features/proto-feature.js";
|
|
6
6
|
import type { ProtoTile } from "./lib/vector-tiler/proto-tile.js";
|
|
7
7
|
/** Options to configure tiling */
|
|
8
|
-
export
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
readonly version: "0.0.0";
|
|
12
|
-
readonly extensions: ["mvt"];
|
|
13
|
-
readonly mimeTypes: ["application/octet-stream"];
|
|
14
|
-
readonly options: {
|
|
15
|
-
readonly table: {
|
|
16
|
-
readonly coordinates: "local";
|
|
17
|
-
readonly promoteId: never;
|
|
18
|
-
readonly maxZoom: 14;
|
|
19
|
-
readonly indexMaxZoom: 5;
|
|
20
|
-
readonly maxPointsPerTile: 10000;
|
|
21
|
-
readonly tolerance: 3;
|
|
22
|
-
readonly extent: 4096;
|
|
23
|
-
readonly buffer: 64;
|
|
24
|
-
readonly generateId: undefined;
|
|
25
|
-
};
|
|
26
|
-
};
|
|
27
|
-
readonly type: "table";
|
|
28
|
-
readonly testURL: (url: string) => boolean;
|
|
29
|
-
readonly createDataSource: (url: string | Blob | GeoJSONTable | Promise<GeoJSONTable>, options: DynamicVectorTileSourceProps) => DynamicVectorTileSource;
|
|
30
|
-
};
|
|
31
|
-
/** Options to configure tiling */
|
|
32
|
-
export type DynamicVectorTileSourceProps = VectorTileSourceProps & {
|
|
33
|
-
table: {
|
|
34
|
-
coordinates: 'local' | 'wgs84' | 'EPSG:4326';
|
|
8
|
+
export type TableTileSourceOptions = DataSourceOptions & {
|
|
9
|
+
table?: {
|
|
10
|
+
coordinates?: 'local' | 'wgs84' | 'EPSG:4326';
|
|
35
11
|
/** max zoom to preserve detail on */
|
|
36
12
|
maxZoom?: number;
|
|
37
13
|
/** max zoom in the tile index */
|
|
@@ -52,10 +28,35 @@ export type DynamicVectorTileSourceProps = VectorTileSourceProps & {
|
|
|
52
28
|
debug?: number;
|
|
53
29
|
/** whether to calculate line metrics */
|
|
54
30
|
lineMetrics?: boolean;
|
|
55
|
-
/** table loders */
|
|
56
|
-
loaders?: LoaderWithParser[];
|
|
57
31
|
};
|
|
58
32
|
};
|
|
33
|
+
/** Options to configure tiling */
|
|
34
|
+
export declare const TableTileSource: {
|
|
35
|
+
readonly name: "TableTiler";
|
|
36
|
+
readonly id: "table-tiler";
|
|
37
|
+
readonly module: "mvt";
|
|
38
|
+
readonly version: "0.0.0";
|
|
39
|
+
readonly extensions: ["mvt"];
|
|
40
|
+
readonly mimeTypes: ["application/octet-stream"];
|
|
41
|
+
readonly type: "table";
|
|
42
|
+
readonly fromUrl: false;
|
|
43
|
+
readonly fromBlob: false;
|
|
44
|
+
readonly defaultOptions: {
|
|
45
|
+
readonly table: {
|
|
46
|
+
readonly coordinates: "local";
|
|
47
|
+
readonly promoteId: never;
|
|
48
|
+
readonly maxZoom: 14;
|
|
49
|
+
readonly indexMaxZoom: 5;
|
|
50
|
+
readonly maxPointsPerTile: 10000;
|
|
51
|
+
readonly tolerance: 3;
|
|
52
|
+
readonly extent: 4096;
|
|
53
|
+
readonly buffer: 64;
|
|
54
|
+
readonly generateId: undefined;
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
readonly testURL: (url: string) => boolean;
|
|
58
|
+
readonly createDataSource: (url: string | Blob | GeoJSONTable | Promise<GeoJSONTable>, options: TableTileSourceOptions) => TableVectorTileSource;
|
|
59
|
+
};
|
|
59
60
|
/**
|
|
60
61
|
* Dynamically vector tiles a table (the table needs a geometry column)
|
|
61
62
|
* - Tiles are generated when requested.
|
|
@@ -71,16 +72,15 @@ export type DynamicVectorTileSourceProps = VectorTileSourceProps & {
|
|
|
71
72
|
* @todo - generate binary output tables
|
|
72
73
|
* @todo - how does TileSourceLayer specify coordinates / decided which layer to render with
|
|
73
74
|
*/
|
|
74
|
-
export declare class
|
|
75
|
+
export declare class TableVectorTileSource extends DataSource<GeoJSONTable | Promise<GeoJSONTable>, TableTileSourceOptions> implements VectorTileSource {
|
|
75
76
|
/** Global stats for all DynamicVectorTileSources */
|
|
76
77
|
static stats: Stats;
|
|
77
|
-
/** Stats for this
|
|
78
|
+
/** Stats for this TableVectorTileSource */
|
|
78
79
|
stats: Stats;
|
|
79
80
|
/** MIME type of the tiles emitted by this tile source */
|
|
80
81
|
readonly mimeType = "application/vnd.mapbox-vector-tile";
|
|
81
82
|
readonly localCoordinates = true;
|
|
82
|
-
|
|
83
|
-
props: Required<DynamicVectorTileSourceProps['table']>;
|
|
83
|
+
readonly tableOptions: Required<Required<TableTileSourceOptions>['table']>;
|
|
84
84
|
schema: Schema | null;
|
|
85
85
|
/** Map of generated tiles, indexed by stringified tile coordinates */
|
|
86
86
|
tiles: Record<string, ProtoTile>;
|
|
@@ -94,7 +94,7 @@ export declare class DynamicVectorTileSource implements VectorTileSource<Dynamic
|
|
|
94
94
|
ready: Promise<void>;
|
|
95
95
|
/** Metadata for the tile source (generated TileJSON/tilestats */
|
|
96
96
|
metadata: Promise<unknown>;
|
|
97
|
-
constructor(table: GeoJSONTable | Promise<GeoJSONTable>,
|
|
97
|
+
constructor(table: GeoJSONTable | Promise<GeoJSONTable>, options: TableTileSourceOptions);
|
|
98
98
|
initializeTilesAsync(tablePromise: GeoJSONTable | Promise<GeoJSONTable>): Promise<void>;
|
|
99
99
|
getMetadata(): Promise<TileSourceMetadata & {
|
|
100
100
|
schema: Schema | null;
|
|
@@ -141,7 +141,7 @@ export declare class DynamicVectorTileSource implements VectorTileSource<Dynamic
|
|
|
141
141
|
* @param cz, cx, and cy are the coordinates of the target tile
|
|
142
142
|
*
|
|
143
143
|
* If no target tile is specified, splitting stops when we reach the maximum
|
|
144
|
-
* zoom or the number of points is low as specified in the
|
|
144
|
+
* zoom or the number of points is low as specified in the options.
|
|
145
145
|
*/
|
|
146
146
|
splitTile(features: ProtoFeature[], z: number, x: number, y: number, cz?: number, cx?: number, cy?: number): void;
|
|
147
147
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-tile-source.d.ts","sourceRoot":"","sources":["../src/table-tile-source.ts"],"names":[],"mappings":"AAKA,OAAO,
|
|
1
|
+
{"version":3,"file":"table-tile-source.d.ts","sourceRoot":"","sources":["../src/table-tile-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT AND ISC
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
// Based on https://github.com/mapbox/geojson-vt under compatible ISC license
|
|
5
|
-
import { log } from '@loaders.gl/loader-utils';
|
|
6
|
-
import { deduceTableSchema } from '@loaders.gl/schema';
|
|
5
|
+
import { DataSource, getRequiredOptions, log } from '@loaders.gl/loader-utils';
|
|
6
|
+
import { deduceTableSchema } from '@loaders.gl/schema-utils';
|
|
7
7
|
import { Stats, Stat } from '@probe.gl/stats';
|
|
8
8
|
import { createProtoTile } from "./lib/vector-tiler/proto-tile.js";
|
|
9
9
|
import { transformTile } from "./lib/vector-tiler/transform-tile.js"; // coordinate transformation
|
|
@@ -15,10 +15,14 @@ import { wrapFeatures } from "./lib/vector-tiler/features/wrap-features.js"; //
|
|
|
15
15
|
export const TableTileSource = {
|
|
16
16
|
name: 'TableTiler',
|
|
17
17
|
id: 'table-tiler',
|
|
18
|
+
module: 'mvt',
|
|
18
19
|
version: '0.0.0',
|
|
19
20
|
extensions: ['mvt'],
|
|
20
21
|
mimeTypes: ['application/octet-stream'],
|
|
21
|
-
|
|
22
|
+
type: 'table',
|
|
23
|
+
fromUrl: false,
|
|
24
|
+
fromBlob: false,
|
|
25
|
+
defaultOptions: {
|
|
22
26
|
table: {
|
|
23
27
|
coordinates: 'local',
|
|
24
28
|
promoteId: undefined,
|
|
@@ -31,25 +35,14 @@ export const TableTileSource = {
|
|
|
31
35
|
generateId: undefined
|
|
32
36
|
}
|
|
33
37
|
},
|
|
34
|
-
type: 'table',
|
|
35
38
|
testURL: (url) => url.endsWith('.geojson'),
|
|
36
39
|
createDataSource(url, options) {
|
|
37
40
|
const needsLoading = typeof url === 'string' || url instanceof Blob;
|
|
38
|
-
const loader = options?.
|
|
41
|
+
const loader = options?.core?.loaders?.[0];
|
|
39
42
|
const tablePromise = needsLoading ? loadTable(url, loader) : url;
|
|
40
|
-
return new
|
|
43
|
+
return new TableVectorTileSource(tablePromise, options);
|
|
41
44
|
}
|
|
42
|
-
// @ts-expect-error
|
|
43
45
|
};
|
|
44
|
-
async function loadTable(url, loader) {
|
|
45
|
-
if (typeof url === 'string') {
|
|
46
|
-
const response = await fetch(url);
|
|
47
|
-
const data = await response.arrayBuffer();
|
|
48
|
-
return (await loader.parse(data));
|
|
49
|
-
}
|
|
50
|
-
const data = await url.arrayBuffer();
|
|
51
|
-
return (await loader.parse(data)); // options.loaders, options.loadOptions)
|
|
52
|
-
}
|
|
53
46
|
/**
|
|
54
47
|
* Dynamically vector tiles a table (the table needs a geometry column)
|
|
55
48
|
* - Tiles are generated when requested.
|
|
@@ -65,13 +58,13 @@ async function loadTable(url, loader) {
|
|
|
65
58
|
* @todo - generate binary output tables
|
|
66
59
|
* @todo - how does TileSourceLayer specify coordinates / decided which layer to render with
|
|
67
60
|
*/
|
|
68
|
-
export class
|
|
61
|
+
export class TableVectorTileSource extends DataSource {
|
|
69
62
|
/** Global stats for all DynamicVectorTileSources */
|
|
70
63
|
static stats = new Stats({
|
|
71
64
|
id: 'table-tile-source-all',
|
|
72
65
|
stats: [new Stat('count', 'tiles'), new Stat('count', 'features')]
|
|
73
66
|
});
|
|
74
|
-
/** Stats for this
|
|
67
|
+
/** Stats for this TableVectorTileSource */
|
|
75
68
|
stats = new Stats({
|
|
76
69
|
id: 'table-tile-source',
|
|
77
70
|
stats: [new Stat('tiles', 'count'), new Stat('features', 'count')]
|
|
@@ -79,9 +72,7 @@ export class DynamicVectorTileSource {
|
|
|
79
72
|
/** MIME type of the tiles emitted by this tile source */
|
|
80
73
|
mimeType = 'application/vnd.mapbox-vector-tile';
|
|
81
74
|
localCoordinates = true;
|
|
82
|
-
|
|
83
|
-
// @ts-expect-error
|
|
84
|
-
props;
|
|
75
|
+
tableOptions;
|
|
85
76
|
/* Schema of the data */
|
|
86
77
|
schema = null;
|
|
87
78
|
/** Map of generated tiles, indexed by stringified tile coordinates */
|
|
@@ -92,9 +83,9 @@ export class DynamicVectorTileSource {
|
|
|
92
83
|
ready;
|
|
93
84
|
/** Metadata for the tile source (generated TileJSON/tilestats */
|
|
94
85
|
metadata;
|
|
95
|
-
constructor(table,
|
|
96
|
-
|
|
97
|
-
this.
|
|
86
|
+
constructor(table, options) {
|
|
87
|
+
super(table, options, TableTileSource.defaultOptions);
|
|
88
|
+
this.tableOptions = getRequiredOptions(this.options).table;
|
|
98
89
|
this.getTileData = this.getTileData.bind(this);
|
|
99
90
|
this.ready = this.initializeTilesAsync(table);
|
|
100
91
|
this.metadata = this.getMetadata();
|
|
@@ -106,7 +97,7 @@ export class DynamicVectorTileSource {
|
|
|
106
97
|
}
|
|
107
98
|
async getMetadata() {
|
|
108
99
|
await this.ready;
|
|
109
|
-
return { schema: this.schema, minZoom: 0, maxZoom: this.
|
|
100
|
+
return { schema: this.schema, minZoom: 0, maxZoom: this.tableOptions.maxZoom };
|
|
110
101
|
}
|
|
111
102
|
async getSchema() {
|
|
112
103
|
await this.ready;
|
|
@@ -143,9 +134,9 @@ export class DynamicVectorTileSource {
|
|
|
143
134
|
return null;
|
|
144
135
|
}
|
|
145
136
|
return convertTileToGeoJSON(protoTile, {
|
|
146
|
-
coordinates: this.
|
|
137
|
+
coordinates: this.tableOptions.coordinates,
|
|
147
138
|
tileIndex,
|
|
148
|
-
extent: this.
|
|
139
|
+
extent: this.tableOptions.extent
|
|
149
140
|
});
|
|
150
141
|
}
|
|
151
142
|
/**
|
|
@@ -153,30 +144,30 @@ export class DynamicVectorTileSource {
|
|
|
153
144
|
* @note the tiles stores all the features together with additional data
|
|
154
145
|
*/
|
|
155
146
|
createRootTiles(table) {
|
|
156
|
-
if (this.
|
|
147
|
+
if (this.tableOptions.maxZoom < 0 || this.tableOptions.maxZoom > 24) {
|
|
157
148
|
throw new Error('maxZoom should be in the 0-24 range');
|
|
158
149
|
}
|
|
159
|
-
if (this.
|
|
150
|
+
if (this.tableOptions.promoteId && this.tableOptions.generateId) {
|
|
160
151
|
throw new Error('promoteId and generateId cannot be used together.');
|
|
161
152
|
}
|
|
162
|
-
log.log(1, '
|
|
153
|
+
log.log(1, 'TableVectorTileSource creating root tiles', this.tableOptions)();
|
|
163
154
|
// projects and adds simplification info
|
|
164
155
|
log.time(1, 'preprocess table')();
|
|
165
|
-
let features = convertFeaturesToProtoFeature(table, this.
|
|
156
|
+
let features = convertFeaturesToProtoFeature(table, this.tableOptions);
|
|
166
157
|
log.timeEnd(1, 'preprocess table')();
|
|
167
158
|
// wraps features (ie extreme west and extreme east)
|
|
168
159
|
log.time(1, 'generate tiles')();
|
|
169
|
-
features = wrapFeatures(features, this.
|
|
160
|
+
features = wrapFeatures(features, this.tableOptions);
|
|
170
161
|
// start slicing from the top tile down
|
|
171
162
|
if (features.length === 0) {
|
|
172
|
-
log.log(1, '
|
|
163
|
+
log.log(1, 'TableVectorTileSource: no features generated')();
|
|
173
164
|
return;
|
|
174
165
|
}
|
|
175
166
|
this.splitTile(features, 0, 0, 0);
|
|
176
167
|
const rootTile = this.tiles[0];
|
|
177
168
|
log.log(1, `root tile features: ${rootTile.numFeatures}, points: ${rootTile.numPoints}`)();
|
|
178
169
|
log.timeEnd(1, 'generate tiles')();
|
|
179
|
-
log.log(1, `
|
|
170
|
+
log.log(1, `TableVectorTileSource: tiles generated: ${this.stats.get('total').count}`, this.stats)();
|
|
180
171
|
}
|
|
181
172
|
/**
|
|
182
173
|
* Return geojsonvt-style "half formed" vector tile
|
|
@@ -189,7 +180,7 @@ export class DynamicVectorTileSource {
|
|
|
189
180
|
// z = +z;
|
|
190
181
|
// x = +x;
|
|
191
182
|
// y = +y;
|
|
192
|
-
const { extent } = this.
|
|
183
|
+
const { extent } = this.tableOptions;
|
|
193
184
|
if (z < 0 || z > 24) {
|
|
194
185
|
return null;
|
|
195
186
|
}
|
|
@@ -226,7 +217,7 @@ export class DynamicVectorTileSource {
|
|
|
226
217
|
* @param cz, cx, and cy are the coordinates of the target tile
|
|
227
218
|
*
|
|
228
219
|
* If no target tile is specified, splitting stops when we reach the maximum
|
|
229
|
-
* zoom or the number of points is low as specified in the
|
|
220
|
+
* zoom or the number of points is low as specified in the options.
|
|
230
221
|
*/
|
|
231
222
|
// eslint-disable-next-line max-params, max-statements, complexity
|
|
232
223
|
splitTile(features, z, x, y, cz, cx, cy) {
|
|
@@ -242,16 +233,16 @@ export class DynamicVectorTileSource {
|
|
|
242
233
|
let tile = this.tiles[id];
|
|
243
234
|
if (!tile) {
|
|
244
235
|
log.time(2, 'tile creation')();
|
|
245
|
-
tile = this.tiles[id] = createProtoTile(features, z, x, y, this.
|
|
236
|
+
tile = this.tiles[id] = createProtoTile(features, z, x, y, this.tableOptions);
|
|
246
237
|
this.tileCoords.push({ z, x, y });
|
|
247
238
|
const key = `z${z}`;
|
|
248
239
|
let stat = this.stats.get(key, 'count');
|
|
249
240
|
stat.incrementCount();
|
|
250
241
|
stat = this.stats.get('total');
|
|
251
242
|
stat.incrementCount();
|
|
252
|
-
stat =
|
|
243
|
+
stat = TableVectorTileSource.stats.get(key, 'count');
|
|
253
244
|
stat.incrementCount();
|
|
254
|
-
stat =
|
|
245
|
+
stat = TableVectorTileSource.stats.get('total');
|
|
255
246
|
stat.incrementCount();
|
|
256
247
|
log.log(2, 'tile z%d-%d-%d (features: %d, points: %d, simplified: %d)', z, x, y, tile.numFeatures, tile.numPoints, tile.numSimplified)();
|
|
257
248
|
log.timeEnd(2, 'tile creation')();
|
|
@@ -262,12 +253,13 @@ export class DynamicVectorTileSource {
|
|
|
262
253
|
// if it's the first-pass tiling
|
|
263
254
|
if (cz === undefined) {
|
|
264
255
|
// stop tiling if we reached max zoom, or if the tile is too simple
|
|
265
|
-
if (z === this.
|
|
256
|
+
if (z === this.tableOptions.indexMaxZoom ||
|
|
257
|
+
tile.numPoints <= this.tableOptions.maxPointsPerTile) {
|
|
266
258
|
continue;
|
|
267
259
|
}
|
|
268
260
|
// if a drilldown to a specific tile
|
|
269
261
|
}
|
|
270
|
-
else if (z === this.
|
|
262
|
+
else if (z === this.tableOptions.maxZoom || z === cz) {
|
|
271
263
|
// stop tiling if we reached base zoom or our target tile zoom
|
|
272
264
|
continue;
|
|
273
265
|
}
|
|
@@ -285,7 +277,7 @@ export class DynamicVectorTileSource {
|
|
|
285
277
|
continue;
|
|
286
278
|
log.time(2, 'clipping tile')();
|
|
287
279
|
// values we'll use for clipping
|
|
288
|
-
const k1 = (0.5 * this.
|
|
280
|
+
const k1 = (0.5 * this.tableOptions.buffer) / this.tableOptions.extent;
|
|
289
281
|
const k2 = 0.5 - k1;
|
|
290
282
|
const k3 = 0.5 + k1;
|
|
291
283
|
const k4 = 1 + k1;
|
|
@@ -293,18 +285,18 @@ export class DynamicVectorTileSource {
|
|
|
293
285
|
let bl = null;
|
|
294
286
|
let tr = null;
|
|
295
287
|
let br = null;
|
|
296
|
-
let left = clipFeatures(features, z2, x - k1, x + k3, 0, tile.minX, tile.maxX, this.
|
|
297
|
-
let right = clipFeatures(features, z2, x + k2, x + k4, 0, tile.minX, tile.maxX, this.
|
|
288
|
+
let left = clipFeatures(features, z2, x - k1, x + k3, 0, tile.minX, tile.maxX, this.tableOptions);
|
|
289
|
+
let right = clipFeatures(features, z2, x + k2, x + k4, 0, tile.minX, tile.maxX, this.tableOptions);
|
|
298
290
|
// @ts-expect-error - unclear why this is needed?
|
|
299
291
|
features = null;
|
|
300
292
|
if (left) {
|
|
301
|
-
tl = clipFeatures(left, z2, y - k1, y + k3, 1, tile.minY, tile.maxY, this.
|
|
302
|
-
bl = clipFeatures(left, z2, y + k2, y + k4, 1, tile.minY, tile.maxY, this.
|
|
293
|
+
tl = clipFeatures(left, z2, y - k1, y + k3, 1, tile.minY, tile.maxY, this.tableOptions);
|
|
294
|
+
bl = clipFeatures(left, z2, y + k2, y + k4, 1, tile.minY, tile.maxY, this.tableOptions);
|
|
303
295
|
left = null;
|
|
304
296
|
}
|
|
305
297
|
if (right) {
|
|
306
|
-
tr = clipFeatures(right, z2, y - k1, y + k3, 1, tile.minY, tile.maxY, this.
|
|
307
|
-
br = clipFeatures(right, z2, y + k2, y + k4, 1, tile.minY, tile.maxY, this.
|
|
298
|
+
tr = clipFeatures(right, z2, y - k1, y + k3, 1, tile.minY, tile.maxY, this.tableOptions);
|
|
299
|
+
br = clipFeatures(right, z2, y + k2, y + k4, 1, tile.minY, tile.maxY, this.tableOptions);
|
|
308
300
|
right = null;
|
|
309
301
|
}
|
|
310
302
|
log.timeEnd(2, 'clipping tile')();
|
|
@@ -318,12 +310,21 @@ export class DynamicVectorTileSource {
|
|
|
318
310
|
function toID(z, x, y) {
|
|
319
311
|
return ((1 << z) * y + x) * 32 + z;
|
|
320
312
|
}
|
|
313
|
+
async function loadTable(url, loader) {
|
|
314
|
+
if (typeof url === 'string') {
|
|
315
|
+
const response = await fetch(url);
|
|
316
|
+
const data = await response.arrayBuffer();
|
|
317
|
+
return (await loader.parse(data));
|
|
318
|
+
}
|
|
319
|
+
const data = await url.arrayBuffer();
|
|
320
|
+
return (await loader.parse(data)); // options.loaders, options.loadOptions)
|
|
321
|
+
}
|
|
321
322
|
/*
|
|
322
323
|
|
|
323
324
|
// eslint-disable-next-line max-statements, complexity
|
|
324
325
|
function convertToGeoJSONTable(
|
|
325
326
|
vtTile: ProtoTile,
|
|
326
|
-
|
|
327
|
+
options: {
|
|
327
328
|
coordinates: 'local' | 'wgs84' | 'EPSG:4326';
|
|
328
329
|
tileIndex: {x: number; y: number; z: number};
|
|
329
330
|
extent: number;
|
|
@@ -378,18 +379,18 @@ function convertToGeoJSONTable(
|
|
|
378
379
|
continue;
|
|
379
380
|
}
|
|
380
381
|
|
|
381
|
-
switch (
|
|
382
|
+
switch (options.coordinates) {
|
|
382
383
|
case 'EPSG:4326':
|
|
383
384
|
case 'wgs84':
|
|
384
|
-
projectToLngLat(coordinates,
|
|
385
|
+
projectToLngLat(coordinates, options.tileIndex, options.extent);
|
|
385
386
|
break;
|
|
386
387
|
|
|
387
388
|
case 'local':
|
|
388
|
-
convertToLocalCoordinates(coordinates,
|
|
389
|
+
convertToLocalCoordinates(coordinates, options.extent);
|
|
389
390
|
break;
|
|
390
391
|
|
|
391
392
|
default:
|
|
392
|
-
throw new Error(`Unsupported CRS ${
|
|
393
|
+
throw new Error(`Unsupported CRS ${options.coordinates}`);
|
|
393
394
|
}
|
|
394
395
|
|
|
395
396
|
const feature: Feature = {
|
package/dist/tilejson-loader.js
CHANGED
|
@@ -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.
|
|
7
|
+
const VERSION = typeof "4.4.0-alpha.0" !== 'undefined' ? "4.4.0-alpha.0" : '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.
|
|
4
|
+
"version": "4.4.0-alpha.1",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"publishConfig": {
|
|
@@ -44,10 +44,10 @@
|
|
|
44
44
|
"build-worker": "esbuild src/workers/mvt-worker.ts --bundle --outfile=dist/mvt-worker.js --define:__VERSION__=\\\"$npm_package_version\\\""
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@loaders.gl/gis": "4.
|
|
48
|
-
"@loaders.gl/images": "4.
|
|
49
|
-
"@loaders.gl/loader-utils": "4.
|
|
50
|
-
"@loaders.gl/schema": "4.
|
|
47
|
+
"@loaders.gl/gis": "4.4.0-alpha.1",
|
|
48
|
+
"@loaders.gl/images": "4.4.0-alpha.1",
|
|
49
|
+
"@loaders.gl/loader-utils": "4.4.0-alpha.1",
|
|
50
|
+
"@loaders.gl/schema": "4.4.0-alpha.1",
|
|
51
51
|
"@math.gl/polygon": "^4.1.0",
|
|
52
52
|
"@probe.gl/stats": "^4.0.0",
|
|
53
53
|
"pbf": "^3.2.1"
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"@types/pbf": "^3.0.2"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
|
-
"@loaders.gl/core": "
|
|
59
|
+
"@loaders.gl/core": "4.4.0-alpha.0"
|
|
60
60
|
},
|
|
61
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "f1732de45907bd500bf4eedb4803beca8bf4bfb0"
|
|
62
62
|
}
|
package/src/index.ts
CHANGED
|
@@ -16,9 +16,9 @@ export type {MVTLoaderOptions} from './mvt-loader';
|
|
|
16
16
|
// MVTSource
|
|
17
17
|
|
|
18
18
|
export {MVTSource} from './mvt-source';
|
|
19
|
-
export type {MVTTileSource,
|
|
19
|
+
export type {MVTTileSource, MVTSourceOptions} from './mvt-source';
|
|
20
20
|
|
|
21
21
|
// TableTileSource (dynamically tiles a table)
|
|
22
22
|
|
|
23
|
+
export type {TableTileSourceOptions, TableVectorTileSource} from './table-tile-source';
|
|
23
24
|
export {TableTileSource} from './table-tile-source';
|
|
24
|
-
export type {DynamicVectorTileSource, DynamicVectorTileSourceProps} from './table-tile-source';
|
package/src/lib/parse-mvt.ts
CHANGED
|
@@ -2,14 +2,8 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import type {
|
|
6
|
-
|
|
7
|
-
Feature,
|
|
8
|
-
GeojsonGeometryInfo,
|
|
9
|
-
GeoJSONTable,
|
|
10
|
-
BinaryFeatureCollection
|
|
11
|
-
} from '@loaders.gl/schema';
|
|
12
|
-
import {flatGeojsonToBinary} from '@loaders.gl/gis';
|
|
5
|
+
import type {FlatFeature, Feature, GeoJSONTable, BinaryFeatureCollection} from '@loaders.gl/schema';
|
|
6
|
+
import {flatGeojsonToBinary, GeojsonGeometryInfo} from '@loaders.gl/gis';
|
|
13
7
|
import {log} from '@loaders.gl/loader-utils';
|
|
14
8
|
import Protobuf from 'pbf';
|
|
15
9
|
|