@loaders.gl/mvt 4.1.0-alpha.1 → 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 +54 -18
- package/dist/index.cjs +51 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/geojson-tiler/clip.d.ts.map +1 -1
- package/dist/lib/geojson-tiler/clip.js.map +1 -1
- package/dist/lib/geojson-tiler/convert.d.ts.map +1 -1
- package/dist/lib/geojson-tiler/convert.js.map +1 -1
- package/dist/lib/geojson-tiler/feature.d.ts.map +1 -1
- package/dist/lib/geojson-tiler/feature.js.map +1 -1
- package/dist/lib/geojson-tiler/geojson-tiler.d.ts.map +1 -1
- package/dist/lib/geojson-tiler/geojson-tiler.js.map +1 -1
- package/dist/lib/geojson-tiler/simplify.d.ts.map +1 -1
- package/dist/lib/geojson-tiler/simplify.js.map +1 -1
- package/dist/lib/geojson-tiler/tile.d.ts.map +1 -1
- package/dist/lib/geojson-tiler/tile.js.map +1 -1
- package/dist/lib/geojson-tiler/transform.d.ts.map +1 -1
- package/dist/lib/geojson-tiler/transform.js.map +1 -1
- package/dist/lib/geojson-tiler/wrap.d.ts.map +1 -1
- package/dist/lib/geojson-tiler/wrap.js.map +1 -1
- package/dist/lib/parse-tilejson.d.ts +2 -1
- package/dist/lib/parse-tilejson.d.ts.map +1 -1
- package/dist/lib/parse-tilejson.js +6 -3
- package/dist/lib/parse-tilejson.js.map +1 -1
- package/dist/mvt-loader.js +1 -1
- package/dist/mvt-loader.js.map +1 -1
- package/dist/mvt-source.d.ts +34 -8
- package/dist/mvt-source.d.ts.map +1 -1
- package/dist/mvt-source.js +47 -13
- package/dist/mvt-source.js.map +1 -1
- package/dist/mvt-worker.js +1 -1
- package/dist/tilejson-loader.d.ts +3 -1
- package/dist/tilejson-loader.d.ts.map +1 -1
- package/dist/tilejson-loader.js +2 -2
- package/dist/tilejson-loader.js.map +1 -1
- package/package.json +8 -8
- package/src/index.ts +2 -1
- package/src/lib/geojson-tiler/clip.ts +2 -1
- package/src/lib/geojson-tiler/convert.ts +2 -1
- package/src/lib/geojson-tiler/feature.ts +2 -1
- package/src/lib/geojson-tiler/geojson-tiler.ts +2 -1
- package/src/lib/geojson-tiler/simplify.ts +2 -1
- package/src/lib/geojson-tiler/tile.ts +2 -1
- package/src/lib/geojson-tiler/transform.ts +2 -1
- package/src/lib/geojson-tiler/wrap.ts +2 -1
- package/src/lib/parse-tilejson.ts +12 -4
- package/src/mvt-source.ts +105 -20
- package/src/tilejson-loader.ts +6 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simplify.js","names":["simplify","coords","first","last","sqTolerance","maxSqDist","mid","minPosToMid","index","ax","ay","bx","by","i","d","getSqSegDist","posToMid","Math","abs","px","py","x","y","dx","dy","t"],"sources":["../../../src/lib/geojson-tiler/simplify.ts"],"sourcesContent":["// loaders.gl
|
|
1
|
+
{"version":3,"file":"simplify.js","names":["simplify","coords","first","last","sqTolerance","maxSqDist","mid","minPosToMid","index","ax","ay","bx","by","i","d","getSqSegDist","posToMid","Math","abs","px","py","x","y","dx","dy","t"],"sources":["../../../src/lib/geojson-tiler/simplify.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Forked from https://github.com/mapbox/geojson-vt under compatible ISC license\n\n/**\n * Calculate simplification data using optimized Douglas-Peucker algorithm\n *\n * @param coords contiguous list of coordinates\n * @param first first coord to simplify\n * @param last last coord to simplify\n * @param sqTolerance tolerance (square distance)\n */\nexport function simplify(coords: number[], first: number, last: number, sqTolerance: number): void {\n let maxSqDist = sqTolerance;\n const mid = (last - first) >> 1;\n let minPosToMid = last - first;\n let index;\n\n const ax = coords[first];\n const ay = coords[first + 1];\n const bx = coords[last];\n const by = coords[last + 1];\n\n for (let i = first + 3; i < last; i += 3) {\n const d = getSqSegDist(coords[i], coords[i + 1], ax, ay, bx, by);\n\n if (d > maxSqDist) {\n index = i;\n maxSqDist = d;\n } else if (d === maxSqDist) {\n // a workaround to ensure we choose a pivot close to the middle of the list,\n // reducing recursion depth, for certain degenerate inputs\n // https://github.com/mapbox/geojson-vt/issues/104\n const posToMid = Math.abs(i - mid);\n if (posToMid < minPosToMid) {\n index = i;\n minPosToMid = posToMid;\n }\n }\n }\n\n if (maxSqDist > sqTolerance) {\n if (index - first > 3) simplify(coords, first, index, sqTolerance);\n coords[index + 2] = maxSqDist;\n if (last - index > 3) simplify(coords, index, last, sqTolerance);\n }\n}\n\n/** square distance from a point to a segment */\n// eslint-disable-next-line max-params\nfunction getSqSegDist(\n px: number,\n py: number,\n x: number,\n y: number,\n bx: number,\n by: number\n): number {\n let dx = bx - x;\n let dy = by - y;\n\n if (dx !== 0 || dy !== 0) {\n const t = ((px - x) * dx + (py - y) * dy) / (dx * dx + dy * dy);\n\n if (t > 1) {\n x = bx;\n y = by;\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n\n dx = px - x;\n dy = py - y;\n\n return dx * dx + dy * dy;\n}\n"],"mappings":"AAaA,OAAO,SAASA,QAAQA,CAACC,MAAgB,EAAEC,KAAa,EAAEC,IAAY,EAAEC,WAAmB,EAAQ;EACjG,IAAIC,SAAS,GAAGD,WAAW;EAC3B,MAAME,GAAG,GAAIH,IAAI,GAAGD,KAAK,IAAK,CAAC;EAC/B,IAAIK,WAAW,GAAGJ,IAAI,GAAGD,KAAK;EAC9B,IAAIM,KAAK;EAET,MAAMC,EAAE,GAAGR,MAAM,CAACC,KAAK,CAAC;EACxB,MAAMQ,EAAE,GAAGT,MAAM,CAACC,KAAK,GAAG,CAAC,CAAC;EAC5B,MAAMS,EAAE,GAAGV,MAAM,CAACE,IAAI,CAAC;EACvB,MAAMS,EAAE,GAAGX,MAAM,CAACE,IAAI,GAAG,CAAC,CAAC;EAE3B,KAAK,IAAIU,CAAC,GAAGX,KAAK,GAAG,CAAC,EAAEW,CAAC,GAAGV,IAAI,EAAEU,CAAC,IAAI,CAAC,EAAE;IACxC,MAAMC,CAAC,GAAGC,YAAY,CAACd,MAAM,CAACY,CAAC,CAAC,EAAEZ,MAAM,CAACY,CAAC,GAAG,CAAC,CAAC,EAAEJ,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAEC,EAAE,CAAC;IAEhE,IAAIE,CAAC,GAAGT,SAAS,EAAE;MACjBG,KAAK,GAAGK,CAAC;MACTR,SAAS,GAAGS,CAAC;IACf,CAAC,MAAM,IAAIA,CAAC,KAAKT,SAAS,EAAE;MAI1B,MAAMW,QAAQ,GAAGC,IAAI,CAACC,GAAG,CAACL,CAAC,GAAGP,GAAG,CAAC;MAClC,IAAIU,QAAQ,GAAGT,WAAW,EAAE;QAC1BC,KAAK,GAAGK,CAAC;QACTN,WAAW,GAAGS,QAAQ;MACxB;IACF;EACF;EAEA,IAAIX,SAAS,GAAGD,WAAW,EAAE;IAC3B,IAAII,KAAK,GAAGN,KAAK,GAAG,CAAC,EAAEF,QAAQ,CAACC,MAAM,EAAEC,KAAK,EAAEM,KAAK,EAAEJ,WAAW,CAAC;IAClEH,MAAM,CAACO,KAAK,GAAG,CAAC,CAAC,GAAGH,SAAS;IAC7B,IAAIF,IAAI,GAAGK,KAAK,GAAG,CAAC,EAAER,QAAQ,CAACC,MAAM,EAAEO,KAAK,EAAEL,IAAI,EAAEC,WAAW,CAAC;EAClE;AACF;AAIA,SAASW,YAAYA,CACnBI,EAAU,EACVC,EAAU,EACVC,CAAS,EACTC,CAAS,EACTX,EAAU,EACVC,EAAU,EACF;EACR,IAAIW,EAAE,GAAGZ,EAAE,GAAGU,CAAC;EACf,IAAIG,EAAE,GAAGZ,EAAE,GAAGU,CAAC;EAEf,IAAIC,EAAE,KAAK,CAAC,IAAIC,EAAE,KAAK,CAAC,EAAE;IACxB,MAAMC,CAAC,GAAG,CAAC,CAACN,EAAE,GAAGE,CAAC,IAAIE,EAAE,GAAG,CAACH,EAAE,GAAGE,CAAC,IAAIE,EAAE,KAAKD,EAAE,GAAGA,EAAE,GAAGC,EAAE,GAAGA,EAAE,CAAC;IAE/D,IAAIC,CAAC,GAAG,CAAC,EAAE;MACTJ,CAAC,GAAGV,EAAE;MACNW,CAAC,GAAGV,EAAE;IACR,CAAC,MAAM,IAAIa,CAAC,GAAG,CAAC,EAAE;MAChBJ,CAAC,IAAIE,EAAE,GAAGE,CAAC;MACXH,CAAC,IAAIE,EAAE,GAAGC,CAAC;IACb;EACF;EAEAF,EAAE,GAAGJ,EAAE,GAAGE,CAAC;EACXG,EAAE,GAAGJ,EAAE,GAAGE,CAAC;EAEX,OAAOC,EAAE,GAAGA,EAAE,GAAGC,EAAE,GAAGA,EAAE;AAC1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tile.d.ts","sourceRoot":"","sources":["../../../src/lib/geojson-tiler/tile.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tile.d.ts","sourceRoot":"","sources":["../../../src/lib/geojson-tiler/tile.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,GAAG,CAAC;IACV,QAAQ,EAAE,GAAG,CAAC;IAGd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAGhB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAG9B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IAGV,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IAEb,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,KAAA,EAAE,EAAE,KAAA,EAAE,EAAE,KAAA,EAAE,OAAO,EAAE,iBAAiB,GAAG,WAAW,CAqB9F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tile.js","names":["createTile","features","z","tx","ty","options","tolerance","maxZoom","extent","tile","numPoints","numSimplified","numFeatures","length","source","x","y","transformed","minX","minY","maxX","maxY","feature","addFeature","geom","geometry","type","simplified","Math","min","max","i","push","addLine","k","polygon","tags","lineMetrics","key","mapbox_clip_start","start","size","mapbox_clip_end","end","tileFeature","id","result","isPolygon","isOuter","sqTolerance","ring","rewind","clockwise","area","j","len"],"sources":["../../../src/lib/geojson-tiler/tile.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n// Forked from https://github.com/mapbox/geojson-vt under compatible ISC license\n\n// import type {Feature} from '@loaders.gl/schema';\n\nexport type GeoJSONTileFeature = {\n type: any;\n geometry: any;\n\n // book keeping\n id?: string;\n tags?: string[];\n\n // spatial extents\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n};\n\nexport type GeoJSONTile = {\n features: GeoJSONTileFeature[]; // Feature[]; Doesn't seem JSON compatible??\n type?: number;\n tags?: Record<string, string>;\n\n // tile coordinates\n x: number;\n y: number;\n z: number;\n\n // spatial extents\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n\n transformed: boolean;\n numPoints: number;\n numSimplified: number;\n numFeatures: number;\n source: any | null;\n};\n\nexport type CreateTileOptions = {\n maxZoom?: number;\n tolerance: number;\n extent: number;\n lineMetrics: boolean;\n};\n\n/**\n * Create a tile from features and tile index\n */\nexport function createTile(features: any[], z, tx, ty, options: CreateTileOptions): GeoJSONTile {\n const tolerance = z === options.maxZoom ? 0 : options.tolerance / ((1 << z) * options.extent);\n const tile: GeoJSONTile = {\n features: [],\n numPoints: 0,\n numSimplified: 0,\n numFeatures: features.length,\n source: null,\n x: tx,\n y: ty,\n z,\n transformed: false,\n minX: 2,\n minY: 1,\n maxX: -1,\n maxY: 0\n };\n for (const feature of features) {\n addFeature(tile, feature, tolerance, options);\n }\n return tile;\n}\n\n// eslint-disable-next-line complexity, max-statements\nfunction addFeature(tile: GeoJSONTile, feature, tolerance: number, options: CreateTileOptions) {\n const geom = feature.geometry;\n const type = feature.type;\n const simplified: number[] = [];\n\n tile.minX = Math.min(tile.minX, feature.minX);\n tile.minY = Math.min(tile.minY, feature.minY);\n tile.maxX = Math.max(tile.maxX, feature.maxX);\n tile.maxY = Math.max(tile.maxY, feature.maxY);\n\n if (type === 'Point' || type === 'MultiPoint') {\n for (let i = 0; i < geom.length; i += 3) {\n simplified.push(geom[i], geom[i + 1]);\n tile.numPoints++;\n tile.numSimplified++;\n }\n } else if (type === 'LineString') {\n addLine(simplified, geom, tile, tolerance, false, false);\n } else if (type === 'MultiLineString' || type === 'Polygon') {\n for (let i = 0; i < geom.length; i++) {\n addLine(simplified, geom[i], tile, tolerance, type === 'Polygon', i === 0);\n }\n } else if (type === 'MultiPolygon') {\n for (let k = 0; k < geom.length; k++) {\n const polygon = geom[k];\n for (let i = 0; i < polygon.length; i++) {\n addLine(simplified, polygon[i], tile, tolerance, true, i === 0);\n }\n }\n }\n\n if (simplified.length) {\n let tags = feature.tags || null;\n\n if (type === 'LineString' && options.lineMetrics) {\n tags = {};\n for (const key in feature.tags) tags[key] = feature.tags[key];\n // eslint-disable-next-line camelcase\n tags.mapbox_clip_start = geom.start / geom.size;\n // eslint-disable-next-line camelcase\n tags.mapbox_clip_end = geom.end / geom.size;\n }\n\n // @ts-expect-error TODO - create sub type?\n const tileFeature: GeoJSONTileFeature = {\n geometry: simplified,\n type:\n type === 'Polygon' || type === 'MultiPolygon'\n ? 3\n : type === 'LineString' || type === 'MultiLineString'\n ? 2\n : 1,\n tags\n };\n if (feature.id !== null) {\n tileFeature.id = feature.id;\n }\n tile.features.push(tileFeature);\n }\n}\n\n// eslint-disable-next-line max-params, max-statements\nfunction addLine(\n result,\n geom,\n tile: GeoJSONTile,\n tolerance: number,\n isPolygon: boolean,\n isOuter: boolean\n): void {\n const sqTolerance = tolerance * tolerance;\n\n if (tolerance > 0 && geom.size < (isPolygon ? sqTolerance : tolerance)) {\n tile.numPoints += geom.length / 3;\n return;\n }\n\n const ring: number[] = [];\n\n for (let i = 0; i < geom.length; i += 3) {\n if (tolerance === 0 || geom[i + 2] > sqTolerance) {\n tile.numSimplified++;\n ring.push(geom[i], geom[i + 1]);\n }\n tile.numPoints++;\n }\n\n if (isPolygon) rewind(ring, isOuter);\n\n result.push(ring);\n}\n\nfunction rewind(ring: number[], clockwise?: boolean): void {\n let area = 0;\n for (let i = 0, j = ring.length - 2; i < ring.length; j = i, i += 2) {\n area += (ring[i] - ring[j]) * (ring[i + 1] + ring[j + 1]);\n }\n if (area > 0 === clockwise) {\n for (let i = 0, len = ring.length; i < len / 2; i += 2) {\n const x = ring[i];\n const y = ring[i + 1];\n ring[i] = ring[len - 2 - i];\n ring[i + 1] = ring[len - 1 - i];\n ring[len - 2 - i] = x;\n ring[len - 1 - i] = y;\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tile.js","names":["createTile","features","z","tx","ty","options","tolerance","maxZoom","extent","tile","numPoints","numSimplified","numFeatures","length","source","x","y","transformed","minX","minY","maxX","maxY","feature","addFeature","geom","geometry","type","simplified","Math","min","max","i","push","addLine","k","polygon","tags","lineMetrics","key","mapbox_clip_start","start","size","mapbox_clip_end","end","tileFeature","id","result","isPolygon","isOuter","sqTolerance","ring","rewind","clockwise","area","j","len"],"sources":["../../../src/lib/geojson-tiler/tile.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Forked from https://github.com/mapbox/geojson-vt under compatible ISC license\n\n// import type {Feature} from '@loaders.gl/schema';\n\nexport type GeoJSONTileFeature = {\n type: any;\n geometry: any;\n\n // book keeping\n id?: string;\n tags?: string[];\n\n // spatial extents\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n};\n\nexport type GeoJSONTile = {\n features: GeoJSONTileFeature[]; // Feature[]; Doesn't seem JSON compatible??\n type?: number;\n tags?: Record<string, string>;\n\n // tile coordinates\n x: number;\n y: number;\n z: number;\n\n // spatial extents\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n\n transformed: boolean;\n numPoints: number;\n numSimplified: number;\n numFeatures: number;\n source: any | null;\n};\n\nexport type CreateTileOptions = {\n maxZoom?: number;\n tolerance: number;\n extent: number;\n lineMetrics: boolean;\n};\n\n/**\n * Create a tile from features and tile index\n */\nexport function createTile(features: any[], z, tx, ty, options: CreateTileOptions): GeoJSONTile {\n const tolerance = z === options.maxZoom ? 0 : options.tolerance / ((1 << z) * options.extent);\n const tile: GeoJSONTile = {\n features: [],\n numPoints: 0,\n numSimplified: 0,\n numFeatures: features.length,\n source: null,\n x: tx,\n y: ty,\n z,\n transformed: false,\n minX: 2,\n minY: 1,\n maxX: -1,\n maxY: 0\n };\n for (const feature of features) {\n addFeature(tile, feature, tolerance, options);\n }\n return tile;\n}\n\n// eslint-disable-next-line complexity, max-statements\nfunction addFeature(tile: GeoJSONTile, feature, tolerance: number, options: CreateTileOptions) {\n const geom = feature.geometry;\n const type = feature.type;\n const simplified: number[] = [];\n\n tile.minX = Math.min(tile.minX, feature.minX);\n tile.minY = Math.min(tile.minY, feature.minY);\n tile.maxX = Math.max(tile.maxX, feature.maxX);\n tile.maxY = Math.max(tile.maxY, feature.maxY);\n\n if (type === 'Point' || type === 'MultiPoint') {\n for (let i = 0; i < geom.length; i += 3) {\n simplified.push(geom[i], geom[i + 1]);\n tile.numPoints++;\n tile.numSimplified++;\n }\n } else if (type === 'LineString') {\n addLine(simplified, geom, tile, tolerance, false, false);\n } else if (type === 'MultiLineString' || type === 'Polygon') {\n for (let i = 0; i < geom.length; i++) {\n addLine(simplified, geom[i], tile, tolerance, type === 'Polygon', i === 0);\n }\n } else if (type === 'MultiPolygon') {\n for (let k = 0; k < geom.length; k++) {\n const polygon = geom[k];\n for (let i = 0; i < polygon.length; i++) {\n addLine(simplified, polygon[i], tile, tolerance, true, i === 0);\n }\n }\n }\n\n if (simplified.length) {\n let tags = feature.tags || null;\n\n if (type === 'LineString' && options.lineMetrics) {\n tags = {};\n for (const key in feature.tags) tags[key] = feature.tags[key];\n // eslint-disable-next-line camelcase\n tags.mapbox_clip_start = geom.start / geom.size;\n // eslint-disable-next-line camelcase\n tags.mapbox_clip_end = geom.end / geom.size;\n }\n\n // @ts-expect-error TODO - create sub type?\n const tileFeature: GeoJSONTileFeature = {\n geometry: simplified,\n type:\n type === 'Polygon' || type === 'MultiPolygon'\n ? 3\n : type === 'LineString' || type === 'MultiLineString'\n ? 2\n : 1,\n tags\n };\n if (feature.id !== null) {\n tileFeature.id = feature.id;\n }\n tile.features.push(tileFeature);\n }\n}\n\n// eslint-disable-next-line max-params, max-statements\nfunction addLine(\n result,\n geom,\n tile: GeoJSONTile,\n tolerance: number,\n isPolygon: boolean,\n isOuter: boolean\n): void {\n const sqTolerance = tolerance * tolerance;\n\n if (tolerance > 0 && geom.size < (isPolygon ? sqTolerance : tolerance)) {\n tile.numPoints += geom.length / 3;\n return;\n }\n\n const ring: number[] = [];\n\n for (let i = 0; i < geom.length; i += 3) {\n if (tolerance === 0 || geom[i + 2] > sqTolerance) {\n tile.numSimplified++;\n ring.push(geom[i], geom[i + 1]);\n }\n tile.numPoints++;\n }\n\n if (isPolygon) rewind(ring, isOuter);\n\n result.push(ring);\n}\n\nfunction rewind(ring: number[], clockwise?: boolean): void {\n let area = 0;\n for (let i = 0, j = ring.length - 2; i < ring.length; j = i, i += 2) {\n area += (ring[i] - ring[j]) * (ring[i + 1] + ring[j + 1]);\n }\n if (area > 0 === clockwise) {\n for (let i = 0, len = ring.length; i < len / 2; i += 2) {\n const x = ring[i];\n const y = ring[i + 1];\n ring[i] = ring[len - 2 - i];\n ring[i + 1] = ring[len - 1 - i];\n ring[len - 2 - i] = x;\n ring[len - 1 - i] = y;\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/lib/geojson-tiler/transform.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/lib/geojson-tiler/transform.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,QAAQ,CAAC;AAExC;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAiC5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.js","names":["transformTile","tile","extent","transformed","z2","z","tx","x","ty","y","feature","features","geom","geometry","type","j","length","push","transformPoint","ring","k","Math","round"],"sources":["../../../src/lib/geojson-tiler/transform.ts"],"sourcesContent":["// loaders.gl
|
|
1
|
+
{"version":3,"file":"transform.js","names":["transformTile","tile","extent","transformed","z2","z","tx","x","ty","y","feature","features","geom","geometry","type","j","length","push","transformPoint","ring","k","Math","round"],"sources":["../../../src/lib/geojson-tiler/transform.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Forked from https://github.com/mapbox/geojson-vt under compatible ISC license\n\nimport type {GeoJSONTile} from './tile';\n\n/**\n * Transforms the coordinates of each feature in the given tile from\n * mercator-projected space into (extent x extent) tile space.\n */\nexport function transformTile(tile: GeoJSONTile, extent: number): GeoJSONTile {\n if (tile.transformed) {\n return tile;\n }\n\n const z2 = 1 << tile.z;\n const tx = tile.x;\n const ty = tile.y;\n\n for (const feature of tile.features) {\n const geom = feature.geometry;\n const type = feature.type;\n\n feature.geometry = [];\n\n if (type === 1) {\n for (let j = 0; j < geom.length; j += 2) {\n feature.geometry.push(transformPoint(geom[j], geom[j + 1], extent, z2, tx, ty));\n }\n } else {\n for (let j = 0; j < geom.length; j++) {\n const ring: number[][] = [];\n for (let k = 0; k < geom[j].length; k += 2) {\n ring.push(transformPoint(geom[j][k], geom[j][k + 1], extent, z2, tx, ty));\n }\n feature.geometry.push(ring);\n }\n }\n }\n\n tile.transformed = true;\n\n return tile;\n}\n\n// eslint-disable-next-line max-params\nfunction transformPoint(\n x: number,\n y: number,\n extent: number,\n z2: number,\n tx: number,\n ty: number\n): number[] {\n return [Math.round(extent * (x * z2 - tx)), Math.round(extent * (y * z2 - ty))];\n}\n"],"mappings":"AAWA,OAAO,SAASA,aAAaA,CAACC,IAAiB,EAAEC,MAAc,EAAe;EAC5E,IAAID,IAAI,CAACE,WAAW,EAAE;IACpB,OAAOF,IAAI;EACb;EAEA,MAAMG,EAAE,GAAG,CAAC,IAAIH,IAAI,CAACI,CAAC;EACtB,MAAMC,EAAE,GAAGL,IAAI,CAACM,CAAC;EACjB,MAAMC,EAAE,GAAGP,IAAI,CAACQ,CAAC;EAEjB,KAAK,MAAMC,OAAO,IAAIT,IAAI,CAACU,QAAQ,EAAE;IACnC,MAAMC,IAAI,GAAGF,OAAO,CAACG,QAAQ;IAC7B,MAAMC,IAAI,GAAGJ,OAAO,CAACI,IAAI;IAEzBJ,OAAO,CAACG,QAAQ,GAAG,EAAE;IAErB,IAAIC,IAAI,KAAK,CAAC,EAAE;MACd,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,IAAI,CAACI,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;QACvCL,OAAO,CAACG,QAAQ,CAACI,IAAI,CAACC,cAAc,CAACN,IAAI,CAACG,CAAC,CAAC,EAAEH,IAAI,CAACG,CAAC,GAAG,CAAC,CAAC,EAAEb,MAAM,EAAEE,EAAE,EAAEE,EAAE,EAAEE,EAAE,CAAC,CAAC;MACjF;IACF,CAAC,MAAM;MACL,KAAK,IAAIO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,IAAI,CAACI,MAAM,EAAED,CAAC,EAAE,EAAE;QACpC,MAAMI,IAAgB,GAAG,EAAE;QAC3B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGR,IAAI,CAACG,CAAC,CAAC,CAACC,MAAM,EAAEI,CAAC,IAAI,CAAC,EAAE;UAC1CD,IAAI,CAACF,IAAI,CAACC,cAAc,CAACN,IAAI,CAACG,CAAC,CAAC,CAACK,CAAC,CAAC,EAAER,IAAI,CAACG,CAAC,CAAC,CAACK,CAAC,GAAG,CAAC,CAAC,EAAElB,MAAM,EAAEE,EAAE,EAAEE,EAAE,EAAEE,EAAE,CAAC,CAAC;QAC3E;QACAE,OAAO,CAACG,QAAQ,CAACI,IAAI,CAACE,IAAI,CAAC;MAC7B;IACF;EACF;EAEAlB,IAAI,CAACE,WAAW,GAAG,IAAI;EAEvB,OAAOF,IAAI;AACb;AAGA,SAASiB,cAAcA,CACrBX,CAAS,EACTE,CAAS,EACTP,MAAc,EACdE,EAAU,EACVE,EAAU,EACVE,EAAU,EACA;EACV,OAAO,CAACa,IAAI,CAACC,KAAK,CAACpB,MAAM,IAAIK,CAAC,GAAGH,EAAE,GAAGE,EAAE,CAAC,CAAC,EAAEe,IAAI,CAACC,KAAK,CAACpB,MAAM,IAAIO,CAAC,GAAGL,EAAE,GAAGI,EAAE,CAAC,CAAC,CAAC;AACjF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../../../src/lib/geojson-tiler/wrap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../../../src/lib/geojson-tiler/wrap.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,QAAQ,CAAC;AAI/C;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC,8CAA8C,CAAC;IAC9D,MAAM,EAAE,MAAM,CAAC,0BAA0B,CAAC;IAC1C,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,QAAQ,EAAE,kBAAkB,EAAE,EAAE,OAAO,EAAE,WAAW,wBAkBxE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrap.js","names":["clip","createFeature","wrap","features","options","buffer","extent","merged","left","right","shiftFeatureCoords","concat","offset","newFeatures","i","length","feature","type","newGeometry","shiftCoords","geometry","line","push","polygon","newPolygon","id","tags","Points","Array","constructor","arguments","size","start","end","points","newPoints","undefined"],"sources":["../../../src/lib/geojson-tiler/wrap.ts"],"sourcesContent":["// loaders.gl
|
|
1
|
+
{"version":3,"file":"wrap.js","names":["clip","createFeature","wrap","features","options","buffer","extent","merged","left","right","shiftFeatureCoords","concat","offset","newFeatures","i","length","feature","type","newGeometry","shiftCoords","geometry","line","push","polygon","newPolygon","id","tags","Points","Array","constructor","arguments","size","start","end","points","newPoints","undefined"],"sources":["../../../src/lib/geojson-tiler/wrap.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Forked from https://github.com/mapbox/geojson-vt under compatible ISC license\n\nimport type {GeoJSONTileFeature} from './tile';\nimport {clip} from './clip';\nimport {createFeature} from './feature';\n\n/**\n * Options for wrap()\n */\nexport type WrapOptions = {\n buffer: number /** number of pixels of buffer for the tile */;\n extent: number /** extent of each tile */;\n lineMetrics: boolean;\n};\n\n/**\n * Wrap across antemeridian, by clipping into two tiles, shifting the overflowing x coordinates\n * @param features list of features to be wrapped\n * @param options buffer and extent\n * @returns\n */\nexport function wrap(features: GeoJSONTileFeature[], options: WrapOptions) {\n const buffer = options.buffer / options.extent;\n let merged: GeoJSONTileFeature[] = features;\n const left = clip(features, 1, -1 - buffer, buffer, 0, -1, 2, options); // left world copy\n const right = clip(features, 1, 1 - buffer, 2 + buffer, 0, -1, 2, options); // right world copy\n\n if (left || right) {\n merged = clip(features, 1, -buffer, 1 + buffer, 0, -1, 2, options) || []; // center world copy\n\n if (left) {\n merged = shiftFeatureCoords(left, 1).concat(merged); // merge left into center\n }\n if (right) {\n merged = merged.concat(shiftFeatureCoords(right, -1)); // merge right into center\n }\n }\n\n return merged;\n}\n\n/**\n * Shift the x coordinates of a list of features\n * @param features list of features to shift x coordinates for\n * @param offset\n * @returns\n */\nfunction shiftFeatureCoords(features: GeoJSONTileFeature[], offset: number): GeoJSONTileFeature[] {\n const newFeatures: GeoJSONTileFeature[] = [];\n\n for (let i = 0; i < features.length; i++) {\n const feature = features[i];\n const type = feature.type;\n\n let newGeometry;\n\n if (type === 'Point' || type === 'MultiPoint' || type === 'LineString') {\n newGeometry = shiftCoords(feature.geometry, offset);\n } else if (type === 'MultiLineString' || type === 'Polygon') {\n newGeometry = [];\n for (const line of feature.geometry) {\n newGeometry.push(shiftCoords(line, offset));\n }\n } else if (type === 'MultiPolygon') {\n newGeometry = [];\n for (const polygon of feature.geometry) {\n const newPolygon: Points = [];\n for (const line of polygon) {\n // @ts-expect-error TODO\n newPolygon.push(shiftCoords(line, offset));\n }\n newGeometry.push(newPolygon);\n }\n }\n\n newFeatures.push(createFeature(feature.id, type, newGeometry, feature.tags));\n }\n\n return newFeatures;\n}\n\nclass Points extends Array<number> {\n size?: number;\n start?: number;\n end?: number;\n}\n\n/**\n * Shift the x coordinate of every point\n * @param points\n * @param offset\n * @returns\n */\nfunction shiftCoords(points: Points, offset: number): Points {\n const newPoints: Points = [];\n newPoints.size = points.size;\n\n if (points.start !== undefined) {\n newPoints.start = points.start;\n newPoints.end = points.end;\n }\n\n for (let i = 0; i < points.length; i += 3) {\n newPoints.push(points[i] + offset, points[i + 1], points[i + 2]);\n }\n return newPoints;\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export type TileJSONOptions = {
|
|
2
|
-
|
|
2
|
+
/** max number of values. If not provided, include all values in the source tilestats */
|
|
3
|
+
maxValues?: number;
|
|
3
4
|
};
|
|
4
5
|
/** Parsed and typed TileJSON, merges Tilestats information if present */
|
|
5
6
|
export type TileJSON = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-tilejson.d.ts","sourceRoot":"","sources":["../../src/lib/parse-tilejson.ts"],"names":[],"mappings":"
|
|
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,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;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"}
|
|
@@ -190,9 +190,12 @@ function attributeToField() {
|
|
|
190
190
|
if (typeof attribute.count === 'number') {
|
|
191
191
|
field.uniqueValueCount = attribute.count;
|
|
192
192
|
}
|
|
193
|
-
if (
|
|
194
|
-
|
|
195
|
-
|
|
193
|
+
if (attribute.values) {
|
|
194
|
+
field.values = attribute.values;
|
|
195
|
+
}
|
|
196
|
+
if (field.values && typeof options.maxValues === 'number') {
|
|
197
|
+
var _field$values;
|
|
198
|
+
field.values = (_field$values = field.values) === null || _field$values === void 0 ? void 0 : _field$values.slice(0, options.maxValues);
|
|
196
199
|
}
|
|
197
200
|
return field;
|
|
198
201
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-tilejson.js","names":["isObject","x","parseTileJSON","jsonMetadata","options","_tileJSON$metaJson","tileJSON","name","description","generator","generator_options","generatorOptions","boundingBox","parseBounds","bounds","antimeridian_adjusted_bounds","center","parseCenter","maxZoom","safeParseFloat","maxzoom","minZoom","minzoom","json","metaJson","JSON","parse","error","console","warn","tilestats","tileStatsLayers","parseTilestatsLayers","tileJSONlayers","parseTileJSONLayers","vector_layers","layers","mergeLayers","length","Array","isArray","map","layer","parseTileJSONLayer","fields","Object","entries","_ref","key","datatype","attributeTypeToFieldType","String","layer2","id","parseTilestatsForLayer","indexedAttributes","attributes","attribute","split","fname","push","attributeToField","dominantGeometry","geometry","tilestatsLayers","tilestatsLayer","find","tsLayer","result","fromArrayOrString","every","isLng","isLat","undefined","isZoom","input","parseFloat","isNaN","num","Number","isFinite","data","attrTypeMap","number","type","numeric","string","vachar","float","int","int4","boolean","bool","arguments","fieldTypes","field","min","max","count","uniqueValueCount","maxValues","values","_attribute$values","slice","aType","toLowerCase"],"sources":["../../src/lib/parse-tilejson.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nexport type TileJSONOptions = {\n maxValues?: number | false;\n};\n\n/** Parsed and typed TileJSON, merges Tilestats information if present */\nexport type TileJSON = {\n name?: string;\n description?: string;\n version?: string;\n\n tileFormat?: string;\n tilesetType?: string;\n\n /** Generating application. Tippecanoe adds this. */\n generator?: string;\n /** Generating application options. Tippecanoe adds this. */\n generatorOptions?: string;\n\n /** Tile indexing scheme */\n scheme?: 'xyz' | 'tms';\n /** Sharded URLs */\n tiles?: string[];\n /** `[[w, s], [e, n]]`, indicates the limits of the bounding box using the axis units and order of the specified CRS. */\n boundingBox?: [min: [w: number, s: number], max: [e: number, n: number]];\n /** May be set to the maxZoom of the first layer */\n maxZoom?: number | null;\n /** May be set to the minZoom of the first layer */\n minZoom?: number | null;\n center?: number[] | null;\n htmlAttribution?: string;\n htmlLegend?: string;\n\n // Combination of tilestats (if present) and tilejson layer information\n layers?: TileJSONLayer[];\n\n /** Any nested JSON metadata */\n metaJson?: any | null;\n};\n\nexport type TileJSONLayer = {\n /** The name (id) of this layer (tilejson.vector_layers[].id / tilestats.layers[].layer) */\n name: string;\n\n /** The description of this layer (tilejson.layer.description) */\n description?: string;\n\n // tilestats\n\n /** The number of features in this layer (tilestats.layer.count) */\n featureCount?: number;\n /** The dominant geometry type in this layer (tilestats.layer.geometry) */\n dominantGeometry?: string;\n /** An array of details about the first 100 attributes in this layer */\n\n /** */\n minZoom?: number;\n maxZoom?: number;\n fields: TileJSONField[];\n};\n\nexport type TileJSONField = {\n /** The name of this attribute */\n name: string;\n description?: string;\n\n // tilestats\n\n type: string;\n /** min value (if there are *any* numbers in the values) */\n min?: number;\n /** max value (if there are *any* numbers in the values) */\n max?: number;\n /** Number of unique values across the tileset */\n uniqueValueCount?: number;\n /** An array of this attribute's first 100 unique values */\n values?: unknown[];\n};\n\n/**\n * The raw/unparsed tilestats layer type\n * @see https://github.com/mapbox/mapbox-geostats#output-the-stats\n */\ntype TilestatsLayer = {\n /** The name of this layer */\n layer: string;\n /** The number of features in this layer */\n count: number;\n /** The dominant geometry type in this layer */\n geometry: string;\n /** The number of unique attributes in this layer (max. 1000) */\n attributeCount: number;\n /** Fields for this layer */\n attributes?: TilestatsLayerAttribute[];\n};\n\n/**\n * The raw/unparsed tilestats attribute type\n * @see https://github.com/mapbox/mapbox-geostats#output-the-stats\n */\ntype TilestatsLayerAttribute = {\n /** The name of this layer */\n attribute?: string;\n /** Each attribute has one of the following types:\n * - 'string' if all its values are strings (or null).\n * - 'number' if all its values are numbers (or null).\n * - 'boolean' if all its values are booleans (or null).\n * - 'null' if its only value is null.\n * - 'mixed' if it has values of multiple types.\n * - Array and object values are coerced to strings.\n */\n type?: string;\n /** min value (if there are *any* numbers in the values) */\n min?: number;\n /** max value (if there are *any* numbers in the values) */\n max?: number;\n /** Number of unique values */\n count?: number;\n /** First 100 values */\n values?: unknown[];\n};\n\nconst isObject: (x: unknown) => boolean = (x) => x !== null && typeof x === 'object';\n\n/**\n * Parse TileJSON from metadata\n * @param jsonMetadata - metadata object\n * @param options - options\n * @returns - parsed TileJSON\n */\n// eslint-disable-next-line complexity\nexport function parseTileJSON(jsonMetadata: any, options: TileJSONOptions): TileJSON | null {\n if (!jsonMetadata || !isObject(jsonMetadata)) {\n return null;\n }\n\n let tileJSON: TileJSON = {\n name: jsonMetadata.name || '',\n description: jsonMetadata.description || ''\n };\n\n // tippecanoe\n\n if (typeof jsonMetadata.generator === 'string') {\n tileJSON.generator = jsonMetadata.generator;\n }\n if (typeof jsonMetadata.generator_options === 'string') {\n tileJSON.generatorOptions = jsonMetadata.generator_options;\n }\n\n // Tippecanoe emits `antimeridian_adjusted_bounds` instead of `bounds`\n tileJSON.boundingBox =\n parseBounds(jsonMetadata.bounds) || parseBounds(jsonMetadata.antimeridian_adjusted_bounds);\n\n // TODO - can be undefined - we could set to center of bounds...\n tileJSON.center = parseCenter(jsonMetadata.center);\n // TODO - can be undefined, we could extract from layers...\n tileJSON.maxZoom = safeParseFloat(jsonMetadata.maxzoom);\n // TODO - can be undefined, we could extract from layers...\n tileJSON.minZoom = safeParseFloat(jsonMetadata.minzoom);\n\n // Look for nested metadata embedded in .json field\n // TODO - document what source this applies to, when is this needed?\n if (typeof jsonMetadata?.json === 'string') {\n // try to parse json\n try {\n tileJSON.metaJson = JSON.parse(jsonMetadata.json);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn('Failed to parse tilejson.json field', error);\n // do nothing\n }\n }\n\n // Look for fields in tilestats\n\n const tilestats = jsonMetadata.tilestats || tileJSON.metaJson?.tilestats;\n const tileStatsLayers = parseTilestatsLayers(tilestats, options);\n const tileJSONlayers = parseTileJSONLayers(jsonMetadata.vector_layers); // eslint-disable-line camelcase\n // TODO - merge in description from tilejson\n const layers = mergeLayers(tileJSONlayers, tileStatsLayers);\n\n tileJSON = {\n ...tileJSON,\n layers\n };\n\n if (tileJSON.maxZoom === null && layers.length > 0) {\n tileJSON.maxZoom = layers[0].maxZoom || null;\n }\n\n if (tileJSON.minZoom === null && layers.length > 0) {\n tileJSON.minZoom = layers[0].minZoom || null;\n }\n\n return tileJSON;\n}\n\nfunction parseTileJSONLayers(layers: any[]): TileJSONLayer[] {\n // Look for fields in vector_layers\n if (!Array.isArray(layers)) {\n return [];\n }\n return layers.map((layer) => parseTileJSONLayer(layer));\n}\n\nfunction parseTileJSONLayer(layer: any): TileJSONLayer {\n const fields = Object.entries(layer.fields || []).map(([key, datatype]) => ({\n name: key,\n ...attributeTypeToFieldType(String(datatype))\n }));\n const layer2 = {...layer};\n delete layer2.fields;\n return {\n name: layer.id || '',\n ...layer2,\n fields\n };\n}\n\n/** parse Layers array from tilestats */\nfunction parseTilestatsLayers(tilestats: any, options: TileJSONOptions): TileJSONLayer[] {\n if (isObject(tilestats) && Array.isArray(tilestats.layers)) {\n // we are in luck!\n return tilestats.layers.map((layer) => parseTilestatsForLayer(layer, options));\n }\n return [];\n}\n\nfunction parseTilestatsForLayer(layer: TilestatsLayer, options: TileJSONOptions): TileJSONLayer {\n const fields: TileJSONField[] = [];\n const indexedAttributes: {[key: string]: TilestatsLayerAttribute[]} = {};\n\n const attributes = layer.attributes || [];\n for (const attribute of attributes) {\n const name = attribute.attribute;\n if (typeof name === 'string') {\n // TODO - code copied from kepler.gl, need sample tilestats files to test\n if (name.split('|').length > 1) {\n // indexed field\n const fname = name.split('|')[0];\n indexedAttributes[fname] = indexedAttributes[fname] || [];\n indexedAttributes[fname].push(attribute);\n // eslint-disable-next-line no-console\n console.warn('ignoring tilestats indexed field', fname);\n } else if (!fields[name]) {\n fields.push(attributeToField(attribute, options));\n } else {\n // return (fields[name], attribute);\n }\n }\n }\n return {\n name: layer.layer || '',\n dominantGeometry: layer.geometry,\n fields\n };\n}\n\nfunction mergeLayers(layers: TileJSONLayer[], tilestatsLayers: TileJSONLayer[]): TileJSONLayer[] {\n return layers.map((layer) => {\n const tilestatsLayer = tilestatsLayers.find((tsLayer) => tsLayer.name === layer.name);\n // For aesthetics in JSON dumps, we preserve field order (make sure layers is last)\n const fields = tilestatsLayer?.fields || [];\n const layer2: Partial<TileJSONLayer> = {...layer};\n delete layer2.fields;\n return {\n ...layer2,\n ...tilestatsLayer,\n fields\n } as TileJSONLayer;\n });\n}\n\n/**\n * bounds should be [minLng, minLat, maxLng, maxLat]\n *`[[w, s], [e, n]]`, indicates the limits of the bounding box using the axis units and order of the specified CRS.\n */\nfunction parseBounds(\n bounds: string | number[]\n): [[east: number, south: number], [west: number, north: number]] | undefined {\n // supported formats\n // string: \"-96.657715,40.126127,-90.140061,43.516689\",\n // array: [ -180, -85.05112877980659, 180, 85.0511287798066 ]\n const result = fromArrayOrString(bounds);\n // validate bounds\n if (\n Array.isArray(result) &&\n result.length === 4 &&\n [result[0], result[2]].every(isLng) &&\n [result[1], result[3]].every(isLat)\n ) {\n return [\n [result[0], result[1]],\n [result[2], result[3]]\n ];\n }\n return undefined;\n}\n\nfunction parseCenter(center: string | number[]): number[] | null {\n // supported formats\n // string: \"-96.657715,40.126127,-90.140061,43.516689\",\n // array: [-91.505127,41.615442,14]\n const result = fromArrayOrString(center);\n if (\n Array.isArray(result) &&\n result.length === 3 &&\n isLng(result[0]) &&\n isLat(result[1]) &&\n isZoom(result[2])\n ) {\n return result;\n }\n return null;\n}\n\nfunction safeParseFloat(input: unknown): number | null {\n const result =\n typeof input === 'string' ? parseFloat(input) : typeof input === 'number' ? input : null;\n return result === null || isNaN(result) ? null : result;\n}\n\n// https://github.com/mapbox/tilejson-spec/tree/master/2.2.0\nfunction isLat(num: any): boolean {\n return Number.isFinite(num) && num <= 90 && num >= -90;\n}\nfunction isLng(num: any): boolean {\n return Number.isFinite(num) && num <= 180 && num >= -180;\n}\nfunction isZoom(num: any): boolean {\n return Number.isFinite(num) && num >= 0 && num <= 22;\n}\nfunction fromArrayOrString(data: string | number[]): number[] | null {\n if (typeof data === 'string') {\n return data.split(',').map(parseFloat);\n } else if (Array.isArray(data)) {\n return data;\n }\n return null;\n}\n\n// possible types https://github.com/mapbox/tippecanoe#modifying-feature-attributes\nconst attrTypeMap = {\n number: {\n type: 'float32'\n },\n numeric: {\n type: 'float32'\n },\n string: {\n type: 'utf8'\n },\n vachar: {\n type: 'utf8'\n },\n float: {\n type: 'float32'\n },\n int: {\n type: 'int32'\n },\n int4: {\n type: 'int32'\n },\n boolean: {\n type: 'boolean'\n },\n bool: {\n type: 'boolean'\n }\n};\n\nfunction attributeToField(\n attribute: TilestatsLayerAttribute = {},\n options: TileJSONOptions\n): TileJSONField {\n const fieldTypes = attributeTypeToFieldType(attribute.type!);\n const field: TileJSONField = {\n name: attribute.attribute as string,\n // what happens if attribute type is string...\n // filterProps: getFilterProps(fieldTypes.type, attribute),\n ...fieldTypes\n };\n\n // attribute: \"_season_peaks_color\"\n // count: 1000\n // max: 0.95\n // min: 0.24375\n // type: \"number\"\n\n if (typeof attribute.min === 'number') {\n field.min = attribute.min;\n }\n if (typeof attribute.max === 'number') {\n field.max = attribute.max;\n }\n if (typeof attribute.count === 'number') {\n field.uniqueValueCount = attribute.count;\n }\n if (options.maxValues !== false && attribute.values) {\n // Too much data? Add option?\n field.values = attribute.values?.slice(0, options.maxValues);\n }\n return field;\n}\n\nfunction attributeTypeToFieldType(aType: string): {type: string} {\n const type = aType.toLowerCase();\n if (!type || !attrTypeMap[type]) {\n // console.warn(\n // `cannot convert attribute type ${type} to loaders.gl data type, use string by default`\n // );\n }\n return attrTypeMap[type] || {type: 'string'};\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parse-tilejson.js","names":["isObject","x","parseTileJSON","jsonMetadata","options","_tileJSON$metaJson","tileJSON","name","description","generator","generator_options","generatorOptions","boundingBox","parseBounds","bounds","antimeridian_adjusted_bounds","center","parseCenter","maxZoom","safeParseFloat","maxzoom","minZoom","minzoom","json","metaJson","JSON","parse","error","console","warn","tilestats","tileStatsLayers","parseTilestatsLayers","tileJSONlayers","parseTileJSONLayers","vector_layers","layers","mergeLayers","length","Array","isArray","map","layer","parseTileJSONLayer","fields","Object","entries","_ref","key","datatype","attributeTypeToFieldType","String","layer2","id","parseTilestatsForLayer","indexedAttributes","attributes","attribute","split","fname","push","attributeToField","dominantGeometry","geometry","tilestatsLayers","tilestatsLayer","find","tsLayer","result","fromArrayOrString","every","isLng","isLat","undefined","isZoom","input","parseFloat","isNaN","num","Number","isFinite","data","attrTypeMap","number","type","numeric","string","vachar","float","int","int4","boolean","bool","arguments","fieldTypes","field","min","max","count","uniqueValueCount","values","maxValues","_field$values","slice","aType","toLowerCase"],"sources":["../../src/lib/parse-tilejson.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport type TileJSONOptions = {\n /** max number of values. If not provided, include all values in the source tilestats */\n maxValues?: number;\n};\n\n/** Parsed and typed TileJSON, merges Tilestats information if present */\nexport type TileJSON = {\n name?: string;\n description?: string;\n version?: string;\n\n tileFormat?: string;\n tilesetType?: string;\n\n /** Generating application. Tippecanoe adds this. */\n generator?: string;\n /** Generating application options. Tippecanoe adds this. */\n generatorOptions?: string;\n\n /** Tile indexing scheme */\n scheme?: 'xyz' | 'tms';\n /** Sharded URLs */\n tiles?: string[];\n /** `[[w, s], [e, n]]`, indicates the limits of the bounding box using the axis units and order of the specified CRS. */\n boundingBox?: [min: [w: number, s: number], max: [e: number, n: number]];\n /** May be set to the maxZoom of the first layer */\n maxZoom?: number | null;\n /** May be set to the minZoom of the first layer */\n minZoom?: number | null;\n center?: number[] | null;\n htmlAttribution?: string;\n htmlLegend?: string;\n\n // Combination of tilestats (if present) and tilejson layer information\n layers?: TileJSONLayer[];\n\n /** Any nested JSON metadata */\n metaJson?: any | null;\n};\n\nexport type TileJSONLayer = {\n /** The name (id) of this layer (tilejson.vector_layers[].id / tilestats.layers[].layer) */\n name: string;\n\n /** The description of this layer (tilejson.layer.description) */\n description?: string;\n\n // tilestats\n\n /** The number of features in this layer (tilestats.layer.count) */\n featureCount?: number;\n /** The dominant geometry type in this layer (tilestats.layer.geometry) */\n dominantGeometry?: string;\n /** An array of details about the first 100 attributes in this layer */\n\n /** */\n minZoom?: number;\n maxZoom?: number;\n fields: TileJSONField[];\n};\n\nexport type TileJSONField = {\n /** The name of this attribute */\n name: string;\n description?: string;\n\n // tilestats\n\n type: string;\n /** min value (if there are *any* numbers in the values) */\n min?: number;\n /** max value (if there are *any* numbers in the values) */\n max?: number;\n /** Number of unique values across the tileset */\n uniqueValueCount?: number;\n /** An array of this attribute's first 100 unique values */\n values?: unknown[];\n};\n\n/**\n * The raw/unparsed tilestats layer type\n * @see https://github.com/mapbox/mapbox-geostats#output-the-stats\n */\ntype TilestatsLayer = {\n /** The name of this layer */\n layer: string;\n /** The number of features in this layer */\n count: number;\n /** The dominant geometry type in this layer */\n geometry: string;\n /** The number of unique attributes in this layer (max. 1000) */\n attributeCount: number;\n /** Fields for this layer */\n attributes?: TilestatsLayerAttribute[];\n};\n\n/**\n * The raw/unparsed tilestats attribute type\n * @see https://github.com/mapbox/mapbox-geostats#output-the-stats\n */\ntype TilestatsLayerAttribute = {\n /** The name of this layer */\n attribute?: string;\n /** Each attribute has one of the following types:\n * - 'string' if all its values are strings (or null).\n * - 'number' if all its values are numbers (or null).\n * - 'boolean' if all its values are booleans (or null).\n * - 'null' if its only value is null.\n * - 'mixed' if it has values of multiple types.\n * - Array and object values are coerced to strings.\n */\n type?: string;\n /** min value (if there are *any* numbers in the values) */\n min?: number;\n /** max value (if there are *any* numbers in the values) */\n max?: number;\n /** Number of unique values */\n count?: number;\n /** First 100 values */\n values?: unknown[];\n};\n\nconst isObject: (x: unknown) => boolean = (x) => x !== null && typeof x === 'object';\n\n/**\n * Parse TileJSON from metadata\n * @param jsonMetadata - metadata object\n * @param options - options\n * @returns - parsed TileJSON\n */\n// eslint-disable-next-line complexity\nexport function parseTileJSON(jsonMetadata: any, options: TileJSONOptions): TileJSON | null {\n if (!jsonMetadata || !isObject(jsonMetadata)) {\n return null;\n }\n\n let tileJSON: TileJSON = {\n name: jsonMetadata.name || '',\n description: jsonMetadata.description || ''\n };\n\n // tippecanoe\n\n if (typeof jsonMetadata.generator === 'string') {\n tileJSON.generator = jsonMetadata.generator;\n }\n if (typeof jsonMetadata.generator_options === 'string') {\n tileJSON.generatorOptions = jsonMetadata.generator_options;\n }\n\n // Tippecanoe emits `antimeridian_adjusted_bounds` instead of `bounds`\n tileJSON.boundingBox =\n parseBounds(jsonMetadata.bounds) || parseBounds(jsonMetadata.antimeridian_adjusted_bounds);\n\n // TODO - can be undefined - we could set to center of bounds...\n tileJSON.center = parseCenter(jsonMetadata.center);\n // TODO - can be undefined, we could extract from layers...\n tileJSON.maxZoom = safeParseFloat(jsonMetadata.maxzoom);\n // TODO - can be undefined, we could extract from layers...\n tileJSON.minZoom = safeParseFloat(jsonMetadata.minzoom);\n\n // Look for nested metadata embedded in .json field\n // TODO - document what source this applies to, when is this needed?\n if (typeof jsonMetadata?.json === 'string') {\n // try to parse json\n try {\n tileJSON.metaJson = JSON.parse(jsonMetadata.json);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn('Failed to parse tilejson.json field', error);\n // do nothing\n }\n }\n\n // Look for fields in tilestats\n\n const tilestats = jsonMetadata.tilestats || tileJSON.metaJson?.tilestats;\n const tileStatsLayers = parseTilestatsLayers(tilestats, options);\n const tileJSONlayers = parseTileJSONLayers(jsonMetadata.vector_layers); // eslint-disable-line camelcase\n // TODO - merge in description from tilejson\n const layers = mergeLayers(tileJSONlayers, tileStatsLayers);\n\n tileJSON = {\n ...tileJSON,\n layers\n };\n\n if (tileJSON.maxZoom === null && layers.length > 0) {\n tileJSON.maxZoom = layers[0].maxZoom || null;\n }\n\n if (tileJSON.minZoom === null && layers.length > 0) {\n tileJSON.minZoom = layers[0].minZoom || null;\n }\n\n return tileJSON;\n}\n\nfunction parseTileJSONLayers(layers: any[]): TileJSONLayer[] {\n // Look for fields in vector_layers\n if (!Array.isArray(layers)) {\n return [];\n }\n return layers.map((layer) => parseTileJSONLayer(layer));\n}\n\nfunction parseTileJSONLayer(layer: any): TileJSONLayer {\n const fields = Object.entries(layer.fields || []).map(([key, datatype]) => ({\n name: key,\n ...attributeTypeToFieldType(String(datatype))\n }));\n const layer2 = {...layer};\n delete layer2.fields;\n return {\n name: layer.id || '',\n ...layer2,\n fields\n };\n}\n\n/** parse Layers array from tilestats */\nfunction parseTilestatsLayers(tilestats: any, options: TileJSONOptions): TileJSONLayer[] {\n if (isObject(tilestats) && Array.isArray(tilestats.layers)) {\n // we are in luck!\n return tilestats.layers.map((layer) => parseTilestatsForLayer(layer, options));\n }\n return [];\n}\n\nfunction parseTilestatsForLayer(layer: TilestatsLayer, options: TileJSONOptions): TileJSONLayer {\n const fields: TileJSONField[] = [];\n const indexedAttributes: {[key: string]: TilestatsLayerAttribute[]} = {};\n\n const attributes = layer.attributes || [];\n for (const attribute of attributes) {\n const name = attribute.attribute;\n if (typeof name === 'string') {\n // TODO - code copied from kepler.gl, need sample tilestats files to test\n if (name.split('|').length > 1) {\n // indexed field\n const fname = name.split('|')[0];\n indexedAttributes[fname] = indexedAttributes[fname] || [];\n indexedAttributes[fname].push(attribute);\n // eslint-disable-next-line no-console\n console.warn('ignoring tilestats indexed field', fname);\n } else if (!fields[name]) {\n fields.push(attributeToField(attribute, options));\n } else {\n // return (fields[name], attribute);\n }\n }\n }\n return {\n name: layer.layer || '',\n dominantGeometry: layer.geometry,\n fields\n };\n}\n\nfunction mergeLayers(layers: TileJSONLayer[], tilestatsLayers: TileJSONLayer[]): TileJSONLayer[] {\n return layers.map((layer) => {\n const tilestatsLayer = tilestatsLayers.find((tsLayer) => tsLayer.name === layer.name);\n // For aesthetics in JSON dumps, we preserve field order (make sure layers is last)\n const fields = tilestatsLayer?.fields || [];\n const layer2: Partial<TileJSONLayer> = {...layer};\n delete layer2.fields;\n return {\n ...layer2,\n ...tilestatsLayer,\n fields\n } as TileJSONLayer;\n });\n}\n\n/**\n * bounds should be [minLng, minLat, maxLng, maxLat]\n *`[[w, s], [e, n]]`, indicates the limits of the bounding box using the axis units and order of the specified CRS.\n */\nfunction parseBounds(\n bounds: string | number[]\n): [[east: number, south: number], [west: number, north: number]] | undefined {\n // supported formats\n // string: \"-96.657715,40.126127,-90.140061,43.516689\",\n // array: [ -180, -85.05112877980659, 180, 85.0511287798066 ]\n const result = fromArrayOrString(bounds);\n // validate bounds\n if (\n Array.isArray(result) &&\n result.length === 4 &&\n [result[0], result[2]].every(isLng) &&\n [result[1], result[3]].every(isLat)\n ) {\n return [\n [result[0], result[1]],\n [result[2], result[3]]\n ];\n }\n return undefined;\n}\n\nfunction parseCenter(center: string | number[]): number[] | null {\n // supported formats\n // string: \"-96.657715,40.126127,-90.140061,43.516689\",\n // array: [-91.505127,41.615442,14]\n const result = fromArrayOrString(center);\n if (\n Array.isArray(result) &&\n result.length === 3 &&\n isLng(result[0]) &&\n isLat(result[1]) &&\n isZoom(result[2])\n ) {\n return result;\n }\n return null;\n}\n\nfunction safeParseFloat(input: unknown): number | null {\n const result =\n typeof input === 'string' ? parseFloat(input) : typeof input === 'number' ? input : null;\n return result === null || isNaN(result) ? null : result;\n}\n\n// https://github.com/mapbox/tilejson-spec/tree/master/2.2.0\nfunction isLat(num: any): boolean {\n return Number.isFinite(num) && num <= 90 && num >= -90;\n}\nfunction isLng(num: any): boolean {\n return Number.isFinite(num) && num <= 180 && num >= -180;\n}\nfunction isZoom(num: any): boolean {\n return Number.isFinite(num) && num >= 0 && num <= 22;\n}\nfunction fromArrayOrString(data: string | number[]): number[] | null {\n if (typeof data === 'string') {\n return data.split(',').map(parseFloat);\n } else if (Array.isArray(data)) {\n return data;\n }\n return null;\n}\n\n// possible types https://github.com/mapbox/tippecanoe#modifying-feature-attributes\nconst attrTypeMap = {\n number: {\n type: 'float32'\n },\n numeric: {\n type: 'float32'\n },\n string: {\n type: 'utf8'\n },\n vachar: {\n type: 'utf8'\n },\n float: {\n type: 'float32'\n },\n int: {\n type: 'int32'\n },\n int4: {\n type: 'int32'\n },\n boolean: {\n type: 'boolean'\n },\n bool: {\n type: 'boolean'\n }\n};\n\nfunction attributeToField(\n attribute: TilestatsLayerAttribute = {},\n options: TileJSONOptions\n): TileJSONField {\n const fieldTypes = attributeTypeToFieldType(attribute.type!);\n const field: TileJSONField = {\n name: attribute.attribute as string,\n // what happens if attribute type is string...\n // filterProps: getFilterProps(fieldTypes.type, attribute),\n ...fieldTypes\n };\n\n // attribute: \"_season_peaks_color\"\n // count: 1000\n // max: 0.95\n // min: 0.24375\n // type: \"number\"\n\n if (typeof attribute.min === 'number') {\n field.min = attribute.min;\n }\n if (typeof attribute.max === 'number') {\n field.max = attribute.max;\n }\n if (typeof attribute.count === 'number') {\n field.uniqueValueCount = attribute.count;\n }\n if (attribute.values) {\n // Too much data? Add option?\n field.values = attribute.values;\n }\n\n if (field.values && typeof options.maxValues === 'number') {\n // Too much data? Add option?\n field.values = field.values?.slice(0, options.maxValues);\n }\n\n return field;\n}\n\nfunction attributeTypeToFieldType(aType: string): {type: string} {\n const type = aType.toLowerCase();\n if (!type || !attrTypeMap[type]) {\n // console.warn(\n // `cannot convert attribute type ${type} to loaders.gl data type, use string by default`\n // );\n }\n return attrTypeMap[type] || {type: 'string'};\n}\n"],"mappings":"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"}
|
package/dist/mvt-loader.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import parseMVT from "./lib/parse-mvt.js";
|
|
2
|
-
const VERSION = typeof
|
|
2
|
+
const VERSION = typeof "4.1.0-alpha.10" !== 'undefined' ? "4.1.0-alpha.10" : 'latest';
|
|
3
3
|
export const MVTWorkerLoader = {
|
|
4
4
|
name: 'Mapbox Vector Tile',
|
|
5
5
|
id: 'mvt',
|
package/dist/mvt-loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mvt-loader.js","names":["parseMVT","VERSION","
|
|
1
|
+
{"version":3,"file":"mvt-loader.js","names":["parseMVT","VERSION","MVTWorkerLoader","name","id","module","version","extensions","mimeTypes","worker","category","options","mvt","shape","coordinates","layerProperty","layers","undefined","tileIndex","MVTLoader","parse","arrayBuffer","parseSync","binary"],"sources":["../src/mvt-loader.ts"],"sourcesContent":["import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {MVTLoaderOptions} from './lib/types';\n// import type {\n// Feature,\n// BinaryFeatureCollection,\n// GeoJSONTable,\n// Geometry,\n// GeoJsonProperties\n// } from '@loaders.gl/schema';\nimport parseMVT from './lib/parse-mvt';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/**\n * Worker loader for the Mapbox Vector Tile format\n */\nexport const MVTWorkerLoader: Loader<\n any, // BinaryFeatureCollection | GeoJSONTable | Feature<Geometry, GeoJsonProperties>,\n never,\n MVTLoaderOptions\n> = {\n name: 'Mapbox Vector Tile',\n id: 'mvt',\n module: 'mvt',\n version: VERSION,\n // Note: ArcGIS uses '.pbf' extension and 'application/octet-stream'\n extensions: ['mvt', 'pbf'],\n mimeTypes: [\n // https://www.iana.org/assignments/media-types/application/vnd.mapbox-vector-tile\n 'application/vnd.mapbox-vector-tile',\n 'application/x-protobuf'\n // 'application/octet-stream'\n ],\n worker: true,\n category: 'geometry',\n options: {\n mvt: {\n shape: 'geojson',\n coordinates: 'local',\n layerProperty: 'layerName',\n layers: undefined,\n tileIndex: null\n }\n }\n};\n\n/**\n * Loader for the Mapbox Vector Tile format\n */\nexport const MVTLoader: LoaderWithParser<\n any, // BinaryFeatureCollection | GeoJSONTable | Feature<Geometry, GeoJsonProperties>,\n never,\n MVTLoaderOptions\n> = {\n ...MVTWorkerLoader,\n parse: async (arrayBuffer, options?: MVTLoaderOptions) => parseMVT(arrayBuffer, options),\n parseSync: parseMVT,\n binary: true\n};\n"],"mappings":"OASOA,QAAQ;AAIf,MAAMC,OAAO,GAAG,uBAAkB,KAAK,WAAW,sBAAiB,QAAQ;AAK3E,OAAO,MAAMC,eAIZ,GAAG;EACFC,IAAI,EAAE,oBAAoB;EAC1BC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEL,OAAO;EAEhBM,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;EAC1BC,SAAS,EAAE,CAET,oCAAoC,EACpC,wBAAwB,CAEzB;EACDC,MAAM,EAAE,IAAI;EACZC,QAAQ,EAAE,UAAU;EACpBC,OAAO,EAAE;IACPC,GAAG,EAAE;MACHC,KAAK,EAAE,SAAS;MAChBC,WAAW,EAAE,OAAO;MACpBC,aAAa,EAAE,WAAW;MAC1BC,MAAM,EAAEC,SAAS;MACjBC,SAAS,EAAE;IACb;EACF;AACF,CAAC;AAKD,OAAO,MAAMC,SAIZ,GAAG;EACF,GAAGjB,eAAe;EAClBkB,KAAK,EAAE,MAAAA,CAAOC,WAAW,EAAEV,OAA0B,KAAKX,QAAQ,CAACqB,WAAW,EAAEV,OAAO,CAAC;EACxFW,SAAS,EAAEtB,QAAQ;EACnBuB,MAAM,EAAE;AACV,CAAC"}
|
package/dist/mvt-source.d.ts
CHANGED
|
@@ -1,21 +1,35 @@
|
|
|
1
1
|
import type { GetTileParameters, ImageType, DataSourceProps } from '@loaders.gl/loader-utils';
|
|
2
2
|
import type { ImageTileSource, VectorTileSource } from '@loaders.gl/loader-utils';
|
|
3
3
|
import { DataSource } from '@loaders.gl/loader-utils';
|
|
4
|
-
import {
|
|
4
|
+
import { ImageLoaderOptions } from '@loaders.gl/images';
|
|
5
|
+
import { MVTLoaderOptions, TileJSON, TileJSONLoaderOptions } from '@loaders.gl/mvt';
|
|
5
6
|
import { TileLoadParameters } from '@loaders.gl/loader-utils';
|
|
7
|
+
/** Properties for a Mapbox Vector Tile Source */
|
|
6
8
|
export type MVTSourceProps = DataSourceProps & {
|
|
9
|
+
/** Root url of tileset */
|
|
7
10
|
url: string;
|
|
11
|
+
/** if not supplied, loads tilejson.json, If null does not load metadata */
|
|
12
|
+
metadataUrl?: string | null;
|
|
13
|
+
/** Override extension (necessary if no metadata) */
|
|
14
|
+
extension?: string;
|
|
15
|
+
/** Additional attribution, adds to any attribution loaded from tileset metadata */
|
|
8
16
|
attributions?: string[];
|
|
17
|
+
/** Specify load options for all sub loaders */
|
|
18
|
+
loadOptions?: TileJSONLoaderOptions & MVTLoaderOptions & ImageLoaderOptions;
|
|
9
19
|
};
|
|
20
|
+
/**
|
|
21
|
+
* MVT data source for Mapbox Vector Tiles v1.
|
|
22
|
+
*/
|
|
10
23
|
/**
|
|
11
24
|
* A PMTiles data source
|
|
12
25
|
* @note Can be either a raster or vector tile source depending on the contents of the PMTiles file.
|
|
13
26
|
*/
|
|
14
27
|
export declare class MVTSource extends DataSource implements ImageTileSource, VectorTileSource {
|
|
15
|
-
props: MVTSourceProps;
|
|
16
|
-
url: string;
|
|
28
|
+
readonly props: MVTSourceProps;
|
|
29
|
+
readonly url: string;
|
|
30
|
+
readonly metadataUrl: string | null;
|
|
17
31
|
data: string;
|
|
18
|
-
schema: 'tms' | 'xyz';
|
|
32
|
+
schema: 'tms' | 'xyz' | 'template';
|
|
19
33
|
metadata: Promise<TileJSON | null>;
|
|
20
34
|
extension: string;
|
|
21
35
|
mimeType: string | null;
|
|
@@ -24,12 +38,24 @@ export declare class MVTSource extends DataSource implements ImageTileSource, Ve
|
|
|
24
38
|
getTileMIMEType(): string | null;
|
|
25
39
|
getTile(tileParams: GetTileParameters): Promise<ArrayBuffer | null>;
|
|
26
40
|
getTileData(tileParams: TileLoadParameters): Promise<unknown | null>;
|
|
27
|
-
x: any;
|
|
28
41
|
getImageTile(tileParams: GetTileParameters): Promise<ImageType | null>;
|
|
29
|
-
protected
|
|
42
|
+
protected _parseImageTile(arrayBuffer: ArrayBuffer): Promise<ImageType>;
|
|
30
43
|
getVectorTile(tileParams: GetTileParameters): Promise<unknown | null>;
|
|
31
|
-
protected
|
|
32
|
-
getMetadataUrl(): string;
|
|
44
|
+
protected _parseVectorTile(arrayBuffer: ArrayBuffer, tileParams: GetTileParameters): Promise<unknown | null>;
|
|
45
|
+
getMetadataUrl(): string | null;
|
|
33
46
|
getTileURL(x: number, y: number, z: number): string;
|
|
34
47
|
}
|
|
48
|
+
export declare function isURLTemplate(s: string): boolean;
|
|
49
|
+
export type URLTemplate = string | string[];
|
|
50
|
+
/**
|
|
51
|
+
* Get a URL from a URL template
|
|
52
|
+
* @note copied from deck.gl/modules/geo-layers/src/tileset-2d/utils.ts
|
|
53
|
+
* @param template - URL template
|
|
54
|
+
* @param x - tile x coordinate
|
|
55
|
+
* @param y - tile y coordinate
|
|
56
|
+
* @param z - tile z coordinate
|
|
57
|
+
* @param id - tile id
|
|
58
|
+
* @returns URL
|
|
59
|
+
*/
|
|
60
|
+
export declare function getURLFromTemplate(template: URLTemplate, x: number, y: number, z: number, id?: string): string;
|
|
35
61
|
//# sourceMappingURL=mvt-source.d.ts.map
|
package/dist/mvt-source.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mvt-source.d.ts","sourceRoot":"","sources":["../src/mvt-source.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mvt-source.d.ts","sourceRoot":"","sources":["../src/mvt-source.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,iBAAiB,EAAE,SAAS,EAAE,eAAe,EAAC,MAAM,0BAA0B,CAAC;AAC5F,OAAO,KAAK,EAAC,eAAe,EAAE,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAC,UAAU,EAAc,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAc,kBAAkB,EAAyB,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAEL,gBAAgB,EAEhB,QAAQ,EACR,qBAAqB,EACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAC,kBAAkB,EAAC,MAAM,0BAA0B,CAAC;AAE5D,iDAAiD;AACjD,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG;IAC7C,0BAA0B;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,qBAAqB,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;CAC7E,CAAC;AAEF;;GAEG;AACH;;;GAGG;AACH,qBAAa,SAAU,SAAQ,UAAW,YAAW,eAAe,EAAE,gBAAgB;IACpF,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,UAAU,CAAS;IAC3C,QAAQ,EAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAEnB,KAAK,EAAE,cAAc;IAkB3B,WAAW,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAgC7C,eAAe,IAAI,MAAM,GAAG,IAAI;IAI1B,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;IAuBpE,YAAY,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;cAK5D,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC;IAMvE,aAAa,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;cAK3D,gBAAgB,CAC9B,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,iBAAiB,GAC5B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAc1B,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;CAY3C;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAM5C;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,WAAW,EACrB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,EAAE,GAAE,MAAY,GACf,MAAM,CAiBR"}
|
package/dist/mvt-source.js
CHANGED
|
@@ -6,24 +6,31 @@ export class MVTSource extends DataSource {
|
|
|
6
6
|
super(props);
|
|
7
7
|
this.props = void 0;
|
|
8
8
|
this.url = void 0;
|
|
9
|
+
this.metadataUrl = null;
|
|
9
10
|
this.data = void 0;
|
|
10
11
|
this.schema = 'tms';
|
|
11
12
|
this.metadata = void 0;
|
|
12
|
-
this.extension =
|
|
13
|
+
this.extension = void 0;
|
|
13
14
|
this.mimeType = null;
|
|
14
|
-
this.x = void 0;
|
|
15
15
|
this.props = props;
|
|
16
16
|
this.url = resolvePath(props.url);
|
|
17
|
+
this.metadataUrl = props.metadataUrl === undefined ? `${this.url}/tilejson.json` : props.metadataUrl;
|
|
18
|
+
this.extension = props.extension || '.png';
|
|
17
19
|
this.data = this.url;
|
|
18
20
|
this.getTileData = this.getTileData.bind(this);
|
|
19
21
|
this.metadata = this.getMetadata();
|
|
22
|
+
if (isURLTemplate(this.url)) {
|
|
23
|
+
this.schema = 'template';
|
|
24
|
+
}
|
|
20
25
|
}
|
|
21
26
|
async getMetadata() {
|
|
22
27
|
var _TileJSONLoader$parse;
|
|
23
|
-
|
|
28
|
+
if (!this.metadataUrl) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
24
31
|
let response;
|
|
25
32
|
try {
|
|
26
|
-
response = await this.fetch(metadataUrl);
|
|
33
|
+
response = await this.fetch(this.metadataUrl);
|
|
27
34
|
} catch (error) {
|
|
28
35
|
console.error(error.message);
|
|
29
36
|
return null;
|
|
@@ -33,7 +40,7 @@ export class MVTSource extends DataSource {
|
|
|
33
40
|
return null;
|
|
34
41
|
}
|
|
35
42
|
const tileJSON = await response.text();
|
|
36
|
-
const metadata = ((_TileJSONLoader$parse = TileJSONLoader.parseTextSync) === null || _TileJSONLoader$parse === void 0 ? void 0 : _TileJSONLoader$parse.call(TileJSONLoader,
|
|
43
|
+
const metadata = ((_TileJSONLoader$parse = TileJSONLoader.parseTextSync) === null || _TileJSONLoader$parse === void 0 ? void 0 : _TileJSONLoader$parse.call(TileJSONLoader, tileJSON)) || null;
|
|
37
44
|
return metadata;
|
|
38
45
|
}
|
|
39
46
|
getTileMIMEType() {
|
|
@@ -72,28 +79,28 @@ export class MVTSource extends DataSource {
|
|
|
72
79
|
this.mimeType = this.mimeType || (imageMetadata === null || imageMetadata === void 0 ? void 0 : imageMetadata.mimeType) || 'application/vnd.mapbox-vector-tile';
|
|
73
80
|
switch (this.mimeType) {
|
|
74
81
|
case 'application/vnd.mapbox-vector-tile':
|
|
75
|
-
return await this.
|
|
82
|
+
return await this._parseVectorTile(arrayBuffer, {
|
|
76
83
|
x,
|
|
77
84
|
y,
|
|
78
85
|
zoom: z,
|
|
79
86
|
layers: []
|
|
80
87
|
});
|
|
81
88
|
default:
|
|
82
|
-
return await this.
|
|
89
|
+
return await this._parseImageTile(arrayBuffer);
|
|
83
90
|
}
|
|
84
91
|
}
|
|
85
92
|
async getImageTile(tileParams) {
|
|
86
93
|
const arrayBuffer = await this.getTile(tileParams);
|
|
87
|
-
return arrayBuffer ? this.
|
|
94
|
+
return arrayBuffer ? this._parseImageTile(arrayBuffer) : null;
|
|
88
95
|
}
|
|
89
|
-
async
|
|
96
|
+
async _parseImageTile(arrayBuffer) {
|
|
90
97
|
return await ImageLoader.parse(arrayBuffer, this.loadOptions);
|
|
91
98
|
}
|
|
92
99
|
async getVectorTile(tileParams) {
|
|
93
100
|
const arrayBuffer = await this.getTile(tileParams);
|
|
94
|
-
return arrayBuffer ? this.
|
|
101
|
+
return arrayBuffer ? this._parseVectorTile(arrayBuffer, tileParams) : null;
|
|
95
102
|
}
|
|
96
|
-
async
|
|
103
|
+
async _parseVectorTile(arrayBuffer, tileParams) {
|
|
97
104
|
var _this$loadOptions;
|
|
98
105
|
const loadOptions = {
|
|
99
106
|
shape: 'geojson-table',
|
|
@@ -111,16 +118,43 @@ export class MVTSource extends DataSource {
|
|
|
111
118
|
return await MVTLoader.parse(arrayBuffer, loadOptions);
|
|
112
119
|
}
|
|
113
120
|
getMetadataUrl() {
|
|
114
|
-
return
|
|
121
|
+
return this.metadataUrl;
|
|
115
122
|
}
|
|
116
123
|
getTileURL(x, y, z) {
|
|
117
124
|
switch (this.schema) {
|
|
118
125
|
case 'xyz':
|
|
119
126
|
return `${this.url}/${x}/${y}/${z}${this.extension}`;
|
|
120
127
|
case 'tms':
|
|
121
|
-
default:
|
|
122
128
|
return `${this.url}/${z}/${x}/${y}${this.extension}`;
|
|
129
|
+
case 'template':
|
|
130
|
+
return getURLFromTemplate(this.url, x, y, z, '0');
|
|
131
|
+
default:
|
|
132
|
+
throw new Error(this.schema);
|
|
123
133
|
}
|
|
124
134
|
}
|
|
125
135
|
}
|
|
136
|
+
export function isURLTemplate(s) {
|
|
137
|
+
return /(?=.*{z})(?=.*{x})(?=.*({y}|{-y}))|(?=.*{x})(?=.*({y}|{-y})(?=.*{z}))/.test(s);
|
|
138
|
+
}
|
|
139
|
+
const xRegex = new RegExp('{x}', 'g');
|
|
140
|
+
const yRegex = new RegExp('{y}', 'g');
|
|
141
|
+
const zRegex = new RegExp('{z}', 'g');
|
|
142
|
+
export function getURLFromTemplate(template, x, y, z) {
|
|
143
|
+
let id = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '0';
|
|
144
|
+
if (Array.isArray(template)) {
|
|
145
|
+
const i = stringHash(id) % template.length;
|
|
146
|
+
template = template[i];
|
|
147
|
+
}
|
|
148
|
+
let url = template;
|
|
149
|
+
url = url.replace(xRegex, String(x));
|
|
150
|
+
url = url.replace(yRegex, String(y));
|
|
151
|
+
url = url.replace(zRegex, String(z));
|
|
152
|
+
if (Number.isInteger(y) && Number.isInteger(z)) {
|
|
153
|
+
url = url.replace(/\{-y\}/g, String(Math.pow(2, z) - y - 1));
|
|
154
|
+
}
|
|
155
|
+
return url;
|
|
156
|
+
}
|
|
157
|
+
function stringHash(s) {
|
|
158
|
+
return Math.abs(s.split('').reduce((a, b) => (a << 5) - a + b.charCodeAt(0) | 0, 0));
|
|
159
|
+
}
|
|
126
160
|
//# sourceMappingURL=mvt-source.js.map
|