@loaders.gl/pmtiles 4.0.4 → 4.1.0-alpha.10
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 +14 -9
- package/dist/index.cjs +8 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/blob-source.d.ts.map +1 -1
- package/dist/lib/blob-source.js.map +1 -1
- package/dist/lib/parse-pmtiles.d.ts +3 -1
- package/dist/lib/parse-pmtiles.d.ts.map +1 -1
- package/dist/lib/parse-pmtiles.js +2 -2
- package/dist/lib/parse-pmtiles.js.map +1 -1
- package/dist/pmtiles-source.d.ts +3 -0
- package/dist/pmtiles-source.d.ts.map +1 -1
- package/dist/pmtiles-source.js +3 -1
- package/dist/pmtiles-source.js.map +1 -1
- package/package.json +18 -13
- package/src/index.ts +2 -1
- package/src/lib/blob-source.ts +2 -1
- package/src/lib/parse-pmtiles.ts +7 -3
- package/src/pmtiles-source.ts +11 -4
package/dist/dist.dev.js
CHANGED
|
@@ -907,7 +907,7 @@ var __exports__ = (() => {
|
|
|
907
907
|
}
|
|
908
908
|
|
|
909
909
|
// ../images/src/lib/utils/version.ts
|
|
910
|
-
var VERSION =
|
|
910
|
+
var VERSION = true ? "4.1.0-alpha.10" : "latest";
|
|
911
911
|
|
|
912
912
|
// ../images/src/lib/category-api/image-type.ts
|
|
913
913
|
var parseImageNode = globalThis.loaders?.parseImageNode;
|
|
@@ -2811,7 +2811,7 @@ var __exports__ = (() => {
|
|
|
2811
2811
|
}
|
|
2812
2812
|
|
|
2813
2813
|
// ../mvt/src/mvt-loader.ts
|
|
2814
|
-
var VERSION2 =
|
|
2814
|
+
var VERSION2 = true ? "4.1.0-alpha.10" : "latest";
|
|
2815
2815
|
var MVTWorkerLoader = {
|
|
2816
2816
|
name: "Mapbox Vector Tile",
|
|
2817
2817
|
id: "mvt",
|
|
@@ -3026,8 +3026,11 @@ var __exports__ = (() => {
|
|
|
3026
3026
|
if (typeof attribute.count === "number") {
|
|
3027
3027
|
field.uniqueValueCount = attribute.count;
|
|
3028
3028
|
}
|
|
3029
|
-
if (
|
|
3030
|
-
field.values = attribute.values
|
|
3029
|
+
if (attribute.values) {
|
|
3030
|
+
field.values = attribute.values;
|
|
3031
|
+
}
|
|
3032
|
+
if (field.values && typeof options.maxValues === "number") {
|
|
3033
|
+
field.values = field.values?.slice(0, options.maxValues);
|
|
3031
3034
|
}
|
|
3032
3035
|
return field;
|
|
3033
3036
|
}
|
|
@@ -3041,7 +3044,7 @@ var __exports__ = (() => {
|
|
|
3041
3044
|
}
|
|
3042
3045
|
|
|
3043
3046
|
// ../mvt/src/tilejson-loader.ts
|
|
3044
|
-
var VERSION3 =
|
|
3047
|
+
var VERSION3 = true ? "4.1.0-alpha.10" : "latest";
|
|
3045
3048
|
var TileJSONLoader = {
|
|
3046
3049
|
name: "TileJSON",
|
|
3047
3050
|
id: "tilejson",
|
|
@@ -3053,7 +3056,7 @@ var __exports__ = (() => {
|
|
|
3053
3056
|
text: true,
|
|
3054
3057
|
options: {
|
|
3055
3058
|
tilejson: {
|
|
3056
|
-
maxValues:
|
|
3059
|
+
maxValues: void 0
|
|
3057
3060
|
}
|
|
3058
3061
|
},
|
|
3059
3062
|
parse: async (arrayBuffer, options) => {
|
|
@@ -4612,12 +4615,12 @@ var __exports__ = (() => {
|
|
|
4612
4615
|
var {
|
|
4613
4616
|
TileType: TileType2
|
|
4614
4617
|
} = dist_exports;
|
|
4615
|
-
function parsePMTilesHeader(header, pmtilesMetadata, options) {
|
|
4618
|
+
function parsePMTilesHeader(header, pmtilesMetadata, options, loadOptions) {
|
|
4616
4619
|
let tilejson = null;
|
|
4617
4620
|
if (pmtilesMetadata) {
|
|
4618
4621
|
try {
|
|
4619
4622
|
const string = JSON.stringify(pmtilesMetadata);
|
|
4620
|
-
tilejson = TileJSONLoader.parseTextSync?.(string) || null;
|
|
4623
|
+
tilejson = TileJSONLoader.parseTextSync?.(string, loadOptions) || null;
|
|
4621
4624
|
} catch (error) {
|
|
4622
4625
|
console.warn("PMTiles metadata could not be interpreted as TileJSON", error);
|
|
4623
4626
|
}
|
|
@@ -4704,7 +4707,9 @@ var __exports__ = (() => {
|
|
|
4704
4707
|
async getMetadata() {
|
|
4705
4708
|
const pmtilesHeader = await this.pmtiles.getHeader();
|
|
4706
4709
|
const pmtilesMetadata = await this.pmtiles.getMetadata();
|
|
4707
|
-
const metadata = parsePMTilesHeader(pmtilesHeader, pmtilesMetadata
|
|
4710
|
+
const metadata = parsePMTilesHeader(pmtilesHeader, pmtilesMetadata, {
|
|
4711
|
+
includeFormatHeader: false
|
|
4712
|
+
}, this.loadOptions);
|
|
4708
4713
|
if (this.props.attributions) {
|
|
4709
4714
|
metadata.attributions = [...this.props.attributions, ...metadata.attributions || []];
|
|
4710
4715
|
}
|
package/dist/index.cjs
CHANGED
|
@@ -44,13 +44,13 @@ var pmtiles2 = __toESM(require("pmtiles"), 1);
|
|
|
44
44
|
var import_mvt = require("@loaders.gl/mvt");
|
|
45
45
|
var pmtiles = __toESM(require("pmtiles"), 1);
|
|
46
46
|
var { TileType } = pmtiles;
|
|
47
|
-
function parsePMTilesHeader(header, pmtilesMetadata, options) {
|
|
47
|
+
function parsePMTilesHeader(header, pmtilesMetadata, options, loadOptions) {
|
|
48
48
|
var _a, _b;
|
|
49
49
|
let tilejson = null;
|
|
50
50
|
if (pmtilesMetadata) {
|
|
51
51
|
try {
|
|
52
52
|
const string = JSON.stringify(pmtilesMetadata);
|
|
53
|
-
tilejson = ((_b = (_a = import_mvt.TileJSONLoader).parseTextSync) == null ? void 0 : _b.call(_a, string)) || null;
|
|
53
|
+
tilejson = ((_b = (_a = import_mvt.TileJSONLoader).parseTextSync) == null ? void 0 : _b.call(_a, string, loadOptions)) || null;
|
|
54
54
|
} catch (error) {
|
|
55
55
|
console.warn("PMTiles metadata could not be interpreted as TileJSON", error);
|
|
56
56
|
}
|
|
@@ -142,7 +142,12 @@ var PMTilesSource = class extends import_loader_utils.DataSource {
|
|
|
142
142
|
async getMetadata() {
|
|
143
143
|
const pmtilesHeader = await this.pmtiles.getHeader();
|
|
144
144
|
const pmtilesMetadata = await this.pmtiles.getMetadata();
|
|
145
|
-
const metadata = parsePMTilesHeader(
|
|
145
|
+
const metadata = parsePMTilesHeader(
|
|
146
|
+
pmtilesHeader,
|
|
147
|
+
pmtilesMetadata,
|
|
148
|
+
{ includeFormatHeader: false },
|
|
149
|
+
this.loadOptions
|
|
150
|
+
);
|
|
146
151
|
if (this.props.attributions) {
|
|
147
152
|
metadata.attributions = [...this.props.attributions, ...metadata.attributions || []];
|
|
148
153
|
}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,YAAY,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["PMTilesSource"],"sources":["../src/index.ts"],"sourcesContent":["// loaders.gl
|
|
1
|
+
{"version":3,"file":"index.js","names":["PMTilesSource"],"sources":["../src/index.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport type {PMTilesMetadata} from './lib/parse-pmtiles';\nexport type {PMTilesSourceProps} from './pmtiles-source';\nexport {PMTilesSource} from './pmtiles-source';\n"],"mappings":"SAMQA,aAAa"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blob-source.d.ts","sourceRoot":"","sources":["../../src/lib/blob-source.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"blob-source.d.ts","sourceRoot":"","sources":["../../src/lib/blob-source.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC;;;;GAIG;AACH,qBAAa,UAAW,YAAW,OAAO,CAAC,MAAM;IAC/C,IAAI,EAAE,IAAI,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;gBAEA,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM;IAMnC,MAAM;IAKA,QAAQ,CACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;CAUlC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blob-source.js","names":["BlobSource","constructor","blob","key","getKey","url","getBytes","offset","length","signal","slice","data","arrayBuffer"],"sources":["../../src/lib/blob-source.ts"],"sourcesContent":["// loaders.gl
|
|
1
|
+
{"version":3,"file":"blob-source.js","names":["BlobSource","constructor","blob","key","getKey","url","getBytes","offset","length","signal","slice","data","arrayBuffer"],"sources":["../../src/lib/blob-source.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport * as pmtiles from 'pmtiles';\n\n/**\n * A PMTiles library compatible source that reads from blobs\n * @deprecated TODO - reimplement as ReadableFileSource\n * Use loaders.gl HTTP range requests instead\n */\nexport class BlobSource implements pmtiles.Source {\n blob: Blob;\n key: string;\n\n constructor(blob: Blob, key: string) {\n this.blob = blob;\n this.key = key;\n }\n\n // TODO - how is this used?\n getKey() {\n // @ts-expect-error url is only defined on File subclass\n return this.blob.url || '';\n }\n\n async getBytes(\n offset: number,\n length: number,\n signal?: AbortSignal\n ): Promise<pmtiles.RangeResponse> {\n const slice = this.blob.slice(offset, offset + length);\n const data = await slice.arrayBuffer();\n return {\n data\n // etag: response.headers.get('ETag') || undefined,\n // cacheControl: response.headers.get('Cache-Control') || undefined,\n // expires: response.headers.get('Expires') || undefined\n };\n }\n}\n"],"mappings":"AAWA,OAAO,MAAMA,UAAU,CAA2B;EAIhDC,WAAWA,CAACC,IAAU,EAAEC,GAAW,EAAE;IAAA,KAHrCD,IAAI;IAAA,KACJC,GAAG;IAGD,IAAI,CAACD,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,GAAG,GAAGA,GAAG;EAChB;EAGAC,MAAMA,CAAA,EAAG;IAEP,OAAO,IAAI,CAACF,IAAI,CAACG,GAAG,IAAI,EAAE;EAC5B;EAEA,MAAMC,QAAQA,CACZC,MAAc,EACdC,MAAc,EACdC,MAAoB,EACY;IAChC,MAAMC,KAAK,GAAG,IAAI,CAACR,IAAI,CAACQ,KAAK,CAACH,MAAM,EAAEA,MAAM,GAAGC,MAAM,CAAC;IACtD,MAAMG,IAAI,GAAG,MAAMD,KAAK,CAACE,WAAW,CAAC,CAAC;IACtC,OAAO;MACLD;IAIF,CAAC;EACH;AACF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { LoaderOptions } from '@loaders.gl/loader-utils';
|
|
1
2
|
import type { TileJSON } from '@loaders.gl/mvt';
|
|
2
3
|
import * as pmtiles from 'pmtiles';
|
|
3
4
|
/** Metadata describing a PMTiles file */
|
|
@@ -35,9 +36,10 @@ export type PMTilesMetadata = {
|
|
|
35
36
|
* @param header
|
|
36
37
|
* @param tilejsonMetadata
|
|
37
38
|
* @param options
|
|
39
|
+
* @param loadOptions
|
|
38
40
|
* @returns
|
|
39
41
|
*/
|
|
40
42
|
export declare function parsePMTilesHeader(header: pmtiles.Header, pmtilesMetadata: Record<string, unknown> | null, options?: {
|
|
41
43
|
includeFormatHeader?: boolean;
|
|
42
|
-
}): PMTilesMetadata;
|
|
44
|
+
}, loadOptions?: LoaderOptions): PMTilesMetadata;
|
|
43
45
|
//# sourceMappingURL=parse-pmtiles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-pmtiles.d.ts","sourceRoot":"","sources":["../../src/lib/parse-pmtiles.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parse-pmtiles.d.ts","sourceRoot":"","sources":["../../src/lib/parse-pmtiles.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AAG9C,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAGnC,yCAAyC;AACzC,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,SAAS,CAAC;IAClB,sDAAsD;IACtD,aAAa,EAAE,MAAM,CAAC;IAEtB,4FAA4F;IAC5F,YAAY,EACR,oCAAoC,GACpC,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,0BAA0B,CAAC;IAE/B,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,WAAW,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;IACxE,uCAAuC;IACvC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,qDAAqD;IACrD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,iDAAiD;IACjD,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;IAC9B,2GAA2G;IAC3G,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EAC/C,OAAO,CAAC,EAAE;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAC,EACzC,WAAW,CAAC,EAAE,aAAa,GAC1B,eAAe,CAqDjB"}
|
|
@@ -3,14 +3,14 @@ import * as pmtiles from 'pmtiles';
|
|
|
3
3
|
const {
|
|
4
4
|
TileType
|
|
5
5
|
} = pmtiles;
|
|
6
|
-
export function parsePMTilesHeader(header, pmtilesMetadata, options) {
|
|
6
|
+
export function parsePMTilesHeader(header, pmtilesMetadata, options, loadOptions) {
|
|
7
7
|
var _tilejson, _tilejson2;
|
|
8
8
|
let tilejson = null;
|
|
9
9
|
if (pmtilesMetadata) {
|
|
10
10
|
try {
|
|
11
11
|
var _TileJSONLoader$parse;
|
|
12
12
|
const string = JSON.stringify(pmtilesMetadata);
|
|
13
|
-
tilejson = ((_TileJSONLoader$parse = TileJSONLoader.parseTextSync) === null || _TileJSONLoader$parse === void 0 ? void 0 : _TileJSONLoader$parse.call(TileJSONLoader, string)) || null;
|
|
13
|
+
tilejson = ((_TileJSONLoader$parse = TileJSONLoader.parseTextSync) === null || _TileJSONLoader$parse === void 0 ? void 0 : _TileJSONLoader$parse.call(TileJSONLoader, string, loadOptions)) || null;
|
|
14
14
|
} catch (error) {
|
|
15
15
|
console.warn('PMTiles metadata could not be interpreted as TileJSON', error);
|
|
16
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-pmtiles.js","names":["TileJSONLoader","pmtiles","TileType","parsePMTilesHeader","header","pmtilesMetadata","options","_tilejson","_tilejson2","tilejson","_TileJSONLoader$parse","string","JSON","stringify","parseTextSync","call","error","console","warn","partialMetadata","name","htmlAttribution","attributions","metadata","format","formatVersion","specVersion","tileMIMEType","decodeTileType","tileType","minZoom","maxZoom","boundingBox","minLon","minLat","maxLon","maxLat","center","centerLon","centerLat","centerZoom","etag","includeFormatHeader","formatHeader","formatMetadata","Mvt","Png","Jpeg","Webp","Avif"],"sources":["../../src/lib/parse-pmtiles.ts"],"sourcesContent":["// loaders.gl
|
|
1
|
+
{"version":3,"file":"parse-pmtiles.js","names":["TileJSONLoader","pmtiles","TileType","parsePMTilesHeader","header","pmtilesMetadata","options","loadOptions","_tilejson","_tilejson2","tilejson","_TileJSONLoader$parse","string","JSON","stringify","parseTextSync","call","error","console","warn","partialMetadata","name","htmlAttribution","attributions","metadata","format","formatVersion","specVersion","tileMIMEType","decodeTileType","tileType","minZoom","maxZoom","boundingBox","minLon","minLat","maxLon","maxLat","center","centerLon","centerLat","centerZoom","etag","includeFormatHeader","formatHeader","formatMetadata","Mvt","Png","Jpeg","Webp","Avif"],"sources":["../../src/lib/parse-pmtiles.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {TileJSON} from '@loaders.gl/mvt';\nimport {TileJSONLoader} from '@loaders.gl/mvt';\n// import {Source, PMTiles, Header, TileType} from 'pmtiles';\nimport * as pmtiles from 'pmtiles';\nconst {TileType} = pmtiles;\n\n/** Metadata describing a PMTiles file */\nexport type PMTilesMetadata = {\n format: 'pmtiles';\n /** Version of pm tiles format used by this tileset */\n formatVersion: number;\n\n /** MIME type for tile contents. Unknown tile types will return 'application/octet-stream */\n tileMIMEType:\n | 'application/vnd.mapbox-vector-tile'\n | 'image/png'\n | 'image/jpeg'\n | 'image/webp'\n | 'image/avif'\n | 'application/octet-stream';\n\n /** Name of the tileset (extracted from JSON metadata if available) */\n name?: string;\n /** Attribution string (extracted from JSON metadata if available) */\n attributions?: string[];\n\n /** Minimal zoom level of tiles in this tileset */\n minZoom: number;\n /** Maximal zoom level of tiles in this tileset */\n maxZoom: number;\n /** Bounding box of tiles in this tileset `[[w, s], [e, n]]` */\n boundingBox: [min: [x: number, y: number], max: [x: number, y: number]];\n /** Center long, lat of this tileset */\n center: [number, number];\n /** Center zoom level of this tileset */\n centerZoom: number;\n /** Cache tag */\n etag?: string;\n\n /** Parsed TileJSON/tilestats metadata, if present */\n tilejson?: TileJSON;\n\n /** @deprecated PMTiles format specific header */\n formatHeader?: pmtiles.Header;\n /** @deprecated Unparsed metadata (Assumption metadata generated by e.g. tippecanoe, typically TileJSON) */\n formatMetadata?: Record<string, unknown>;\n};\n\n/**\n * Parse PMTiles metdata from a PMTiles file\n * @param header\n * @param tilejsonMetadata\n * @param options\n * @param loadOptions\n * @returns\n */\nexport function parsePMTilesHeader(\n header: pmtiles.Header,\n pmtilesMetadata: Record<string, unknown> | null,\n options?: {includeFormatHeader?: boolean},\n loadOptions?: LoaderOptions\n): PMTilesMetadata {\n // Ironically, to use the TileJSON loader we need to stringify the metadata again.\n // This is the price of integrating with the existing pmtiles library.\n // TODO - provide a non-standard TileJSONLoader parsers that accepts a JSON object?\n let tilejson: TileJSON | null = null;\n if (pmtilesMetadata) {\n try {\n const string = JSON.stringify(pmtilesMetadata);\n tilejson = TileJSONLoader.parseTextSync?.(string, loadOptions) || null;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn('PMTiles metadata could not be interpreted as TileJSON', error);\n }\n }\n\n const partialMetadata: Partial<PMTilesMetadata> = {};\n\n if (typeof tilejson?.name === 'string') {\n partialMetadata.name = tilejson.name;\n }\n\n if (typeof tilejson?.htmlAttribution === 'string') {\n partialMetadata.attributions = [tilejson.htmlAttribution];\n }\n\n const metadata: PMTilesMetadata = {\n ...partialMetadata,\n format: 'pmtiles',\n formatVersion: header.specVersion,\n attributions: [],\n tileMIMEType: decodeTileType(header.tileType),\n minZoom: header.minZoom,\n maxZoom: header.maxZoom,\n boundingBox: [\n [header.minLon, header.minLat],\n [header.maxLon, header.maxLat]\n ],\n center: [header.centerLon, header.centerLat],\n centerZoom: header.centerZoom,\n etag: header.etag\n };\n\n if (tilejson) {\n metadata.tilejson = tilejson;\n }\n\n // Application can optionally include the raw header and metadata.\n if (options?.includeFormatHeader) {\n metadata.formatHeader = header;\n metadata.formatMetadata = metadata;\n }\n\n return metadata;\n}\n\n/** Extract a MIME type for tiles from vector tile header */\nfunction decodeTileType(\n tileType: pmtiles.TileType\n):\n | 'application/vnd.mapbox-vector-tile'\n | 'image/png'\n | 'image/jpeg'\n | 'image/webp'\n | 'image/avif'\n | 'application/octet-stream' {\n switch (tileType) {\n case TileType.Mvt:\n return 'application/vnd.mapbox-vector-tile';\n case TileType.Png:\n return 'image/png';\n case TileType.Jpeg:\n return 'image/jpeg';\n case TileType.Webp:\n return 'image/webp';\n case TileType.Avif:\n return 'image/avif';\n default:\n return 'application/octet-stream';\n }\n}\n"],"mappings":"AAMA,SAAQA,cAAc,QAAO,iBAAiB;AAE9C,OAAO,KAAKC,OAAO,MAAM,SAAS;AAClC,MAAM;EAACC;AAAQ,CAAC,GAAGD,OAAO;AAoD1B,OAAO,SAASE,kBAAkBA,CAChCC,MAAsB,EACtBC,eAA+C,EAC/CC,OAAyC,EACzCC,WAA2B,EACV;EAAA,IAAAC,SAAA,EAAAC,UAAA;EAIjB,IAAIC,QAAyB,GAAG,IAAI;EACpC,IAAIL,eAAe,EAAE;IACnB,IAAI;MAAA,IAAAM,qBAAA;MACF,MAAMC,MAAM,GAAGC,IAAI,CAACC,SAAS,CAACT,eAAe,CAAC;MAC9CK,QAAQ,GAAG,EAAAC,qBAAA,GAAAX,cAAc,CAACe,aAAa,cAAAJ,qBAAA,uBAA5BA,qBAAA,CAAAK,IAAA,CAAAhB,cAAc,EAAiBY,MAAM,EAAEL,WAAW,CAAC,KAAI,IAAI;IACxE,CAAC,CAAC,OAAOU,KAAK,EAAE;MAEdC,OAAO,CAACC,IAAI,CAAC,uDAAuD,EAAEF,KAAK,CAAC;IAC9E;EACF;EAEA,MAAMG,eAAyC,GAAG,CAAC,CAAC;EAEpD,IAAI,SAAAZ,SAAA,GAAOE,QAAQ,cAAAF,SAAA,uBAARA,SAAA,CAAUa,IAAI,MAAK,QAAQ,EAAE;IACtCD,eAAe,CAACC,IAAI,GAAGX,QAAQ,CAACW,IAAI;EACtC;EAEA,IAAI,SAAAZ,UAAA,GAAOC,QAAQ,cAAAD,UAAA,uBAARA,UAAA,CAAUa,eAAe,MAAK,QAAQ,EAAE;IACjDF,eAAe,CAACG,YAAY,GAAG,CAACb,QAAQ,CAACY,eAAe,CAAC;EAC3D;EAEA,MAAME,QAAyB,GAAG;IAChC,GAAGJ,eAAe;IAClBK,MAAM,EAAE,SAAS;IACjBC,aAAa,EAAEtB,MAAM,CAACuB,WAAW;IACjCJ,YAAY,EAAE,EAAE;IAChBK,YAAY,EAAEC,cAAc,CAACzB,MAAM,CAAC0B,QAAQ,CAAC;IAC7CC,OAAO,EAAE3B,MAAM,CAAC2B,OAAO;IACvBC,OAAO,EAAE5B,MAAM,CAAC4B,OAAO;IACvBC,WAAW,EAAE,CACX,CAAC7B,MAAM,CAAC8B,MAAM,EAAE9B,MAAM,CAAC+B,MAAM,CAAC,EAC9B,CAAC/B,MAAM,CAACgC,MAAM,EAAEhC,MAAM,CAACiC,MAAM,CAAC,CAC/B;IACDC,MAAM,EAAE,CAAClC,MAAM,CAACmC,SAAS,EAAEnC,MAAM,CAACoC,SAAS,CAAC;IAC5CC,UAAU,EAAErC,MAAM,CAACqC,UAAU;IAC7BC,IAAI,EAAEtC,MAAM,CAACsC;EACf,CAAC;EAED,IAAIhC,QAAQ,EAAE;IACZc,QAAQ,CAACd,QAAQ,GAAGA,QAAQ;EAC9B;EAGA,IAAIJ,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEqC,mBAAmB,EAAE;IAChCnB,QAAQ,CAACoB,YAAY,GAAGxC,MAAM;IAC9BoB,QAAQ,CAACqB,cAAc,GAAGrB,QAAQ;EACpC;EAEA,OAAOA,QAAQ;AACjB;AAGA,SAASK,cAAcA,CACrBC,QAA0B,EAOG;EAC7B,QAAQA,QAAQ;IACd,KAAK5B,QAAQ,CAAC4C,GAAG;MACf,OAAO,oCAAoC;IAC7C,KAAK5C,QAAQ,CAAC6C,GAAG;MACf,OAAO,WAAW;IACpB,KAAK7C,QAAQ,CAAC8C,IAAI;MAChB,OAAO,YAAY;IACrB,KAAK9C,QAAQ,CAAC+C,IAAI;MAChB,OAAO,YAAY;IACrB,KAAK/C,QAAQ,CAACgD,IAAI;MAChB,OAAO,YAAY;IACrB;MACE,OAAO,0BAA0B;EACrC;AACF"}
|
package/dist/pmtiles-source.d.ts
CHANGED
|
@@ -2,6 +2,8 @@ import type { TileLoadParameters, GetTileParameters } from '@loaders.gl/loader-u
|
|
|
2
2
|
import type { ImageType, DataSourceProps } from '@loaders.gl/loader-utils';
|
|
3
3
|
import type { ImageTileSource, VectorTileSource } from '@loaders.gl/loader-utils';
|
|
4
4
|
import { DataSource } from '@loaders.gl/loader-utils';
|
|
5
|
+
import { ImageLoaderOptions } from '@loaders.gl/images';
|
|
6
|
+
import { MVTLoaderOptions, TileJSONLoaderOptions } from '@loaders.gl/mvt';
|
|
5
7
|
import * as pmtiles from 'pmtiles';
|
|
6
8
|
import type { PMTilesMetadata } from './lib/parse-pmtiles';
|
|
7
9
|
export type Service = {
|
|
@@ -22,6 +24,7 @@ export declare const PMTilesService: ServiceWithSource<PMTilesSource, PMTilesSou
|
|
|
22
24
|
export type PMTilesSourceProps = DataSourceProps & {
|
|
23
25
|
url: string | Blob;
|
|
24
26
|
attributions?: string[];
|
|
27
|
+
loadOptions?: TileJSONLoaderOptions & MVTLoaderOptions & ImageLoaderOptions;
|
|
25
28
|
};
|
|
26
29
|
/**
|
|
27
30
|
* A PMTiles data source
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pmtiles-source.d.ts","sourceRoot":"","sources":["../src/pmtiles-source.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pmtiles-source.d.ts","sourceRoot":"","sources":["../src/pmtiles-source.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,kBAAkB,EAAE,iBAAiB,EAAC,MAAM,0BAA0B,CAAC;AACpF,OAAO,KAAK,EAAC,SAAS,EAAE,eAAe,EAAC,MAAM,0BAA0B,CAAC;AACzE,OAAO,KAAK,EAAC,eAAe,EAAE,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAC,UAAU,EAAc,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAc,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAY,gBAAgB,EAAE,qBAAqB,EAAC,MAAM,iBAAiB,CAAC;AAEnF,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAGnC,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAC;AAMzD,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,OAAO,EAAE,YAAY,IAAI,OAAO,GAAG;IAC/D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC;CAChD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,iBAAiB,CAAC,aAAa,EAAE,kBAAkB,CAW/E,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG;IACjD,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,qBAAqB,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;CAC7E,CAAC;AAEF;;;GAGG;AACH,qBAAa,aAAc,SAAQ,UAAW,YAAW,eAAe,EAAE,gBAAgB;IACxF,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC/B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;gBAEvB,KAAK,EAAE,kBAAkB;IAW/B,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC;IAoBvC,OAAO,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAcnE,WAAW,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAapE,YAAY,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAOtE,aAAa,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;CAc5E"}
|
package/dist/pmtiles-source.js
CHANGED
|
@@ -38,7 +38,9 @@ export class PMTilesSource extends DataSource {
|
|
|
38
38
|
async getMetadata() {
|
|
39
39
|
const pmtilesHeader = await this.pmtiles.getHeader();
|
|
40
40
|
const pmtilesMetadata = await this.pmtiles.getMetadata();
|
|
41
|
-
const metadata = parsePMTilesHeader(pmtilesHeader, pmtilesMetadata
|
|
41
|
+
const metadata = parsePMTilesHeader(pmtilesHeader, pmtilesMetadata, {
|
|
42
|
+
includeFormatHeader: false
|
|
43
|
+
}, this.loadOptions);
|
|
42
44
|
if (this.props.attributions) {
|
|
43
45
|
metadata.attributions = [...this.props.attributions, ...(metadata.attributions || [])];
|
|
44
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pmtiles-source.js","names":["DataSource","resolvePath","ImageLoader","MVTLoader","pmtiles","PMTiles","parsePMTilesHeader","BlobSource","VERSION","PMTilesService","name","id","module","version","extensions","mimeTypes","options","createSource","props","PMTilesSource","constructor","data","mimeType","metadata","url","getTileData","bind","getMetadata","pmtilesHeader","getHeader","pmtilesMetadata","attributions","tileMIMEType","getTile","tileParams","x","y","zoom","z","rangeResponse","getZxy","arrayBuffer","index","getVectorTile","layers","getImageTile","parse","
|
|
1
|
+
{"version":3,"file":"pmtiles-source.js","names":["DataSource","resolvePath","ImageLoader","MVTLoader","pmtiles","PMTiles","parsePMTilesHeader","BlobSource","VERSION","PMTilesService","name","id","module","version","extensions","mimeTypes","options","createSource","props","PMTilesSource","constructor","data","mimeType","metadata","url","getTileData","bind","getMetadata","pmtilesHeader","getHeader","pmtilesMetadata","includeFormatHeader","loadOptions","attributions","tileMIMEType","getTile","tileParams","x","y","zoom","z","rangeResponse","getZxy","arrayBuffer","index","getVectorTile","layers","getImageTile","parse","_this$loadOptions","shape","mvt","coordinates","tileIndex"],"sources":["../src/pmtiles-source.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {TileLoadParameters, GetTileParameters} from '@loaders.gl/loader-utils';\nimport type {ImageType, DataSourceProps} from '@loaders.gl/loader-utils';\nimport type {ImageTileSource, VectorTileSource} from '@loaders.gl/loader-utils';\nimport {DataSource, resolvePath} from '@loaders.gl/loader-utils';\nimport {ImageLoader, ImageLoaderOptions} from '@loaders.gl/images';\nimport {MVTLoader, MVTLoaderOptions, TileJSONLoaderOptions} from '@loaders.gl/mvt';\n\nimport * as pmtiles from 'pmtiles';\nconst {PMTiles} = pmtiles;\n\nimport type {PMTilesMetadata} from './lib/parse-pmtiles';\nimport {parsePMTilesHeader} from './lib/parse-pmtiles';\nimport {BlobSource} from './lib/blob-source';\n\nconst VERSION = '1.0.0';\n\nexport type Service = {\n name: string;\n id: string;\n module: string;\n version: string;\n extensions: string[];\n mimeTypes: string[];\n options: Record<string, unknown>;\n};\n\nexport type ServiceWithSource<SourceT, SourcePropsT> = Service & {\n _source?: SourceT;\n _sourceProps?: SourcePropsT;\n createSource: (props: SourcePropsT) => SourceT;\n};\n\nexport const PMTilesService: ServiceWithSource<PMTilesSource, PMTilesSourceProps> = {\n name: 'PMTiles',\n id: 'pmtiles',\n module: 'pmtiles',\n version: VERSION,\n extensions: ['pmtiles'],\n mimeTypes: ['application/octet-stream'],\n options: {\n pmtiles: {}\n },\n createSource: (props: PMTilesSourceProps) => new PMTilesSource(props)\n};\n\nexport type PMTilesSourceProps = DataSourceProps & {\n url: string | Blob;\n attributions?: string[];\n loadOptions?: TileJSONLoaderOptions & MVTLoaderOptions & ImageLoaderOptions;\n};\n\n/**\n * A PMTiles data source\n * @note Can be either a raster or vector tile source depending on the contents of the PMTiles file.\n */\nexport class PMTilesSource extends DataSource implements ImageTileSource, VectorTileSource {\n data: string | Blob;\n props: PMTilesSourceProps;\n mimeType: string | null = null;\n pmtiles: pmtiles.PMTiles;\n metadata: Promise<PMTilesMetadata>;\n\n constructor(props: PMTilesSourceProps) {\n super(props);\n this.props = props;\n const url =\n typeof props.url === 'string' ? resolvePath(props.url) : new BlobSource(props.url, 'pmtiles');\n this.data = props.url;\n this.pmtiles = new PMTiles(url);\n this.getTileData = this.getTileData.bind(this);\n this.metadata = this.getMetadata();\n }\n\n async getMetadata(): Promise<PMTilesMetadata> {\n const pmtilesHeader = await this.pmtiles.getHeader();\n const pmtilesMetadata = await this.pmtiles.getMetadata();\n const metadata: PMTilesMetadata = parsePMTilesHeader(\n pmtilesHeader,\n pmtilesMetadata,\n {includeFormatHeader: false},\n this.loadOptions\n );\n // Add additional attribution if necessary\n if (this.props.attributions) {\n metadata.attributions = [...this.props.attributions, ...(metadata.attributions || [])];\n }\n if (metadata?.tileMIMEType) {\n this.mimeType = metadata?.tileMIMEType;\n }\n // TODO - do we need to allow tileSize to be overridden? Some PMTiles examples seem to suggest it.\n return metadata;\n }\n\n async getTile(tileParams: GetTileParameters): Promise<ArrayBuffer | null> {\n const {x, y, zoom: z} = tileParams;\n const rangeResponse = await this.pmtiles.getZxy(z, x, y);\n const arrayBuffer = rangeResponse?.data;\n if (!arrayBuffer) {\n // console.error('No arrayBuffer', tileParams);\n return null;\n }\n return arrayBuffer;\n }\n\n // Tile Source interface implementation: deck.gl compatible API\n // TODO - currently only handles image tiles, not vector tiles\n\n async getTileData(tileParams: TileLoadParameters): Promise<unknown | null> {\n const {x, y, z} = tileParams.index;\n const metadata = await this.metadata;\n switch (metadata.tileMIMEType) {\n case 'application/vnd.mapbox-vector-tile':\n return await this.getVectorTile({x, y, zoom: z, layers: []});\n default:\n return await this.getImageTile({x, y, zoom: z, layers: []});\n }\n }\n\n // ImageTileSource interface implementation\n\n async getImageTile(tileParams: GetTileParameters): Promise<ImageType | null> {\n const arrayBuffer = await this.getTile(tileParams);\n return arrayBuffer ? await ImageLoader.parse(arrayBuffer, this.loadOptions) : null;\n }\n\n // VectorTileSource interface implementation\n\n async getVectorTile(tileParams: GetTileParameters): Promise<unknown | null> {\n const arrayBuffer = await this.getTile(tileParams);\n const loadOptions: MVTLoaderOptions = {\n shape: 'geojson-table',\n mvt: {\n coordinates: 'wgs84',\n tileIndex: {x: tileParams.x, y: tileParams.y, z: tileParams.zoom},\n ...(this.loadOptions as MVTLoaderOptions)?.mvt\n },\n ...this.loadOptions\n };\n\n return arrayBuffer ? await MVTLoader.parse(arrayBuffer, loadOptions) : null;\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loaders.gl/pmtiles",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.1.0-alpha.10",
|
|
4
4
|
"description": "Framework-independent loader for the pmtiles format",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -12,21 +12,26 @@
|
|
|
12
12
|
"url": "https://github.com/visgl/loaders.gl"
|
|
13
13
|
},
|
|
14
14
|
"keywords": [
|
|
15
|
-
"webgl",
|
|
16
15
|
"loader",
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
16
|
+
"tile",
|
|
17
|
+
"mvt",
|
|
18
|
+
"image tile",
|
|
19
|
+
"tilejson",
|
|
20
|
+
"range request",
|
|
21
|
+
"cloud native",
|
|
22
|
+
"PM Tiles",
|
|
23
|
+
"pmtiles",
|
|
24
|
+
"webgl",
|
|
25
|
+
"webgpu"
|
|
21
26
|
],
|
|
22
27
|
"types": "dist/index.d.ts",
|
|
23
28
|
"main": "dist/index.cjs",
|
|
24
29
|
"module": "dist/index.js",
|
|
25
30
|
"exports": {
|
|
26
31
|
".": {
|
|
32
|
+
"types": "./dist/index.d.ts",
|
|
27
33
|
"import": "./dist/index.js",
|
|
28
|
-
"require": "./dist/index.cjs"
|
|
29
|
-
"types": "./dist/index.d.ts"
|
|
34
|
+
"require": "./dist/index.cjs"
|
|
30
35
|
}
|
|
31
36
|
},
|
|
32
37
|
"sideEffects": false,
|
|
@@ -40,11 +45,11 @@
|
|
|
40
45
|
"build-bundle": "ocular-bundle ./src/index.ts"
|
|
41
46
|
},
|
|
42
47
|
"dependencies": {
|
|
43
|
-
"@loaders.gl/images": "4.0.
|
|
44
|
-
"@loaders.gl/loader-utils": "4.0.
|
|
45
|
-
"@loaders.gl/mvt": "4.0.
|
|
46
|
-
"@loaders.gl/schema": "4.0.
|
|
48
|
+
"@loaders.gl/images": "4.1.0-alpha.10",
|
|
49
|
+
"@loaders.gl/loader-utils": "4.1.0-alpha.10",
|
|
50
|
+
"@loaders.gl/mvt": "4.1.0-alpha.10",
|
|
51
|
+
"@loaders.gl/schema": "4.1.0-alpha.10",
|
|
47
52
|
"pmtiles": "^2.7.2"
|
|
48
53
|
},
|
|
49
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "19f43c2d90d8b50860c3f8e487429779a386287d"
|
|
50
55
|
}
|
package/src/index.ts
CHANGED
package/src/lib/blob-source.ts
CHANGED
package/src/lib/parse-pmtiles.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
// loaders.gl
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
2
3
|
// Copyright (c) vis.gl contributors
|
|
3
4
|
|
|
5
|
+
import {LoaderOptions} from '@loaders.gl/loader-utils';
|
|
4
6
|
import type {TileJSON} from '@loaders.gl/mvt';
|
|
5
7
|
import {TileJSONLoader} from '@loaders.gl/mvt';
|
|
6
8
|
// import {Source, PMTiles, Header, TileType} from 'pmtiles';
|
|
@@ -54,12 +56,14 @@ export type PMTilesMetadata = {
|
|
|
54
56
|
* @param header
|
|
55
57
|
* @param tilejsonMetadata
|
|
56
58
|
* @param options
|
|
59
|
+
* @param loadOptions
|
|
57
60
|
* @returns
|
|
58
61
|
*/
|
|
59
62
|
export function parsePMTilesHeader(
|
|
60
63
|
header: pmtiles.Header,
|
|
61
64
|
pmtilesMetadata: Record<string, unknown> | null,
|
|
62
|
-
options?: {includeFormatHeader?: boolean}
|
|
65
|
+
options?: {includeFormatHeader?: boolean},
|
|
66
|
+
loadOptions?: LoaderOptions
|
|
63
67
|
): PMTilesMetadata {
|
|
64
68
|
// Ironically, to use the TileJSON loader we need to stringify the metadata again.
|
|
65
69
|
// This is the price of integrating with the existing pmtiles library.
|
|
@@ -68,7 +72,7 @@ export function parsePMTilesHeader(
|
|
|
68
72
|
if (pmtilesMetadata) {
|
|
69
73
|
try {
|
|
70
74
|
const string = JSON.stringify(pmtilesMetadata);
|
|
71
|
-
tilejson = TileJSONLoader.parseTextSync?.(string) || null;
|
|
75
|
+
tilejson = TileJSONLoader.parseTextSync?.(string, loadOptions) || null;
|
|
72
76
|
} catch (error) {
|
|
73
77
|
// eslint-disable-next-line no-console
|
|
74
78
|
console.warn('PMTiles metadata could not be interpreted as TileJSON', error);
|
package/src/pmtiles-source.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
// loaders.gl
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
2
3
|
// Copyright (c) vis.gl contributors
|
|
3
4
|
|
|
4
5
|
import type {TileLoadParameters, GetTileParameters} from '@loaders.gl/loader-utils';
|
|
5
6
|
import type {ImageType, DataSourceProps} from '@loaders.gl/loader-utils';
|
|
6
7
|
import type {ImageTileSource, VectorTileSource} from '@loaders.gl/loader-utils';
|
|
7
8
|
import {DataSource, resolvePath} from '@loaders.gl/loader-utils';
|
|
8
|
-
import {ImageLoader} from '@loaders.gl/images';
|
|
9
|
-
import {MVTLoader, MVTLoaderOptions} from '@loaders.gl/mvt';
|
|
9
|
+
import {ImageLoader, ImageLoaderOptions} from '@loaders.gl/images';
|
|
10
|
+
import {MVTLoader, MVTLoaderOptions, TileJSONLoaderOptions} from '@loaders.gl/mvt';
|
|
10
11
|
|
|
11
12
|
import * as pmtiles from 'pmtiles';
|
|
12
13
|
const {PMTiles} = pmtiles;
|
|
@@ -49,6 +50,7 @@ export const PMTilesService: ServiceWithSource<PMTilesSource, PMTilesSourceProps
|
|
|
49
50
|
export type PMTilesSourceProps = DataSourceProps & {
|
|
50
51
|
url: string | Blob;
|
|
51
52
|
attributions?: string[];
|
|
53
|
+
loadOptions?: TileJSONLoaderOptions & MVTLoaderOptions & ImageLoaderOptions;
|
|
52
54
|
};
|
|
53
55
|
|
|
54
56
|
/**
|
|
@@ -76,7 +78,12 @@ export class PMTilesSource extends DataSource implements ImageTileSource, Vector
|
|
|
76
78
|
async getMetadata(): Promise<PMTilesMetadata> {
|
|
77
79
|
const pmtilesHeader = await this.pmtiles.getHeader();
|
|
78
80
|
const pmtilesMetadata = await this.pmtiles.getMetadata();
|
|
79
|
-
const metadata: PMTilesMetadata = parsePMTilesHeader(
|
|
81
|
+
const metadata: PMTilesMetadata = parsePMTilesHeader(
|
|
82
|
+
pmtilesHeader,
|
|
83
|
+
pmtilesMetadata,
|
|
84
|
+
{includeFormatHeader: false},
|
|
85
|
+
this.loadOptions
|
|
86
|
+
);
|
|
80
87
|
// Add additional attribution if necessary
|
|
81
88
|
if (this.props.attributions) {
|
|
82
89
|
metadata.attributions = [...this.props.attributions, ...(metadata.attributions || [])];
|