@deck.gl/carto 8.9.0-alpha.2 → 8.9.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/dist/dist.dev.js +1927 -1675
  2. package/dist/es5/api/layer-map.js +104 -9
  3. package/dist/es5/api/layer-map.js.map +1 -1
  4. package/dist/es5/api/maps-v3-client.js +10 -8
  5. package/dist/es5/api/maps-v3-client.js.map +1 -1
  6. package/dist/es5/api/parseMap.js +55 -7
  7. package/dist/es5/api/parseMap.js.map +1 -1
  8. package/dist/es5/api/types.js +2 -0
  9. package/dist/es5/api/types.js.map +1 -0
  10. package/dist/es5/index.js +0 -20
  11. package/dist/es5/index.js.map +1 -1
  12. package/dist/es5/layers/carto-layer.js +19 -2
  13. package/dist/es5/layers/carto-layer.js.map +1 -1
  14. package/dist/es5/layers/carto-tile-layer.js +33 -107
  15. package/dist/es5/layers/carto-tile-layer.js.map +1 -1
  16. package/dist/es5/layers/h3-tile-layer.js +10 -1
  17. package/dist/es5/layers/h3-tile-layer.js.map +1 -1
  18. package/dist/es5/layers/quadbin-layer.js.map +1 -1
  19. package/dist/es5/layers/quadbin-tile-layer.js +10 -1
  20. package/dist/es5/layers/quadbin-tile-layer.js.map +1 -1
  21. package/dist/es5/layers/quadbin-tileset-2d.js +13 -11
  22. package/dist/es5/layers/quadbin-tileset-2d.js.map +1 -1
  23. package/dist/es5/layers/quadbin-utils.js +6 -82
  24. package/dist/es5/layers/quadbin-utils.js.map +1 -1
  25. package/dist/es5/layers/schema/carto-spatial-tile-loader.js +16 -32
  26. package/dist/es5/layers/schema/carto-spatial-tile-loader.js.map +1 -1
  27. package/dist/es5/layers/schema/carto-tile.js +30 -6
  28. package/dist/es5/layers/schema/carto-tile.js.map +1 -1
  29. package/dist/es5/layers/schema/carto-vector-tile-loader.js +81 -0
  30. package/dist/es5/layers/schema/carto-vector-tile-loader.js.map +1 -0
  31. package/dist/es5/layers/schema/spatialjson-utils.js +4 -3
  32. package/dist/es5/layers/schema/spatialjson-utils.js.map +1 -1
  33. package/dist/es5/layers/schema/tile-loader-utils.js +34 -0
  34. package/dist/es5/layers/schema/tile-loader-utils.js.map +1 -0
  35. package/dist/es5/layers/spatial-index-tile-layer.js +40 -0
  36. package/dist/es5/layers/spatial-index-tile-layer.js.map +1 -1
  37. package/dist/esm/api/layer-map.js +85 -9
  38. package/dist/esm/api/layer-map.js.map +1 -1
  39. package/dist/esm/api/maps-v3-client.js +5 -2
  40. package/dist/esm/api/maps-v3-client.js.map +1 -1
  41. package/dist/esm/api/parseMap.js +58 -7
  42. package/dist/esm/api/parseMap.js.map +1 -1
  43. package/dist/esm/api/types.js +2 -0
  44. package/dist/esm/api/types.js.map +1 -0
  45. package/dist/esm/index.js +0 -1
  46. package/dist/esm/index.js.map +1 -1
  47. package/dist/esm/layers/carto-layer.js +18 -0
  48. package/dist/esm/layers/carto-layer.js.map +1 -1
  49. package/dist/esm/layers/carto-tile-layer.js +31 -82
  50. package/dist/esm/layers/carto-tile-layer.js.map +1 -1
  51. package/dist/esm/layers/h3-tile-layer.js +6 -1
  52. package/dist/esm/layers/h3-tile-layer.js.map +1 -1
  53. package/dist/esm/layers/quadbin-layer.js.map +1 -1
  54. package/dist/esm/layers/quadbin-tile-layer.js +6 -1
  55. package/dist/esm/layers/quadbin-tile-layer.js.map +1 -1
  56. package/dist/esm/layers/quadbin-tileset-2d.js +12 -10
  57. package/dist/esm/layers/quadbin-tileset-2d.js.map +1 -1
  58. package/dist/esm/layers/quadbin-utils.js +2 -67
  59. package/dist/esm/layers/quadbin-utils.js.map +1 -1
  60. package/dist/esm/layers/schema/carto-spatial-tile-loader.js +14 -29
  61. package/dist/esm/layers/schema/carto-spatial-tile-loader.js.map +1 -1
  62. package/dist/esm/layers/schema/carto-tile.js +22 -6
  63. package/dist/esm/layers/schema/carto-tile.js.map +1 -1
  64. package/dist/esm/layers/schema/carto-vector-tile-loader.js +40 -0
  65. package/dist/esm/layers/schema/carto-vector-tile-loader.js.map +1 -0
  66. package/dist/esm/layers/schema/spatialjson-utils.js +4 -3
  67. package/dist/esm/layers/schema/spatialjson-utils.js.map +1 -1
  68. package/dist/esm/layers/schema/tile-loader-utils.js +23 -0
  69. package/dist/esm/layers/schema/tile-loader-utils.js.map +1 -0
  70. package/dist/esm/layers/spatial-index-tile-layer.js +40 -1
  71. package/dist/esm/layers/spatial-index-tile-layer.js.map +1 -1
  72. package/dist.min.js +4 -4
  73. package/package.json +4 -3
  74. package/src/api/layer-map.ts +103 -17
  75. package/src/api/maps-v3-client.ts +5 -3
  76. package/src/api/parseMap.ts +90 -17
  77. package/src/api/types.ts +108 -0
  78. package/src/index.ts +0 -5
  79. package/src/layers/carto-layer.ts +9 -2
  80. package/src/layers/carto-tile-layer.ts +32 -82
  81. package/src/layers/h3-tile-layer.ts +7 -1
  82. package/src/layers/quadbin-layer.ts +1 -1
  83. package/src/layers/quadbin-tile-layer.ts +7 -1
  84. package/src/layers/quadbin-tileset-2d.ts +14 -12
  85. package/src/layers/quadbin-utils.ts +4 -85
  86. package/src/layers/schema/carto-spatial-tile-loader.ts +12 -29
  87. package/src/layers/schema/carto-tile.ts +31 -6
  88. package/src/layers/schema/carto-vector-tile-loader.ts +39 -0
  89. package/src/layers/schema/spatialjson-utils.ts +4 -4
  90. package/src/layers/schema/tile-loader-utils.ts +22 -0
  91. package/src/layers/spatial-index-tile-layer.ts +37 -1
  92. package/typed/api/layer-map.d.ts +10 -13
  93. package/typed/api/layer-map.d.ts.map +1 -1
  94. package/typed/api/maps-v3-client.d.ts +1 -0
  95. package/typed/api/maps-v3-client.d.ts.map +1 -1
  96. package/typed/api/parseMap.d.ts +1 -0
  97. package/typed/api/parseMap.d.ts.map +1 -1
  98. package/typed/api/types.d.ts +87 -0
  99. package/typed/api/types.d.ts.map +1 -0
  100. package/typed/index.d.ts +0 -1
  101. package/typed/index.d.ts.map +1 -1
  102. package/typed/layers/carto-layer.d.ts.map +1 -1
  103. package/typed/layers/carto-tile-layer.d.ts +2 -0
  104. package/typed/layers/carto-tile-layer.d.ts.map +1 -1
  105. package/typed/layers/h3-tile-layer.d.ts.map +1 -1
  106. package/typed/layers/quadbin-layer.d.ts +1 -1
  107. package/typed/layers/quadbin-tile-layer.d.ts.map +1 -1
  108. package/typed/layers/quadbin-tileset-2d.d.ts +6 -5
  109. package/typed/layers/quadbin-tileset-2d.d.ts.map +1 -1
  110. package/typed/layers/quadbin-utils.d.ts +2 -12
  111. package/typed/layers/quadbin-utils.d.ts.map +1 -1
  112. package/typed/layers/schema/carto-spatial-tile-loader.d.ts.map +1 -1
  113. package/typed/layers/schema/carto-tile.d.ts +4 -0
  114. package/typed/layers/schema/carto-tile.d.ts.map +1 -1
  115. package/typed/layers/schema/carto-vector-tile-loader.d.ts +4 -0
  116. package/typed/layers/schema/carto-vector-tile-loader.d.ts.map +1 -0
  117. package/typed/layers/schema/spatialjson-utils.d.ts +1 -1
  118. package/typed/layers/schema/spatialjson-utils.d.ts.map +1 -1
  119. package/typed/layers/schema/tile-loader-utils.d.ts +5 -0
  120. package/typed/layers/schema/tile-loader-utils.d.ts.map +1 -0
  121. package/typed/layers/spatial-index-tile-layer.d.ts +2 -1
  122. package/typed/layers/spatial-index-tile-layer.d.ts.map +1 -1
  123. package/typed/api/index.js +0 -3
  124. package/typed/api/layer-map.js +0 -264
  125. package/typed/api/maps-api-common.js +0 -50
  126. package/typed/api/maps-client.js +0 -125
  127. package/typed/api/maps-v3-client.js +0 -304
  128. package/typed/api/parseMap.js +0 -178
  129. package/typed/basemap.js +0 -9
  130. package/typed/config.js +0 -35
  131. package/typed/index.js +0 -10
  132. package/typed/layers/carto-layer.js +0 -173
  133. package/typed/layers/carto-tile-layer.js +0 -105
  134. package/typed/layers/h3-tile-layer.js +0 -47
  135. package/typed/layers/h3-tileset-2d.js +0 -85
  136. package/typed/layers/quadkey-tile-layer.d.ts +0 -21
  137. package/typed/layers/quadkey-tile-layer.d.ts.map +0 -1
  138. package/typed/layers/quadkey-tile-layer.js +0 -42
  139. package/typed/layers/quadkey-tileset-2d.d.ts +0 -15
  140. package/typed/layers/quadkey-tileset-2d.d.ts.map +0 -1
  141. package/typed/layers/quadkey-tileset-2d.js +0 -36
  142. package/typed/layers/schema/carto-tile.js +0 -161
  143. package/typed/layers/spatial-index-tile-layer.js +0 -40
  144. package/typed/style/color-bins-style.js +0 -12
  145. package/typed/style/color-categories-style.js +0 -16
  146. package/typed/style/color-continuous-style.js +0 -12
  147. package/typed/style/palette.js +0 -62
  148. package/typed/style/utils.js +0 -15
  149. package/typed/utils.js +0 -4
@@ -1,87 +1,25 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import Protobuf from 'pbf';
3
- import { log } from '@deck.gl/core';
2
+ import { registerLoaders } from '@loaders.gl/core';
3
+ import CartoVectorTileLoader from './schema/carto-vector-tile-loader';
4
+ registerLoaders([CartoVectorTileLoader]);
4
5
  import { ClipExtension } from '@deck.gl/extensions';
5
6
  import { MVTLayer, _getURLFromTemplate } from '@deck.gl/geo-layers';
6
7
  import { GeoJsonLayer } from '@deck.gl/layers';
7
- import { geojsonToBinary } from '@loaders.gl/gis';
8
- import { TileReader } from './schema/carto-tile';
8
+ import { binaryToGeojson } from '@loaders.gl/gis';
9
9
  import { TILE_FORMATS } from '../api/maps-api-common';
10
-
11
- function parseJSON(arrayBuffer) {
12
- return JSON.parse(new TextDecoder().decode(arrayBuffer));
13
- }
14
-
15
- function parsePbf(buffer) {
16
- const pbf = new Protobuf(buffer);
17
- const tile = TileReader.read(pbf);
18
- return tile;
19
- }
20
-
21
- function unpackProperties(properties) {
22
- if (!properties || !properties.length) {
23
- return [];
24
- }
25
-
26
- return properties.map(item => {
27
- const currentRecord = {};
28
- item.data.forEach(({
29
- key,
30
- value
31
- }) => {
32
- currentRecord[key] = value;
33
- });
34
- return currentRecord;
35
- });
36
- }
37
-
38
- function parseCartoTile(arrayBuffer, options) {
39
- if (!arrayBuffer) return null;
40
- const formatTiles = options && options.cartoTile && options.cartoTile.formatTiles;
41
- if (formatTiles === TILE_FORMATS.GEOJSON) return geojsonToBinary(parseJSON(arrayBuffer).features);
42
- const tile = parsePbf(arrayBuffer);
43
- const {
44
- points,
45
- lines,
46
- polygons
47
- } = tile;
48
- const data = {
49
- points: { ...points,
50
- properties: unpackProperties(points.properties)
51
- },
52
- lines: { ...lines,
53
- properties: unpackProperties(lines.properties)
54
- },
55
- polygons: { ...polygons,
56
- properties: unpackProperties(polygons.properties)
57
- }
58
- };
59
- return data;
60
- }
61
-
62
10
  const defaultTileFormat = TILE_FORMATS.BINARY;
63
- const CartoTileLoader = {
64
- name: 'CARTO Tile',
65
- version: '1',
66
- id: 'cartoTile',
67
- module: 'carto',
68
- extensions: ['pbf'],
69
- mimeTypes: ['application/vnd.carto-vector-tile', 'application/x-protobuf'],
70
- category: 'geometry',
71
- worker: false,
72
- parse: async (arrayBuffer, options) => parseCartoTile(arrayBuffer, options),
73
- parseSync: parseCartoTile,
74
- options: {
75
- cartoTile: {
76
- formatTiles: defaultTileFormat
77
- }
78
- }
79
- };
80
11
  const defaultProps = { ...MVTLayer.defaultProps,
81
- formatTiles: defaultTileFormat,
82
- loaders: [CartoTileLoader]
12
+ formatTiles: defaultTileFormat
83
13
  };
84
14
  export default class CartoTileLayer extends MVTLayer {
15
+ initializeState() {
16
+ super.initializeState();
17
+ const binary = this.props.formatTiles === TILE_FORMATS.BINARY;
18
+ this.setState({
19
+ binary
20
+ });
21
+ }
22
+
85
23
  getTileData(tile) {
86
24
  const url = _getURLFromTemplate(this.state.data, tile);
87
25
 
@@ -97,14 +35,10 @@ export default class CartoTileLayer extends MVTLayer {
97
35
  const {
98
36
  signal
99
37
  } = tile;
100
- loadOptions = { ...loadOptions,
101
- mimeType: 'application/x-protobuf'
102
- };
103
38
 
104
- if (formatTiles) {
105
- log.assert(Object.values(TILE_FORMATS).includes(formatTiles), "Invalid value for formatTiles: ".concat(formatTiles, ". Use value from TILE_FORMATS"));
106
- loadOptions.cartoTile = {
107
- formatTiles
39
+ if (formatTiles === TILE_FORMATS.BINARY) {
40
+ loadOptions = { ...loadOptions,
41
+ mimeType: 'application/vnd.carto-vector-tile'
108
42
  };
109
43
  }
110
44
 
@@ -137,6 +71,21 @@ export default class CartoTileLayer extends MVTLayer {
137
71
  return subLayer;
138
72
  }
139
73
 
74
+ getPickingInfo(params) {
75
+ const info = super.getPickingInfo(params);
76
+
77
+ if (this.state.binary && info.index !== -1) {
78
+ const {
79
+ data
80
+ } = params.sourceLayer.props;
81
+ info.object = binaryToGeojson(data, {
82
+ globalFeatureId: info.index
83
+ });
84
+ }
85
+
86
+ return info;
87
+ }
88
+
140
89
  }
141
90
 
142
91
  _defineProperty(CartoTileLayer, "layerName", 'CartoTileLayer');
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/layers/carto-tile-layer.ts"],"names":["Protobuf","log","ClipExtension","MVTLayer","_getURLFromTemplate","GeoJsonLayer","geojsonToBinary","TileReader","TILE_FORMATS","parseJSON","arrayBuffer","JSON","parse","TextDecoder","decode","parsePbf","buffer","pbf","tile","read","unpackProperties","properties","length","map","item","currentRecord","data","forEach","key","value","parseCartoTile","options","formatTiles","cartoTile","GEOJSON","features","points","lines","polygons","defaultTileFormat","BINARY","CartoTileLoader","name","version","id","module","extensions","mimeTypes","category","worker","parseSync","defaultProps","loaders","CartoTileLayer","getTileData","url","state","Promise","reject","loadOptions","getLoadOptions","fetch","props","signal","mimeType","assert","Object","values","includes","propName","layer","renderSubLayers","tileBbox","bbox","west","south","east","north","subLayerProps","autoHighlight","clipBounds","subLayer"],"mappings":"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","sourcesContent":["/* global TextDecoder */\nimport Protobuf from 'pbf';\nimport {log, DefaultProps} from '@deck.gl/core';\nimport {ClipExtension} from '@deck.gl/extensions';\nimport {\n MVTLayer,\n MVTLayerProps,\n TileLayer,\n _getURLFromTemplate,\n _Tile2DHeader,\n _TileLoadProps as TileLoadProps\n} from '@deck.gl/geo-layers';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {geojsonToBinary} from '@loaders.gl/gis';\nimport {KeyValueProperties, Tile, TileReader} from './schema/carto-tile';\nimport {TileFormat, TILE_FORMATS} from '../api/maps-api-common';\nimport {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {BinaryFeatures} from '@loaders.gl/schema';\nimport type {Feature} from 'geojson';\n\nfunction parseJSON(arrayBuffer: ArrayBuffer): any {\n return JSON.parse(new TextDecoder().decode(arrayBuffer));\n}\n\nfunction parsePbf(buffer: ArrayBuffer): Tile {\n const pbf = new Protobuf(buffer);\n const tile = TileReader.read(pbf);\n return tile;\n}\n\nfunction unpackProperties(properties: KeyValueProperties[]) {\n if (!properties || !properties.length) {\n return [];\n }\n return properties.map(item => {\n const currentRecord: Record<string, unknown> = {};\n item.data.forEach(({key, value}) => {\n currentRecord[key] = value;\n });\n return currentRecord;\n });\n}\n\nfunction parseCartoTile(arrayBuffer: ArrayBuffer, options?: LoaderOptions): BinaryFeatures | null {\n if (!arrayBuffer) return null;\n const formatTiles = options && options.cartoTile && options.cartoTile.formatTiles;\n if (formatTiles === TILE_FORMATS.GEOJSON) return geojsonToBinary(parseJSON(arrayBuffer).features);\n\n const tile = parsePbf(arrayBuffer);\n\n const {points, lines, polygons} = tile;\n const data = {\n points: {...points, properties: unpackProperties(points.properties)},\n lines: {...lines, properties: unpackProperties(lines.properties)},\n polygons: {...polygons, properties: unpackProperties(polygons.properties)}\n };\n\n // Note: there is slight, difference in `numericProps` type, however geojson/mvtlayer can cope with this\n return data as unknown as BinaryFeatures;\n}\n\nconst defaultTileFormat = TILE_FORMATS.BINARY;\n\nconst CartoTileLoader: LoaderWithParser = {\n name: 'CARTO Tile',\n version: '1',\n id: 'cartoTile',\n module: 'carto',\n extensions: ['pbf'],\n mimeTypes: [\n 'application/vnd.carto-vector-tile',\n 'application/x-protobuf' // Back-compatibility\n ],\n category: 'geometry',\n worker: false,\n parse: async (arrayBuffer, options) => parseCartoTile(arrayBuffer, options),\n parseSync: parseCartoTile,\n options: {\n cartoTile: {\n formatTiles: defaultTileFormat\n }\n }\n};\n\nconst defaultProps: DefaultProps<CartoTileLayerProps> = {\n ...MVTLayer.defaultProps,\n formatTiles: defaultTileFormat,\n loaders: [CartoTileLoader]\n};\n\n/** All properties supported by CartoTileLayer. */\nexport type CartoTileLayerProps<DataT extends Feature = Feature> = _CartoTileLayerProps &\n MVTLayerProps<DataT>;\n\n/** Properties added by CartoTileLayer. */\ntype _CartoTileLayerProps = {\n /** Use to override the default tile data format.\n *\n * Possible values are: `TILE_FORMATS.BINARY`, `TILE_FORMATS.GEOJSON` and `TILE_FORMATS.MVT`.\n *\n * Only supported when `apiVersion` is `API_VERSIONS.V3` and `format` is `FORMATS.TILEJSON`.\n */\n formatTiles?: TileFormat;\n};\n\nexport default class CartoTileLayer<\n DataT extends Feature = Feature,\n ExtraProps = {}\n> extends MVTLayer<DataT, Required<_CartoTileLayerProps> & ExtraProps> {\n static layerName = 'CartoTileLayer';\n static defaultProps = defaultProps;\n\n getTileData(tile: TileLoadProps) {\n const url = _getURLFromTemplate(this.state.data, tile);\n if (!url) {\n return Promise.reject('Invalid URL');\n }\n\n let loadOptions = this.getLoadOptions();\n const {fetch, formatTiles} = this.props;\n const {signal} = tile;\n\n loadOptions = {\n ...loadOptions,\n mimeType: 'application/x-protobuf'\n };\n\n if (formatTiles) {\n log.assert(\n Object.values(TILE_FORMATS).includes(formatTiles),\n `Invalid value for formatTiles: ${formatTiles}. Use value from TILE_FORMATS`\n );\n loadOptions.cartoTile = {formatTiles};\n }\n\n return fetch(url, {propName: 'data', layer: this, loadOptions, signal});\n }\n\n renderSubLayers(\n props: TileLayer['props'] & {\n id: string;\n data: any;\n _offset: number;\n tile: _Tile2DHeader;\n }\n ): GeoJsonLayer | null {\n if (props.data === null) {\n return null;\n }\n\n const tileBbox = props.tile.bbox as any;\n const {west, south, east, north} = tileBbox;\n\n const subLayerProps = {\n ...props,\n autoHighlight: false,\n extensions: [new ClipExtension(), ...(props.extensions || [])],\n clipBounds: [west, south, east, north]\n };\n\n const subLayer = new GeoJsonLayer(subLayerProps);\n return subLayer;\n }\n}\n"],"file":"carto-tile-layer.js"}
1
+ {"version":3,"sources":["../../../src/layers/carto-tile-layer.ts"],"names":["registerLoaders","CartoVectorTileLoader","ClipExtension","MVTLayer","_getURLFromTemplate","GeoJsonLayer","binaryToGeojson","TILE_FORMATS","defaultTileFormat","BINARY","defaultProps","formatTiles","CartoTileLayer","initializeState","binary","props","setState","getTileData","tile","url","state","data","Promise","reject","loadOptions","getLoadOptions","fetch","signal","mimeType","propName","layer","renderSubLayers","tileBbox","bbox","west","south","east","north","subLayerProps","autoHighlight","extensions","clipBounds","subLayer","getPickingInfo","params","info","index","sourceLayer","object","globalFeatureId"],"mappings":"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","sourcesContent":["import {registerLoaders} from '@loaders.gl/core';\nimport CartoVectorTileLoader from './schema/carto-vector-tile-loader';\nregisterLoaders([CartoVectorTileLoader]);\n\nimport {DefaultProps} from '@deck.gl/core';\nimport {ClipExtension} from '@deck.gl/extensions';\nimport {\n MVTLayer,\n MVTLayerProps,\n TileLayer,\n _getURLFromTemplate,\n _Tile2DHeader,\n _TileLoadProps as TileLoadProps\n} from '@deck.gl/geo-layers';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {binaryToGeojson, geojsonToBinary} from '@loaders.gl/gis';\nimport type {BinaryFeatures} from '@loaders.gl/schema';\nimport {TileFormat, TILE_FORMATS} from '../api/maps-api-common';\nimport type {Feature} from 'geojson';\n\nconst defaultTileFormat = TILE_FORMATS.BINARY;\n\nconst defaultProps: DefaultProps<CartoTileLayerProps> = {\n ...MVTLayer.defaultProps,\n formatTiles: defaultTileFormat\n};\n\n/** All properties supported by CartoTileLayer. */\nexport type CartoTileLayerProps<DataT extends Feature = Feature> = _CartoTileLayerProps &\n MVTLayerProps<DataT>;\n\n/** Properties added by CartoTileLayer. */\ntype _CartoTileLayerProps = {\n /** Use to override the default tile data format.\n *\n * Possible values are: `TILE_FORMATS.BINARY`, `TILE_FORMATS.GEOJSON` and `TILE_FORMATS.MVT`.\n *\n * Only supported when `apiVersion` is `API_VERSIONS.V3` and `format` is `FORMATS.TILEJSON`.\n */\n formatTiles?: TileFormat;\n};\n\nexport default class CartoTileLayer<\n DataT extends Feature = Feature,\n ExtraProps = {}\n> extends MVTLayer<DataT, Required<_CartoTileLayerProps> & ExtraProps> {\n static layerName = 'CartoTileLayer';\n static defaultProps = defaultProps;\n\n initializeState(): void {\n super.initializeState();\n const binary = this.props.formatTiles === TILE_FORMATS.BINARY;\n this.setState({binary});\n }\n\n getTileData(tile: TileLoadProps) {\n const url = _getURLFromTemplate(this.state.data, tile);\n if (!url) {\n return Promise.reject('Invalid URL');\n }\n\n let loadOptions = this.getLoadOptions();\n const {fetch, formatTiles} = this.props;\n const {signal} = tile;\n\n // The backend doesn't yet support our custom mime-type, so force it here\n // TODO remove once backend sends the correct mime-type\n if (formatTiles === TILE_FORMATS.BINARY) {\n loadOptions = {\n ...loadOptions,\n mimeType: 'application/vnd.carto-vector-tile'\n };\n }\n\n return fetch(url, {propName: 'data', layer: this, loadOptions, signal});\n }\n\n renderSubLayers(\n props: TileLayer['props'] & {\n id: string;\n data: any;\n _offset: number;\n tile: _Tile2DHeader;\n }\n ): GeoJsonLayer | null {\n if (props.data === null) {\n return null;\n }\n\n const tileBbox = props.tile.bbox as any;\n const {west, south, east, north} = tileBbox;\n\n const subLayerProps = {\n ...props,\n autoHighlight: false,\n extensions: [new ClipExtension(), ...(props.extensions || [])],\n clipBounds: [west, south, east, north]\n };\n\n const subLayer = new GeoJsonLayer(subLayerProps);\n return subLayer;\n }\n\n getPickingInfo(params) {\n const info = super.getPickingInfo(params);\n\n if (this.state.binary && info.index !== -1) {\n const {data} = params.sourceLayer!.props;\n info.object = binaryToGeojson(data as BinaryFeatures, {globalFeatureId: info.index}) as DataT;\n }\n\n return info;\n }\n}\n"],"file":"carto-tile-layer.js"}
@@ -82,7 +82,12 @@ export default class H3TileLayer extends CompositeLayer {
82
82
  TilesetClass: H3Tileset2D,
83
83
  renderSubLayers,
84
84
  minZoom: minresolution,
85
- maxZoom: maxresolution
85
+ maxZoom: maxresolution,
86
+ loadOptions: { ...this.getLoadOptions(),
87
+ cartoSpatialTile: {
88
+ scheme: 'h3'
89
+ }
90
+ }
86
91
  })];
87
92
  }
88
93
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/layers/h3-tile-layer.ts"],"names":["CompositeLayer","H3HexagonLayer","H3Tileset2D","getHexagonResolution","SpatialIndexTileLayer","renderSubLayers","props","data","index","tile","length","getHexagon","d","id","centerHexagon","highPrecision","defaultProps","aggregationResLevel","H3TileLayer","initializeState","_checkH3Lib","setState","tileJSON","updateState","changeFlags","dataChanged","tiles","renderLayers","state","minresolution","parseInt","maxresolution","minZoom","Math","max","zoom","latitude","maxZoom","min","TilesetClass"],"mappings":";AAAA,SACEA,cADF,QAOO,eAPP;AAQA,SAAQC,cAAR,QAA6B,qBAA7B;AACA,OAAOC,WAAP,IAAqBC,oBAArB,QAAgD,iBAAhD;AACA,OAAOC,qBAAP,MAAkC,4BAAlC;;AAEA,MAAMC,eAAe,GAAGC,KAAK,IAAI;AAC/B,QAAM;AAACC,IAAAA;AAAD,MAASD,KAAf;AACA,QAAM;AAACE,IAAAA;AAAD,MAAUF,KAAK,CAACG,IAAtB;AACA,MAAI,CAACF,IAAD,IAAS,CAACA,IAAI,CAACG,MAAnB,EAA2B,OAAO,IAAP;AAE3B,SAAO,IAAIT,cAAJ,CAAmBK,KAAnB,EAA0B;AAC/BK,IAAAA,UAAU,EAAEC,CAAC,IAAIA,CAAC,CAACC,EADY;AAE/BC,IAAAA,aAAa,EAAEN,KAFgB;AAG/BO,IAAAA,aAAa,EAAE;AAHgB,GAA1B,CAAP;AAKD,CAVD;;AAYA,MAAMC,YAA+C,GAAG;AACtDC,EAAAA,mBAAmB,EAAE;AADiC,CAAxD;AAgBA,eAAe,MAAMC,WAAN,SAAyDlB,cAAzD,CAEb;AAAA;AAAA;;AAAA;AAAA;;AASAmB,EAAAA,eAAe,GAAS;AACtBlB,IAAAA,cAAc,CAACmB,WAAf;;AACA,SAAKC,QAAL,CAAc;AAACd,MAAAA,IAAI,EAAE,IAAP;AAAae,MAAAA,QAAQ,EAAE;AAAvB,KAAd;AACD;;AAEDC,EAAAA,WAAW,CAAC;AAACC,IAAAA;AAAD,GAAD,EAA8C;AACvD,QAAIA,WAAW,CAACC,WAAhB,EAA6B;AAC3B,UAAI;AAAClB,QAAAA;AAAD,UAAS,KAAKD,KAAlB;AACA,YAAMgB,QAAQ,GAAGf,IAAjB;AACAA,MAAAA,IAAI,GAAIe,QAAD,CAAkBI,KAAzB;AACA,WAAKL,QAAL,CAAc;AAACd,QAAAA,IAAD;AAAOe,QAAAA;AAAP,OAAd;AACD;AACF;;AAEDK,EAAAA,YAAY,GAA8B;AACxC,UAAM;AAACpB,MAAAA,IAAD;AAAOe,MAAAA;AAAP,QAAmB,KAAKM,KAA9B;AACA,QAAIC,aAAa,GAAGC,QAAQ,CAACR,QAAQ,CAACO,aAAV,CAA5B;AACA,QAAIE,aAAa,GAAGD,QAAQ,CAACR,QAAQ,CAACS,aAAV,CAA5B;;AAIA,QAAI,KAAKzB,KAAL,CAAW0B,OAAf,EAAwB;AACtBH,MAAAA,aAAa,GAAGI,IAAI,CAACC,GAAL,CACdL,aADc,EAEd1B,oBAAoB,CAAC;AAACgC,QAAAA,IAAI,EAAE,KAAK7B,KAAL,CAAW0B,OAAlB;AAA2BI,QAAAA,QAAQ,EAAE;AAArC,OAAD,CAFN,CAAhB;AAID;;AACD,QAAI,KAAK9B,KAAL,CAAW+B,OAAf,EAAwB;AACtBN,MAAAA,aAAa,GAAGE,IAAI,CAACK,GAAL,CACdP,aADc,EAEd5B,oBAAoB,CAAC;AAACgC,QAAAA,IAAI,EAAE,KAAK7B,KAAL,CAAW+B,OAAlB;AAA2BD,QAAAA,QAAQ,EAAE;AAArC,OAAD,CAFN,CAAhB;AAID;;AAID,WAAO,CACL,IAAIhC,qBAAJ,CAA0B,KAAKE,KAA/B,EAAsC;AACpCO,MAAAA,EAAE,0BAAmB,KAAKP,KAAL,CAAWO,EAA9B,CADkC;AAEpCN,MAAAA,IAFoC;AAIpCgC,MAAAA,YAAY,EAAErC,WAJsB;AAKpCG,MAAAA,eALoC;AAOpC2B,MAAAA,OAAO,EAAEH,aAP2B;AAQpCQ,MAAAA,OAAO,EAAEN;AAR2B,KAAtC,CADK,CAAP;AAYD;;AAzDD;;gBAFmBb,W,eAGA,a;;gBAHAA,W,kBAIGF,Y","sourcesContent":["import {\n CompositeLayer,\n CompositeLayerProps,\n Layer,\n LayersList,\n UpdateParameters,\n DefaultProps\n} from '@deck.gl/core';\nimport {H3HexagonLayer} from '@deck.gl/geo-layers';\nimport H3Tileset2D, {getHexagonResolution} from './h3-tileset-2d';\nimport SpatialIndexTileLayer from './spatial-index-tile-layer';\n\nconst renderSubLayers = props => {\n const {data} = props;\n const {index} = props.tile;\n if (!data || !data.length) return null;\n\n return new H3HexagonLayer(props, {\n getHexagon: d => d.id,\n centerHexagon: index,\n highPrecision: true\n });\n};\n\nconst defaultProps: DefaultProps<H3HexagonLayerProps> = {\n aggregationResLevel: 4\n};\n\n/** All properties supported by H3TileLayer. */\nexport type H3TileLayerProps<DataT = any> = _H3TileLayerProps<DataT> & CompositeLayerProps<DataT>;\n\n// TODO: use type from h3-hexagon-layer when available\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ntype H3HexagonLayerProps<DataT = any> = Record<string, any>;\n\n/** Properties added by H3TileLayer. */\ntype _H3TileLayerProps<DataT> = H3HexagonLayerProps<DataT> & {\n aggregationResLevel?: number;\n};\n\nexport default class H3TileLayer<DataT = any, ExtraPropsT = {}> extends CompositeLayer<\n ExtraPropsT & Required<_H3TileLayerProps<DataT>>\n> {\n static layerName = 'H3TileLayer';\n static defaultProps = defaultProps;\n\n state!: {\n tileJSON: any;\n data: any;\n };\n\n initializeState(): void {\n H3HexagonLayer._checkH3Lib();\n this.setState({data: null, tileJSON: null});\n }\n\n updateState({changeFlags}: UpdateParameters<this>): void {\n if (changeFlags.dataChanged) {\n let {data} = this.props;\n const tileJSON = data;\n data = (tileJSON as any).tiles;\n this.setState({data, tileJSON});\n }\n }\n\n renderLayers(): Layer | null | LayersList {\n const {data, tileJSON} = this.state;\n let minresolution = parseInt(tileJSON.minresolution);\n let maxresolution = parseInt(tileJSON.maxresolution);\n\n // Convert Mercator zooms provided in props into H3 res levels\n // and clip into valid range provided from the tilejson\n if (this.props.minZoom) {\n minresolution = Math.max(\n minresolution,\n getHexagonResolution({zoom: this.props.minZoom, latitude: 0})\n );\n }\n if (this.props.maxZoom) {\n maxresolution = Math.min(\n maxresolution,\n getHexagonResolution({zoom: this.props.maxZoom, latitude: 0})\n );\n }\n\n // The naming is unfortunate, but minZoom & maxZoom in the context\n // of a Tileset2D refer to the resolution levels, not the Mercator zooms\n return [\n new SpatialIndexTileLayer(this.props, {\n id: `h3-tile-layer-${this.props.id}`,\n data,\n // @ts-expect-error Tileset2D should be generic over TileIndex\n TilesetClass: H3Tileset2D,\n renderSubLayers,\n // minZoom and maxZoom are H3 resolutions, however we must use this naming as that is what the Tileset2D class expects\n minZoom: minresolution,\n maxZoom: maxresolution\n })\n ];\n }\n}\n"],"file":"h3-tile-layer.js"}
1
+ {"version":3,"sources":["../../../src/layers/h3-tile-layer.ts"],"names":["CompositeLayer","H3HexagonLayer","H3Tileset2D","getHexagonResolution","SpatialIndexTileLayer","renderSubLayers","props","data","index","tile","length","getHexagon","d","id","centerHexagon","highPrecision","defaultProps","aggregationResLevel","H3TileLayer","initializeState","_checkH3Lib","setState","tileJSON","updateState","changeFlags","dataChanged","tiles","renderLayers","state","minresolution","parseInt","maxresolution","minZoom","Math","max","zoom","latitude","maxZoom","min","TilesetClass","loadOptions","getLoadOptions","cartoSpatialTile","scheme"],"mappings":"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","sourcesContent":["import {\n CompositeLayer,\n CompositeLayerProps,\n Layer,\n LayersList,\n UpdateParameters,\n DefaultProps\n} from '@deck.gl/core';\nimport {H3HexagonLayer} from '@deck.gl/geo-layers';\nimport H3Tileset2D, {getHexagonResolution} from './h3-tileset-2d';\nimport SpatialIndexTileLayer from './spatial-index-tile-layer';\n\nconst renderSubLayers = props => {\n const {data} = props;\n const {index} = props.tile;\n if (!data || !data.length) return null;\n\n return new H3HexagonLayer(props, {\n getHexagon: d => d.id,\n centerHexagon: index,\n highPrecision: true\n });\n};\n\nconst defaultProps: DefaultProps<H3HexagonLayerProps> = {\n aggregationResLevel: 4\n};\n\n/** All properties supported by H3TileLayer. */\nexport type H3TileLayerProps<DataT = any> = _H3TileLayerProps<DataT> & CompositeLayerProps<DataT>;\n\n// TODO: use type from h3-hexagon-layer when available\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ntype H3HexagonLayerProps<DataT = any> = Record<string, any>;\n\n/** Properties added by H3TileLayer. */\ntype _H3TileLayerProps<DataT> = H3HexagonLayerProps<DataT> & {\n aggregationResLevel?: number;\n};\n\nexport default class H3TileLayer<DataT = any, ExtraPropsT = {}> extends CompositeLayer<\n ExtraPropsT & Required<_H3TileLayerProps<DataT>>\n> {\n static layerName = 'H3TileLayer';\n static defaultProps = defaultProps;\n\n state!: {\n tileJSON: any;\n data: any;\n };\n\n initializeState(): void {\n H3HexagonLayer._checkH3Lib();\n this.setState({data: null, tileJSON: null});\n }\n\n updateState({changeFlags}: UpdateParameters<this>): void {\n if (changeFlags.dataChanged) {\n let {data} = this.props;\n const tileJSON = data;\n data = (tileJSON as any).tiles;\n this.setState({data, tileJSON});\n }\n }\n\n renderLayers(): Layer | null | LayersList {\n const {data, tileJSON} = this.state;\n let minresolution = parseInt(tileJSON.minresolution);\n let maxresolution = parseInt(tileJSON.maxresolution);\n\n // Convert Mercator zooms provided in props into H3 res levels\n // and clip into valid range provided from the tilejson\n if (this.props.minZoom) {\n minresolution = Math.max(\n minresolution,\n getHexagonResolution({zoom: this.props.minZoom, latitude: 0})\n );\n }\n if (this.props.maxZoom) {\n maxresolution = Math.min(\n maxresolution,\n getHexagonResolution({zoom: this.props.maxZoom, latitude: 0})\n );\n }\n\n // The naming is unfortunate, but minZoom & maxZoom in the context\n // of a Tileset2D refer to the resolution levels, not the Mercator zooms\n return [\n new SpatialIndexTileLayer(this.props, {\n id: `h3-tile-layer-${this.props.id}`,\n data,\n // @ts-expect-error Tileset2D should be generic over TileIndex\n TilesetClass: H3Tileset2D,\n renderSubLayers,\n // minZoom and maxZoom are H3 resolutions, however we must use this naming as that is what the Tileset2D class expects\n minZoom: minresolution,\n maxZoom: maxresolution,\n loadOptions: {\n ...this.getLoadOptions(),\n cartoSpatialTile: {\n scheme: 'h3'\n }\n }\n })\n ];\n }\n}\n"],"file":"h3-tile-layer.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/layers/quadbin-layer.ts"],"names":["_GeoCellLayer","GeoCellLayer","getQuadbinPolygon","defaultProps","getQuadbin","type","value","d","quadbin","QuadbinLayer","indexToBounds","data","props","_normalize","positionFormat","getPolygon","x","objectInfo"],"mappings":";AACA,SACEA,aAAa,IAAIC,YADnB,QAGO,qBAHP;AAIA,SAAQC,iBAAR,QAAgC,iBAAhC;AAEA,MAAMC,YAA6C,GAAG;AACpDC,EAAAA,UAAU,EAAE;AAACC,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAEC,CAAC,IAAIA,CAAC,CAACC;AAAjC;AADwC,CAAtD;AAiBA,eAAe,MAAMC,YAAN,SAAyDR,YAAzD,CAGb;AAIAS,EAAAA,aAAa,GAA0C;AACrD,UAAM;AAACC,MAAAA,IAAD;AAAOP,MAAAA;AAAP,QAAqB,KAAKQ,KAAhC;AAEA,WAAO;AACLD,MAAAA,IADK;AAELE,MAAAA,UAAU,EAAE,KAFP;AAGLC,MAAAA,cAAc,EAAE,IAHX;AAKLC,MAAAA,UAAU,EAAE,CAACC,CAAD,EAAWC,UAAX,KAA0Bf,iBAAiB,CAACE,UAAU,CAACY,CAAD,EAAIC,UAAJ,CAAX;AALlD,KAAP;AAOD;;AAdD;;gBAHmBR,Y,eAIA,c;;gBAJAA,Y,kBAKGN,Y","sourcesContent":["import {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport {\n _GeoCellLayer as GeoCellLayer,\n _GeoCellLayerProps as GeoCellLayerProps\n} from '@deck.gl/geo-layers';\nimport {getQuadbinPolygon} from './quadbin-utils';\n\nconst defaultProps: DefaultProps<QuadbinLayerProps> = {\n getQuadbin: {type: 'accessor', value: d => d.quadbin}\n};\n\n/** All properties supported by QuadbinLayer. */\nexport type QuadbinLayerProps<DataT = any> = _QuadbinLayerProps<DataT> & GeoCellLayerProps<DataT>;\n\n/** Properties added by QuadbinLayer. */\ntype _QuadbinLayerProps<DataT> = {\n /**\n * Called for each data object to retrieve the quadbin string identifier.\n *\n * By default, it reads `quadbin` property of data object.\n */\n getQuadbin?: AccessorFunction<DataT, string>;\n};\n\nexport default class QuadbinLayer<DataT = any, ExtraProps = {}> extends GeoCellLayer<\n DataT,\n Required<_QuadbinLayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'QuadbinLayer';\n static defaultProps = defaultProps;\n\n indexToBounds(): Partial<GeoCellLayer['props']> | null {\n const {data, getQuadbin} = this.props;\n\n return {\n data,\n _normalize: false,\n positionFormat: 'XY',\n\n getPolygon: (x: DataT, objectInfo) => getQuadbinPolygon(getQuadbin(x, objectInfo))\n };\n }\n}\n"],"file":"quadbin-layer.js"}
1
+ {"version":3,"sources":["../../../src/layers/quadbin-layer.ts"],"names":["_GeoCellLayer","GeoCellLayer","getQuadbinPolygon","defaultProps","getQuadbin","type","value","d","quadbin","QuadbinLayer","indexToBounds","data","props","_normalize","positionFormat","getPolygon","x","objectInfo"],"mappings":";AACA,SACEA,aAAa,IAAIC,YADnB,QAGO,qBAHP;AAIA,SAAQC,iBAAR,QAAgC,iBAAhC;AAEA,MAAMC,YAA6C,GAAG;AACpDC,EAAAA,UAAU,EAAE;AAACC,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAEC,CAAC,IAAIA,CAAC,CAACC;AAAjC;AADwC,CAAtD;AAiBA,eAAe,MAAMC,YAAN,SAAyDR,YAAzD,CAGb;AAIAS,EAAAA,aAAa,GAA0C;AACrD,UAAM;AAACC,MAAAA,IAAD;AAAOP,MAAAA;AAAP,QAAqB,KAAKQ,KAAhC;AAEA,WAAO;AACLD,MAAAA,IADK;AAELE,MAAAA,UAAU,EAAE,KAFP;AAGLC,MAAAA,cAAc,EAAE,IAHX;AAKLC,MAAAA,UAAU,EAAE,CAACC,CAAD,EAAWC,UAAX,KAA0Bf,iBAAiB,CAACE,UAAU,CAACY,CAAD,EAAIC,UAAJ,CAAX;AALlD,KAAP;AAOD;;AAdD;;gBAHmBR,Y,eAIA,c;;gBAJAA,Y,kBAKGN,Y","sourcesContent":["import {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport {\n _GeoCellLayer as GeoCellLayer,\n _GeoCellLayerProps as GeoCellLayerProps\n} from '@deck.gl/geo-layers';\nimport {getQuadbinPolygon} from './quadbin-utils';\n\nconst defaultProps: DefaultProps<QuadbinLayerProps> = {\n getQuadbin: {type: 'accessor', value: d => d.quadbin}\n};\n\n/** All properties supported by QuadbinLayer. */\nexport type QuadbinLayerProps<DataT = any> = _QuadbinLayerProps<DataT> & GeoCellLayerProps<DataT>;\n\n/** Properties added by QuadbinLayer. */\ntype _QuadbinLayerProps<DataT> = {\n /**\n * Called for each data object to retrieve the quadbin string identifier.\n *\n * By default, it reads `quadbin` property of data object.\n */\n getQuadbin?: AccessorFunction<DataT, bigint>;\n};\n\nexport default class QuadbinLayer<DataT = any, ExtraProps = {}> extends GeoCellLayer<\n DataT,\n Required<_QuadbinLayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'QuadbinLayer';\n static defaultProps = defaultProps;\n\n indexToBounds(): Partial<GeoCellLayer['props']> | null {\n const {data, getQuadbin} = this.props;\n\n return {\n data,\n _normalize: false,\n positionFormat: 'XY',\n\n getPolygon: (x: DataT, objectInfo) => getQuadbinPolygon(getQuadbin(x, objectInfo))\n };\n }\n}\n"],"file":"quadbin-layer.js"}
@@ -58,7 +58,12 @@ export default class QuadbinTileLayer extends CompositeLayer {
58
58
  data,
59
59
  TilesetClass: QuadbinTileset2D,
60
60
  renderSubLayers,
61
- maxZoom
61
+ maxZoom,
62
+ loadOptions: { ...this.getLoadOptions(),
63
+ cartoSpatialTile: {
64
+ scheme: 'quadbin'
65
+ }
66
+ }
62
67
  })];
63
68
  }
64
69
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/layers/quadbin-tile-layer.ts"],"names":["CompositeLayer","QuadbinLayer","QuadbinTileset2D","SpatialIndexTileLayer","renderSubLayers","props","data","length","getQuadbin","d","id","defaultProps","aggregationResLevel","QuadbinTileLayer","initializeState","setState","tileJSON","updateState","changeFlags","dataChanged","tiles","renderLayers","state","maxZoom","parseInt","maxresolution","TilesetClass"],"mappings":";AAAA,SACEA,cADF,QAOO,eAPP;AAQA,OAAOC,YAAP,MAA8C,iBAA9C;AACA,OAAOC,gBAAP,MAA6B,sBAA7B;AACA,OAAOC,qBAAP,MAAkC,4BAAlC;;AAEA,MAAMC,eAAe,GAAGC,KAAK,IAAI;AAC/B,QAAM;AAACC,IAAAA;AAAD,MAASD,KAAf;AACA,MAAI,CAACC,IAAD,IAAS,CAACA,IAAI,CAACC,MAAnB,EAA2B,OAAO,IAAP;AAC3B,SAAO,IAAIN,YAAJ,CAAiBI,KAAjB,EAAwB;AAC7BG,IAAAA,UAAU,EAAEC,CAAC,IAAIA,CAAC,CAACC;AADU,GAAxB,CAAP;AAGD,CAND;;AAQA,MAAMC,YAAiD,GAAG;AACxDC,EAAAA,mBAAmB,EAAE;AADmC,CAA1D;AAaA,eAAe,MAAMC,gBAAN,SAA6Db,cAA7D,CAEb;AAAA;AAAA;;AAAA;AAAA;;AAQAc,EAAAA,eAAe,GAAS;AACtB,SAAKC,QAAL,CAAc;AAACT,MAAAA,IAAI,EAAE,IAAP;AAAaU,MAAAA,QAAQ,EAAE;AAAvB,KAAd;AACD;;AAEDC,EAAAA,WAAW,CAAC;AAACC,IAAAA;AAAD,GAAD,EAA8C;AACvD,QAAIA,WAAW,CAACC,WAAhB,EAA6B;AAC3B,UAAI;AAACb,QAAAA;AAAD,UAAS,KAAKD,KAAlB;AACA,YAAMW,QAAQ,GAAGV,IAAjB;AACAA,MAAAA,IAAI,GAAIU,QAAD,CAAkBI,KAAzB;AACA,WAAKL,QAAL,CAAc;AAACT,QAAAA,IAAD;AAAOU,QAAAA;AAAP,OAAd;AACD;AACF;;AAEDK,EAAAA,YAAY,GAA8B;AACxC,UAAM;AAACf,MAAAA,IAAD;AAAOU,MAAAA;AAAP,QAAmB,KAAKM,KAA9B;AACA,UAAMC,OAAO,GAAGC,QAAQ,CAACR,QAAD,aAACA,QAAD,uBAACA,QAAQ,CAAES,aAAX,CAAxB;AACA,WAAO,CACL,IAAItB,qBAAJ,CAA0B,KAAKE,KAA/B,EAAsC;AACpCK,MAAAA,EAAE,+BAAwB,KAAKL,KAAL,CAAWK,EAAnC,CADkC;AAEpCJ,MAAAA,IAFoC;AAIpCoB,MAAAA,YAAY,EAAExB,gBAJsB;AAKpCE,MAAAA,eALoC;AAMpCmB,MAAAA;AANoC,KAAtC,CADK,CAAP;AAUD;;AAlCD;;gBAFmBV,gB,eAGA,kB;;gBAHAA,gB,kBAIGF,Y","sourcesContent":["import {\n CompositeLayer,\n CompositeLayerProps,\n Layer,\n LayersList,\n UpdateParameters,\n DefaultProps\n} from '@deck.gl/core';\nimport QuadbinLayer, {QuadbinLayerProps} from './quadbin-layer';\nimport QuadbinTileset2D from './quadbin-tileset-2d';\nimport SpatialIndexTileLayer from './spatial-index-tile-layer';\n\nconst renderSubLayers = props => {\n const {data} = props;\n if (!data || !data.length) return null;\n return new QuadbinLayer(props, {\n getQuadbin: d => d.id\n });\n};\n\nconst defaultProps: DefaultProps<QuadbinTileLayerProps> = {\n aggregationResLevel: 6\n};\n\n/** All properties supported by QuadbinTileLayer. */\nexport type QuadbinTileLayerProps<DataT = any> = _QuadbinTileLayerProps<DataT> &\n CompositeLayerProps<DataT>;\n\n/** Properties added by QuadbinTileLayer. */\ntype _QuadbinTileLayerProps<DataT> = QuadbinLayerProps<DataT> & {\n aggregationResLevel?: number;\n};\n\nexport default class QuadbinTileLayer<DataT = any, ExtraProps = {}> extends CompositeLayer<\n ExtraProps & Required<_QuadbinTileLayerProps<DataT>>\n> {\n static layerName = 'QuadbinTileLayer';\n static defaultProps = defaultProps;\n\n state!: {\n tileJSON: any;\n data: any;\n };\n initializeState(): void {\n this.setState({data: null, tileJSON: null});\n }\n\n updateState({changeFlags}: UpdateParameters<this>): void {\n if (changeFlags.dataChanged) {\n let {data} = this.props;\n const tileJSON = data;\n data = (tileJSON as any).tiles;\n this.setState({data, tileJSON});\n }\n }\n\n renderLayers(): Layer | null | LayersList {\n const {data, tileJSON} = this.state;\n const maxZoom = parseInt(tileJSON?.maxresolution);\n return [\n new SpatialIndexTileLayer(this.props, {\n id: `quadbin-tile-layer-${this.props.id}`,\n data,\n // TODO: Tileset2D should be generic over TileIndex type\n TilesetClass: QuadbinTileset2D as any,\n renderSubLayers,\n maxZoom\n })\n ];\n }\n}\n"],"file":"quadbin-tile-layer.js"}
1
+ {"version":3,"sources":["../../../src/layers/quadbin-tile-layer.ts"],"names":["CompositeLayer","QuadbinLayer","QuadbinTileset2D","SpatialIndexTileLayer","renderSubLayers","props","data","length","getQuadbin","d","id","defaultProps","aggregationResLevel","QuadbinTileLayer","initializeState","setState","tileJSON","updateState","changeFlags","dataChanged","tiles","renderLayers","state","maxZoom","parseInt","maxresolution","TilesetClass","loadOptions","getLoadOptions","cartoSpatialTile","scheme"],"mappings":";AAAA,SACEA,cADF,QAOO,eAPP;AAQA,OAAOC,YAAP,MAA8C,iBAA9C;AACA,OAAOC,gBAAP,MAA6B,sBAA7B;AACA,OAAOC,qBAAP,MAAkC,4BAAlC;;AAEA,MAAMC,eAAe,GAAGC,KAAK,IAAI;AAC/B,QAAM;AAACC,IAAAA;AAAD,MAASD,KAAf;AACA,MAAI,CAACC,IAAD,IAAS,CAACA,IAAI,CAACC,MAAnB,EAA2B,OAAO,IAAP;AAC3B,SAAO,IAAIN,YAAJ,CAAiBI,KAAjB,EAAwB;AAC7BG,IAAAA,UAAU,EAAEC,CAAC,IAAIA,CAAC,CAACC;AADU,GAAxB,CAAP;AAGD,CAND;;AAQA,MAAMC,YAAiD,GAAG;AACxDC,EAAAA,mBAAmB,EAAE;AADmC,CAA1D;AAaA,eAAe,MAAMC,gBAAN,SAA6Db,cAA7D,CAEb;AAAA;AAAA;;AAAA;AAAA;;AAQAc,EAAAA,eAAe,GAAS;AACtB,SAAKC,QAAL,CAAc;AAACT,MAAAA,IAAI,EAAE,IAAP;AAAaU,MAAAA,QAAQ,EAAE;AAAvB,KAAd;AACD;;AAEDC,EAAAA,WAAW,CAAC;AAACC,IAAAA;AAAD,GAAD,EAA8C;AACvD,QAAIA,WAAW,CAACC,WAAhB,EAA6B;AAC3B,UAAI;AAACb,QAAAA;AAAD,UAAS,KAAKD,KAAlB;AACA,YAAMW,QAAQ,GAAGV,IAAjB;AACAA,MAAAA,IAAI,GAAIU,QAAD,CAAkBI,KAAzB;AACA,WAAKL,QAAL,CAAc;AAACT,QAAAA,IAAD;AAAOU,QAAAA;AAAP,OAAd;AACD;AACF;;AAEDK,EAAAA,YAAY,GAA8B;AACxC,UAAM;AAACf,MAAAA,IAAD;AAAOU,MAAAA;AAAP,QAAmB,KAAKM,KAA9B;AACA,UAAMC,OAAO,GAAGC,QAAQ,CAACR,QAAD,aAACA,QAAD,uBAACA,QAAQ,CAAES,aAAX,CAAxB;AACA,WAAO,CACL,IAAItB,qBAAJ,CAA0B,KAAKE,KAA/B,EAAsC;AACpCK,MAAAA,EAAE,+BAAwB,KAAKL,KAAL,CAAWK,EAAnC,CADkC;AAEpCJ,MAAAA,IAFoC;AAIpCoB,MAAAA,YAAY,EAAExB,gBAJsB;AAKpCE,MAAAA,eALoC;AAMpCmB,MAAAA,OANoC;AAOpCI,MAAAA,WAAW,EAAE,EACX,GAAG,KAAKC,cAAL,EADQ;AAEXC,QAAAA,gBAAgB,EAAE;AAChBC,UAAAA,MAAM,EAAE;AADQ;AAFP;AAPuB,KAAtC,CADK,CAAP;AAgBD;;AAxCD;;gBAFmBjB,gB,eAGA,kB;;gBAHAA,gB,kBAIGF,Y","sourcesContent":["import {\n CompositeLayer,\n CompositeLayerProps,\n Layer,\n LayersList,\n UpdateParameters,\n DefaultProps\n} from '@deck.gl/core';\nimport QuadbinLayer, {QuadbinLayerProps} from './quadbin-layer';\nimport QuadbinTileset2D from './quadbin-tileset-2d';\nimport SpatialIndexTileLayer from './spatial-index-tile-layer';\n\nconst renderSubLayers = props => {\n const {data} = props;\n if (!data || !data.length) return null;\n return new QuadbinLayer(props, {\n getQuadbin: d => d.id\n });\n};\n\nconst defaultProps: DefaultProps<QuadbinTileLayerProps> = {\n aggregationResLevel: 6\n};\n\n/** All properties supported by QuadbinTileLayer. */\nexport type QuadbinTileLayerProps<DataT = any> = _QuadbinTileLayerProps<DataT> &\n CompositeLayerProps<DataT>;\n\n/** Properties added by QuadbinTileLayer. */\ntype _QuadbinTileLayerProps<DataT> = QuadbinLayerProps<DataT> & {\n aggregationResLevel?: number;\n};\n\nexport default class QuadbinTileLayer<DataT = any, ExtraProps = {}> extends CompositeLayer<\n ExtraProps & Required<_QuadbinTileLayerProps<DataT>>\n> {\n static layerName = 'QuadbinTileLayer';\n static defaultProps = defaultProps;\n\n state!: {\n tileJSON: any;\n data: any;\n };\n initializeState(): void {\n this.setState({data: null, tileJSON: null});\n }\n\n updateState({changeFlags}: UpdateParameters<this>): void {\n if (changeFlags.dataChanged) {\n let {data} = this.props;\n const tileJSON = data;\n data = (tileJSON as any).tiles;\n this.setState({data, tileJSON});\n }\n }\n\n renderLayers(): Layer | null | LayersList {\n const {data, tileJSON} = this.state;\n const maxZoom = parseInt(tileJSON?.maxresolution);\n return [\n new SpatialIndexTileLayer(this.props, {\n id: `quadbin-tile-layer-${this.props.id}`,\n data,\n // TODO: Tileset2D should be generic over TileIndex type\n TilesetClass: QuadbinTileset2D as any,\n renderSubLayers,\n maxZoom,\n loadOptions: {\n ...this.getLoadOptions(),\n cartoSpatialTile: {\n scheme: 'quadbin'\n }\n }\n })\n ];\n }\n}\n"],"file":"quadbin-tile-layer.js"}
@@ -1,35 +1,37 @@
1
1
  import { _Tileset2D as Tileset2D } from '@deck.gl/geo-layers';
2
- import { tileToQuadbin, quadbinToTile, quadbinParent, quadbinZoom } from './quadbin-utils';
2
+ import { bigIntToHex, cellToParent, cellToTile, getResolution, tileToCell } from 'quadbin';
3
3
  export default class QuadbinTileset2D extends Tileset2D {
4
4
  getTileIndices(opts) {
5
- return super.getTileIndices(opts).map(tileToQuadbin).map(i => ({
6
- i
5
+ return super.getTileIndices(opts).map(tileToCell).map(q => ({
6
+ q,
7
+ i: bigIntToHex(q)
7
8
  }));
8
9
  }
9
10
 
10
11
  getTileId({
12
+ q,
11
13
  i
12
14
  }) {
13
- return i;
15
+ return i || bigIntToHex(q);
14
16
  }
15
17
 
16
18
  getTileMetadata({
17
- i
19
+ q
18
20
  }) {
19
- return super.getTileMetadata(quadbinToTile(i));
21
+ return super.getTileMetadata(cellToTile(q));
20
22
  }
21
23
 
22
24
  getTileZoom({
23
- i
25
+ q
24
26
  }) {
25
- return Number(quadbinZoom(i));
27
+ return Number(getResolution(q));
26
28
  }
27
29
 
28
30
  getParentIndex({
29
- i
31
+ q
30
32
  }) {
31
33
  return {
32
- i: quadbinParent(i)
34
+ q: cellToParent(q)
33
35
  };
34
36
  }
35
37
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/layers/quadbin-tileset-2d.ts"],"names":["_Tileset2D","Tileset2D","tileToQuadbin","quadbinToTile","quadbinParent","quadbinZoom","QuadbinTileset2D","getTileIndices","opts","map","i","getTileId","getTileMetadata","getTileZoom","Number","getParentIndex"],"mappings":"AAAA,SAAQA,UAAU,IAAIC,SAAtB,QAAsC,qBAAtC;AACA,SAAQC,aAAR,EAAuBC,aAAvB,EAAsCC,aAAtC,EAAqDC,WAArD,QAAuE,iBAAvE;AAIA,eAAe,MAAMC,gBAAN,SAA+BL,SAA/B,CAAyC;AAEtDM,EAAAA,cAAc,CAACC,IAAD,EAA2B;AACvC,WAAO,MACJD,cADI,CACWC,IADX,EAEJC,GAFI,CAEAP,aAFA,EAGJO,GAHI,CAGAC,CAAC,KAAK;AAACA,MAAAA;AAAD,KAAL,CAHD,CAAP;AAID;;AAGDC,EAAAA,SAAS,CAAC;AAACD,IAAAA;AAAD,GAAD,EAAgC;AACvC,WAAOA,CAAP;AACD;;AAGDE,EAAAA,eAAe,CAAC;AAACF,IAAAA;AAAD,GAAD,EAAwB;AACrC,WAAO,MAAME,eAAN,CAAsBT,aAAa,CAACO,CAAD,CAAnC,CAAP;AACD;;AAGDG,EAAAA,WAAW,CAAC;AAACH,IAAAA;AAAD,GAAD,EAAgC;AACzC,WAAOI,MAAM,CAACT,WAAW,CAACK,CAAD,CAAZ,CAAb;AACD;;AAGDK,EAAAA,cAAc,CAAC;AAACL,IAAAA;AAAD,GAAD,EAA0C;AACtD,WAAO;AAACA,MAAAA,CAAC,EAAEN,aAAa,CAACM,CAAD;AAAjB,KAAP;AACD;;AA3BqD","sourcesContent":["import {_Tileset2D as Tileset2D} from '@deck.gl/geo-layers';\nimport {tileToQuadbin, quadbinToTile, quadbinParent, quadbinZoom} from './quadbin-utils';\n\ntype QuadbinTileIndex = {i: string};\n\nexport default class QuadbinTileset2D extends Tileset2D {\n // @ts-expect-error for spatial indices, TileSet2d should be parametrized by TileIndexT\n getTileIndices(opts): QuadbinTileIndex[] {\n return super\n .getTileIndices(opts)\n .map(tileToQuadbin)\n .map(i => ({i}));\n }\n\n // @ts-expect-error TileIndex must be generic\n getTileId({i}: QuadbinTileIndex): string {\n return i;\n }\n\n // @ts-expect-error TileIndex must be generic\n getTileMetadata({i}: QuadbinTileIndex) {\n return super.getTileMetadata(quadbinToTile(i));\n }\n\n // @ts-expect-error TileIndex must be generic\n getTileZoom({i}: QuadbinTileIndex): number {\n return Number(quadbinZoom(i));\n }\n\n // @ts-expect-error TileIndex must be generic\n getParentIndex({i}: QuadbinTileIndex): QuadbinTileIndex {\n return {i: quadbinParent(i)};\n }\n}\n"],"file":"quadbin-tileset-2d.js"}
1
+ {"version":3,"sources":["../../../src/layers/quadbin-tileset-2d.ts"],"names":["_Tileset2D","Tileset2D","bigIntToHex","cellToParent","cellToTile","getResolution","tileToCell","QuadbinTileset2D","getTileIndices","opts","map","q","i","getTileId","getTileMetadata","getTileZoom","Number","getParentIndex"],"mappings":"AAAA,SAAQA,UAAU,IAAIC,SAAtB,QAAsC,qBAAtC;AACA,SAAQC,WAAR,EAAqBC,YAArB,EAAmCC,UAAnC,EAA+CC,aAA/C,EAA8DC,UAA9D,QAA+E,SAA/E;AAMA,eAAe,MAAMC,gBAAN,SAA+BN,SAA/B,CAAyC;AAEtDO,EAAAA,cAAc,CAACC,IAAD,EAA2B;AACvC,WAAO,MACJD,cADI,CACWC,IADX,EAEJC,GAFI,CAEAJ,UAFA,EAGJI,GAHI,CAGAC,CAAC,KAAK;AAACA,MAAAA,CAAD;AAAIC,MAAAA,CAAC,EAAEV,WAAW,CAACS,CAAD;AAAlB,KAAL,CAHD,CAAP;AAID;;AAGDE,EAAAA,SAAS,CAAC;AAACF,IAAAA,CAAD;AAAIC,IAAAA;AAAJ,GAAD,EAAmC;AAC1C,WAAOA,CAAC,IAAIV,WAAW,CAACS,CAAD,CAAvB;AACD;;AAGDG,EAAAA,eAAe,CAAC;AAACH,IAAAA;AAAD,GAAD,EAAwB;AACrC,WAAO,MAAMG,eAAN,CAAsBV,UAAU,CAACO,CAAD,CAAhC,CAAP;AACD;;AAGDI,EAAAA,WAAW,CAAC;AAACJ,IAAAA;AAAD,GAAD,EAAgC;AACzC,WAAOK,MAAM,CAACX,aAAa,CAACM,CAAD,CAAd,CAAb;AACD;;AAGDM,EAAAA,cAAc,CAAC;AAACN,IAAAA;AAAD,GAAD,EAA0C;AACtD,WAAO;AAACA,MAAAA,CAAC,EAAER,YAAY,CAACQ,CAAD;AAAhB,KAAP;AACD;;AA3BqD","sourcesContent":["import {_Tileset2D as Tileset2D} from '@deck.gl/geo-layers';\nimport {bigIntToHex, cellToParent, cellToTile, getResolution, tileToCell} from 'quadbin';\n\n// For calculations bigint representation is used, but\n// for constructing URL also provide the hexidecimal value\ntype QuadbinTileIndex = {q: bigint; i?: string};\n\nexport default class QuadbinTileset2D extends Tileset2D {\n // @ts-expect-error for spatial indices, TileSet2d should be parametrized by TileIndexT\n getTileIndices(opts): QuadbinTileIndex[] {\n return super\n .getTileIndices(opts)\n .map(tileToCell)\n .map(q => ({q, i: bigIntToHex(q)}));\n }\n\n // @ts-expect-error TileIndex must be generic\n getTileId({q, i}: QuadbinTileIndex): string {\n return i || bigIntToHex(q);\n }\n\n // @ts-expect-error TileIndex must be generic\n getTileMetadata({q}: QuadbinTileIndex) {\n return super.getTileMetadata(cellToTile(q));\n }\n\n // @ts-expect-error TileIndex must be generic\n getTileZoom({q}: QuadbinTileIndex): number {\n return Number(getResolution(q));\n }\n\n // @ts-expect-error TileIndex must be generic\n getParentIndex({q}: QuadbinTileIndex): QuadbinTileIndex {\n return {q: cellToParent(q)};\n }\n}\n"],"file":"quadbin-tileset-2d.js"}
@@ -1,77 +1,12 @@
1
1
  import { worldToLngLat } from '@math.gl/web-mercator';
2
+ import { cellToTile } from 'quadbin';
2
3
  const TILE_SIZE = 512;
3
- const B = [0x5555555555555555n, 0x3333333333333333n, 0x0f0f0f0f0f0f0f0fn, 0x00ff00ff00ff00ffn, 0x0000ffff0000ffffn, 0x00000000ffffffffn];
4
- const S = [0n, 1n, 2n, 4n, 8n, 16n];
5
- export function indexToBigInt(index) {
6
- return BigInt("0x".concat(index));
7
- }
8
- export function bigIntToIndex(quadbin) {
9
- return quadbin.toString(16);
10
- }
11
- export function tileToQuadbin(tile) {
12
- if (tile.z < 0 || tile.z > 26) {
13
- throw new Error('Wrong zoom');
14
- }
15
-
16
- const z = BigInt(tile.z);
17
- let x = BigInt(tile.x) << 32n - z;
18
- let y = BigInt(tile.y) << 32n - z;
19
-
20
- for (let i = 0; i < 5; i++) {
21
- const s = S[5 - i];
22
- const b = B[4 - i];
23
- x = (x | x << s) & b;
24
- y = (y | y << s) & b;
25
- }
26
-
27
- const quadbin = 0x4000000000000000n | 1n << 59n | z << 52n | (x | y << 1n) >> 12n | 0xfffffffffffffn >> z * 2n;
28
- return bigIntToIndex(quadbin);
29
- }
30
- export function quadbinToTile(index) {
31
- const quadbin = indexToBigInt(index);
32
- const mode = quadbin >> 59n & 7n;
33
- const modeDep = quadbin >> 57n & 3n;
34
- const z = quadbin >> 52n & 0x1fn;
35
- const q = (quadbin & 0xfffffffffffffn) << 12n;
36
-
37
- if (mode !== 1n && modeDep !== 0n) {
38
- throw new Error('Wrong mode');
39
- }
40
-
41
- let x = q;
42
- let y = q >> 1n;
43
-
44
- for (let i = 0; i < 6; i++) {
45
- const s = S[i];
46
- const b = B[i];
47
- x = (x | x >> s) & b;
48
- y = (y | y >> s) & b;
49
- }
50
-
51
- x = x >> 32n - z;
52
- y = y >> 32n - z;
53
- return {
54
- z: Number(z),
55
- x: Number(x),
56
- y: Number(y)
57
- };
58
- }
59
- export function quadbinZoom(index) {
60
- const quadbin = indexToBigInt(index);
61
- return quadbin >> 52n & 0x1fn;
62
- }
63
- export function quadbinParent(index) {
64
- const quadbin = indexToBigInt(index);
65
- const zparent = quadbinZoom(index) - 1n;
66
- const parent = quadbin & ~(0x1fn << 52n) | zparent << 52n | 0xfffffffffffffn >> zparent * 2n;
67
- return bigIntToIndex(parent);
68
- }
69
4
  export function quadbinToWorldBounds(quadbin) {
70
5
  const {
71
6
  x,
72
7
  y,
73
8
  z
74
- } = quadbinToTile(quadbin);
9
+ } = cellToTile(quadbin);
75
10
  const mask = 1 << z;
76
11
  const scale = mask / TILE_SIZE;
77
12
  return [[x / scale, TILE_SIZE - y / scale], [(x + 0.99) / scale, TILE_SIZE - (y + 0.99) / scale]];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/layers/quadbin-utils.ts"],"names":["worldToLngLat","TILE_SIZE","B","S","indexToBigInt","index","BigInt","bigIntToIndex","quadbin","toString","tileToQuadbin","tile","z","Error","x","y","i","s","b","quadbinToTile","mode","modeDep","q","Number","quadbinZoom","quadbinParent","zparent","parent","quadbinToWorldBounds","mask","scale","getQuadbinPolygon","topLeft","bottomRight","w","n","e"],"mappings":"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","sourcesContent":["import {worldToLngLat} from '@math.gl/web-mercator';\n\nconst TILE_SIZE = 512;\n\nconst B = [\n 0x5555555555555555n,\n 0x3333333333333333n,\n 0x0f0f0f0f0f0f0f0fn,\n 0x00ff00ff00ff00ffn,\n 0x0000ffff0000ffffn,\n 0x00000000ffffffffn\n];\nconst S = [0n, 1n, 2n, 4n, 8n, 16n];\n\nexport function indexToBigInt(index: string): bigint {\n return BigInt(`0x${index}`);\n}\n\nexport function bigIntToIndex(quadbin: bigint): string {\n return quadbin.toString(16);\n}\n\nexport function tileToQuadbin(tile): string {\n if (tile.z < 0 || tile.z > 26) {\n throw new Error('Wrong zoom');\n }\n const z = BigInt(tile.z);\n let x = BigInt(tile.x) << (32n - z);\n let y = BigInt(tile.y) << (32n - z);\n\n for (let i = 0; i < 5; i++) {\n const s = S[5 - i];\n const b = B[4 - i];\n x = (x | (x << s)) & b;\n y = (y | (y << s)) & b;\n }\n\n const quadbin =\n 0x4000000000000000n |\n (1n << 59n) | // | (mode << 59) | (mode_dep << 57)\n (z << 52n) |\n ((x | (y << 1n)) >> 12n) |\n (0xfffffffffffffn >> (z * 2n));\n return bigIntToIndex(quadbin);\n}\n\nexport function quadbinToTile(index: string) {\n const quadbin = indexToBigInt(index);\n const mode = (quadbin >> 59n) & 7n;\n const modeDep = (quadbin >> 57n) & 3n;\n const z = (quadbin >> 52n) & 0x1fn;\n const q = (quadbin & 0xfffffffffffffn) << 12n;\n\n if (mode !== 1n && modeDep !== 0n) {\n throw new Error('Wrong mode');\n }\n\n let x = q;\n let y = q >> 1n;\n\n for (let i = 0; i < 6; i++) {\n const s = S[i];\n const b = B[i];\n x = (x | (x >> s)) & b;\n y = (y | (y >> s)) & b;\n }\n\n x = x >> (32n - z);\n y = y >> (32n - z);\n\n return {z: Number(z), x: Number(x), y: Number(y)};\n}\n\nexport function quadbinZoom(index: string) {\n const quadbin = indexToBigInt(index);\n return (quadbin >> 52n) & 0x1fn;\n}\n\nexport function quadbinParent(index: string) {\n const quadbin = indexToBigInt(index);\n const zparent = quadbinZoom(index) - 1n;\n const parent =\n (quadbin & ~(0x1fn << 52n)) | (zparent << 52n) | (0xfffffffffffffn >> (zparent * 2n));\n return bigIntToIndex(parent);\n}\n\nexport function quadbinToWorldBounds(quadbin: string): [number[], number[]] {\n const {x, y, z} = quadbinToTile(quadbin);\n const mask = 1 << z;\n const scale = mask / TILE_SIZE;\n return [\n [x / scale, TILE_SIZE - y / scale],\n [(x + 0.99) / scale, TILE_SIZE - (y + 0.99) / scale]\n ];\n}\n\nexport function getQuadbinPolygon(quadbin: string): number[] {\n const [topLeft, bottomRight] = quadbinToWorldBounds(quadbin);\n const [w, n] = worldToLngLat(topLeft);\n const [e, s] = worldToLngLat(bottomRight);\n return [e, n, e, s, w, s, w, n, e, n];\n}\n"],"file":"quadbin-utils.js"}
1
+ {"version":3,"sources":["../../../src/layers/quadbin-utils.ts"],"names":["worldToLngLat","cellToTile","TILE_SIZE","quadbinToWorldBounds","quadbin","x","y","z","mask","scale","getQuadbinPolygon","topLeft","bottomRight","w","n","e","s"],"mappings":"AAAA,SAAQA,aAAR,QAA4B,uBAA5B;AACA,SAAQC,UAAR,QAAyB,SAAzB;AAEA,MAAMC,SAAS,GAAG,GAAlB;AAEA,OAAO,SAASC,oBAAT,CAA8BC,OAA9B,EAAqE;AAC1E,QAAM;AAACC,IAAAA,CAAD;AAAIC,IAAAA,CAAJ;AAAOC,IAAAA;AAAP,MAAYN,UAAU,CAACG,OAAD,CAA5B;AACA,QAAMI,IAAI,GAAG,KAAKD,CAAlB;AACA,QAAME,KAAK,GAAGD,IAAI,GAAGN,SAArB;AACA,SAAO,CACL,CAACG,CAAC,GAAGI,KAAL,EAAYP,SAAS,GAAGI,CAAC,GAAGG,KAA5B,CADK,EAEL,CAAC,CAACJ,CAAC,GAAG,IAAL,IAAaI,KAAd,EAAqBP,SAAS,GAAG,CAACI,CAAC,GAAG,IAAL,IAAaG,KAA9C,CAFK,CAAP;AAID;AAED,OAAO,SAASC,iBAAT,CAA2BN,OAA3B,EAAsD;AAC3D,QAAM,CAACO,OAAD,EAAUC,WAAV,IAAyBT,oBAAoB,CAACC,OAAD,CAAnD;AACA,QAAM,CAACS,CAAD,EAAIC,CAAJ,IAASd,aAAa,CAACW,OAAD,CAA5B;AACA,QAAM,CAACI,CAAD,EAAIC,CAAJ,IAAShB,aAAa,CAACY,WAAD,CAA5B;AACA,SAAO,CAACG,CAAD,EAAID,CAAJ,EAAOC,CAAP,EAAUC,CAAV,EAAaH,CAAb,EAAgBG,CAAhB,EAAmBH,CAAnB,EAAsBC,CAAtB,EAAyBC,CAAzB,EAA4BD,CAA5B,CAAP;AACD","sourcesContent":["import {worldToLngLat} from '@math.gl/web-mercator';\nimport {cellToTile} from 'quadbin';\n\nconst TILE_SIZE = 512;\n\nexport function quadbinToWorldBounds(quadbin: bigint): [number[], number[]] {\n const {x, y, z} = cellToTile(quadbin);\n const mask = 1 << z;\n const scale = mask / TILE_SIZE;\n return [\n [x / scale, TILE_SIZE - y / scale],\n [(x + 0.99) / scale, TILE_SIZE - (y + 0.99) / scale]\n ];\n}\n\nexport function getQuadbinPolygon(quadbin: bigint): number[] {\n const [topLeft, bottomRight] = quadbinToWorldBounds(quadbin);\n const [w, n] = worldToLngLat(topLeft);\n const [e, s] = worldToLngLat(bottomRight);\n return [e, n, e, s, w, s, w, n, e, n];\n}\n"],"file":"quadbin-utils.js"}
@@ -1,53 +1,38 @@
1
- import Protobuf from 'pbf';
2
- import { binaryToSpatialjson } from './spatialjson-utils';
3
1
  import { TileReader } from './carto-spatial-tile';
2
+ import { parsePbf, unpackProperties } from './tile-loader-utils';
3
+ import { binaryToSpatialjson } from './spatialjson-utils';
4
4
  const CartoSpatialTileLoader = {
5
5
  name: 'CARTO Spatial Tile',
6
6
  version: '1',
7
7
  id: 'cartoSpatialTile',
8
8
  module: 'carto',
9
9
  extensions: ['pbf'],
10
- mimeTypes: ['application/vnd.carto-spatial-tile', 'application/x-protobuf'],
10
+ mimeTypes: ['application/vnd.carto-spatial-tile'],
11
11
  category: 'geometry',
12
12
  worker: false,
13
13
  parse: async (arrayBuffer, options) => parseCartoSpatialTile(arrayBuffer, options),
14
14
  parseSync: parseCartoSpatialTile,
15
- options: {}
16
- };
17
-
18
- function parsePbf(buffer) {
19
- const pbf = new Protobuf(buffer);
20
- const tile = TileReader.read(pbf);
21
- return tile;
22
- }
23
-
24
- function unpackProperties(properties) {
25
- if (!properties || !properties.length) {
26
- return [];
15
+ options: {
16
+ cartoSpatialTile: {
17
+ scheme: 'quadbin'
18
+ }
27
19
  }
28
-
29
- return properties.map(item => {
30
- const currentRecord = {};
31
- item.data.forEach(({
32
- key,
33
- value
34
- }) => {
35
- currentRecord[key] = value;
36
- });
37
- return currentRecord;
38
- });
39
- }
20
+ };
40
21
 
41
22
  function parseCartoSpatialTile(arrayBuffer, options) {
23
+ var _options$cartoSpatial;
24
+
42
25
  if (!arrayBuffer) return null;
43
- const tile = parsePbf(arrayBuffer);
26
+ const tile = parsePbf(arrayBuffer, TileReader);
44
27
  const {
45
28
  cells
46
29
  } = tile;
30
+ const scheme = options === null || options === void 0 ? void 0 : (_options$cartoSpatial = options.cartoSpatialTile) === null || _options$cartoSpatial === void 0 ? void 0 : _options$cartoSpatial.scheme;
47
31
  const data = {
48
32
  cells: { ...cells,
49
33
  properties: unpackProperties(cells.properties)
50
- }
34
+ },
35
+ scheme
51
36
  };
52
37
  return binaryToSpatialjson(data);
53
38
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/layers/schema/carto-spatial-tile-loader.ts"],"names":["Protobuf","binaryToSpatialjson","TileReader","CartoSpatialTileLoader","name","version","id","module","extensions","mimeTypes","category","worker","parse","arrayBuffer","options","parseCartoSpatialTile","parseSync","parsePbf","buffer","pbf","tile","read","unpackProperties","properties","length","map","item","currentRecord","data","forEach","key","value","cells"],"mappings":"AAAA,OAAOA,QAAP,MAAqB,KAArB;AAIA,SAAQC,mBAAR,QAA2D,qBAA3D;AACA,SAAcC,UAAd,QAA+B,sBAA/B;AAEA,MAAMC,sBAAwC,GAAG;AAC/CC,EAAAA,IAAI,EAAE,oBADyC;AAE/CC,EAAAA,OAAO,EAAE,GAFsC;AAG/CC,EAAAA,EAAE,EAAE,kBAH2C;AAI/CC,EAAAA,MAAM,EAAE,OAJuC;AAK/CC,EAAAA,UAAU,EAAE,CAAC,KAAD,CALmC;AAM/CC,EAAAA,SAAS,EAAE,CACT,oCADS,EAET,wBAFS,CANoC;AAU/CC,EAAAA,QAAQ,EAAE,UAVqC;AAW/CC,EAAAA,MAAM,EAAE,KAXuC;AAY/CC,EAAAA,KAAK,EAAE,OAAOC,WAAP,EAAoBC,OAApB,KAAgCC,qBAAqB,CAACF,WAAD,EAAcC,OAAd,CAZb;AAa/CE,EAAAA,SAAS,EAAED,qBAboC;AAc/CD,EAAAA,OAAO,EAAE;AAdsC,CAAjD;;AAiBA,SAASG,QAAT,CAAkBC,MAAlB,EAA6C;AAC3C,QAAMC,GAAG,GAAG,IAAInB,QAAJ,CAAakB,MAAb,CAAZ;AACA,QAAME,IAAI,GAAGlB,UAAU,CAACmB,IAAX,CAAgBF,GAAhB,CAAb;AACA,SAAOC,IAAP;AACD;;AAED,SAASE,gBAAT,CAA0BC,UAA1B,EAA0E;AACxE,MAAI,CAACA,UAAD,IAAe,CAACA,UAAU,CAACC,MAA/B,EAAuC;AACrC,WAAO,EAAP;AACD;;AACD,SAAOD,UAAU,CAACE,GAAX,CAAeC,IAAI,IAAI;AAC5B,UAAMC,aAAyB,GAAG,EAAlC;AACAD,IAAAA,IAAI,CAACE,IAAL,CAAUC,OAAV,CAAkB,CAAC;AAACC,MAAAA,GAAD;AAAMC,MAAAA;AAAN,KAAD,KAAkB;AAClCJ,MAAAA,aAAa,CAACG,GAAD,CAAb,GAAqBC,KAArB;AACD,KAFD;AAGA,WAAOJ,aAAP;AACD,GANM,CAAP;AAOD;;AAED,SAASZ,qBAAT,CACEF,WADF,EAEEC,OAFF,EAGsB;AACpB,MAAI,CAACD,WAAL,EAAkB,OAAO,IAAP;AAClB,QAAMO,IAAI,GAAGH,QAAQ,CAACJ,WAAD,CAArB;AAEA,QAAM;AAACmB,IAAAA;AAAD,MAAUZ,IAAhB;AACA,QAAMQ,IAAI,GAAG;AACXI,IAAAA,KAAK,EAAE,EAAC,GAAGA,KAAJ;AAAWT,MAAAA,UAAU,EAAED,gBAAgB,CAACU,KAAK,CAACT,UAAP;AAAvC;AADI,GAAb;AAIA,SAAOtB,mBAAmB,CAAC2B,IAAD,CAA1B;AACD;;AAED,eAAezB,sBAAf","sourcesContent":["import Protobuf from 'pbf';\nimport {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';\n\nimport {KeyValueProperties} from './carto-tile';\nimport {binaryToSpatialjson, Properties, SpatialJson} from './spatialjson-utils';\nimport {Tile, TileReader} from './carto-spatial-tile';\n\nconst CartoSpatialTileLoader: LoaderWithParser = {\n name: 'CARTO Spatial Tile',\n version: '1',\n id: 'cartoSpatialTile',\n module: 'carto',\n extensions: ['pbf'],\n mimeTypes: [\n 'application/vnd.carto-spatial-tile',\n 'application/x-protobuf' // Back-compatibility\n ],\n category: 'geometry',\n worker: false,\n parse: async (arrayBuffer, options) => parseCartoSpatialTile(arrayBuffer, options),\n parseSync: parseCartoSpatialTile,\n options: {}\n};\n\nfunction parsePbf(buffer: ArrayBuffer): Tile {\n const pbf = new Protobuf(buffer);\n const tile = TileReader.read(pbf);\n return tile;\n}\n\nfunction unpackProperties(properties: KeyValueProperties[]): Properties[] {\n if (!properties || !properties.length) {\n return [];\n }\n return properties.map(item => {\n const currentRecord: Properties = {};\n item.data.forEach(({key, value}) => {\n currentRecord[key] = value;\n });\n return currentRecord;\n });\n}\n\nfunction parseCartoSpatialTile(\n arrayBuffer: ArrayBuffer,\n options?: LoaderOptions\n): SpatialJson | null {\n if (!arrayBuffer) return null;\n const tile = parsePbf(arrayBuffer);\n\n const {cells} = tile;\n const data = {\n cells: {...cells, properties: unpackProperties(cells.properties)}\n };\n\n return binaryToSpatialjson(data);\n}\n\nexport default CartoSpatialTileLoader;\n"],"file":"carto-spatial-tile-loader.js"}
1
+ {"version":3,"sources":["../../../../src/layers/schema/carto-spatial-tile-loader.ts"],"names":["TileReader","parsePbf","unpackProperties","binaryToSpatialjson","CartoSpatialTileLoader","name","version","id","module","extensions","mimeTypes","category","worker","parse","arrayBuffer","options","parseCartoSpatialTile","parseSync","cartoSpatialTile","scheme","tile","cells","data","properties"],"mappings":"AAEA,SAAcA,UAAd,QAA+B,sBAA/B;AACA,SAAQC,QAAR,EAAkBC,gBAAlB,QAAyC,qBAAzC;AACA,SAAqBC,mBAArB,QAA4D,qBAA5D;AAEA,MAAMC,sBAAwC,GAAG;AAC/CC,EAAAA,IAAI,EAAE,oBADyC;AAE/CC,EAAAA,OAAO,EAAE,GAFsC;AAG/CC,EAAAA,EAAE,EAAE,kBAH2C;AAI/CC,EAAAA,MAAM,EAAE,OAJuC;AAK/CC,EAAAA,UAAU,EAAE,CAAC,KAAD,CALmC;AAM/CC,EAAAA,SAAS,EAAE,CAAC,oCAAD,CANoC;AAO/CC,EAAAA,QAAQ,EAAE,UAPqC;AAQ/CC,EAAAA,MAAM,EAAE,KARuC;AAS/CC,EAAAA,KAAK,EAAE,OAAOC,WAAP,EAAoBC,OAApB,KAAgCC,qBAAqB,CAACF,WAAD,EAAcC,OAAd,CATb;AAU/CE,EAAAA,SAAS,EAAED,qBAVoC;AAW/CD,EAAAA,OAAO,EAAE;AACPG,IAAAA,gBAAgB,EAAE;AAChBC,MAAAA,MAAM,EAAE;AADQ;AADX;AAXsC,CAAjD;;AAkBA,SAASH,qBAAT,CACEF,WADF,EAEEC,OAFF,EAGsB;AAAA;;AACpB,MAAI,CAACD,WAAL,EAAkB,OAAO,IAAP;AAClB,QAAMM,IAAU,GAAGnB,QAAQ,CAACa,WAAD,EAAcd,UAAd,CAA3B;AAEA,QAAM;AAACqB,IAAAA;AAAD,MAAUD,IAAhB;AACA,QAAMD,MAAM,GAAGJ,OAAH,aAAGA,OAAH,gDAAGA,OAAO,CAAEG,gBAAZ,0DAAG,sBAA2BC,MAA1C;AACA,QAAMG,IAAI,GAAG;AACXD,IAAAA,KAAK,EAAE,EAAC,GAAGA,KAAJ;AAAWE,MAAAA,UAAU,EAAErB,gBAAgB,CAACmB,KAAK,CAACE,UAAP;AAAvC,KADI;AAEXJ,IAAAA;AAFW,GAAb;AAKA,SAAOhB,mBAAmB,CAACmB,IAAD,CAA1B;AACD;;AAED,eAAelB,sBAAf","sourcesContent":["import {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';\n\nimport {Tile, TileReader} from './carto-spatial-tile';\nimport {parsePbf, unpackProperties} from './tile-loader-utils';\nimport {IndexScheme, binaryToSpatialjson, SpatialJson} from './spatialjson-utils';\n\nconst CartoSpatialTileLoader: LoaderWithParser = {\n name: 'CARTO Spatial Tile',\n version: '1',\n id: 'cartoSpatialTile',\n module: 'carto',\n extensions: ['pbf'],\n mimeTypes: ['application/vnd.carto-spatial-tile'],\n category: 'geometry',\n worker: false,\n parse: async (arrayBuffer, options) => parseCartoSpatialTile(arrayBuffer, options),\n parseSync: parseCartoSpatialTile,\n options: {\n cartoSpatialTile: {\n scheme: 'quadbin'\n } as {scheme: IndexScheme}\n }\n};\n\nfunction parseCartoSpatialTile(\n arrayBuffer: ArrayBuffer,\n options?: LoaderOptions\n): SpatialJson | null {\n if (!arrayBuffer) return null;\n const tile: Tile = parsePbf(arrayBuffer, TileReader);\n\n const {cells} = tile;\n const scheme = options?.cartoSpatialTile?.scheme;\n const data = {\n cells: {...cells, properties: unpackProperties(cells.properties)},\n scheme\n };\n\n return binaryToSpatialjson(data);\n}\n\nexport default CartoSpatialTileLoader;\n"],"file":"carto-spatial-tile-loader.js"}
@@ -67,6 +67,19 @@ class IntsReader {
67
67
 
68
68
  }
69
69
 
70
+ class FieldsReader {
71
+ static read(pbf, end) {
72
+ return pbf.readFields(FieldsReader._readField, {
73
+ id: 0
74
+ }, end);
75
+ }
76
+
77
+ static _readField(tag, obj, pbf) {
78
+ if (tag === 1) obj.id = pbf.readVarint();
79
+ }
80
+
81
+ }
82
+
70
83
  class NumericPropReader {
71
84
  static read(pbf, end) {
72
85
  return pbf.readFields(NumericPropReader._readField, {
@@ -101,7 +114,8 @@ class PointsReader {
101
114
  globalFeatureIds: null,
102
115
  featureIds: null,
103
116
  properties: [],
104
- numericProps: {}
117
+ numericProps: {},
118
+ fields: []
105
119
  }, end);
106
120
  }
107
121
 
@@ -109,7 +123,7 @@ class PointsReader {
109
123
  if (tag === 1) obj.positions = DoublesReader.read(pbf, pbf.readVarint() + pbf.pos);else if (tag === 2) obj.globalFeatureIds = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);else if (tag === 3) obj.featureIds = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);else if (tag === 4) obj.properties.push(PropertiesReader.read(pbf, pbf.readVarint() + pbf.pos));else if (tag === 5) {
110
124
  const entry = NumericPropKeyValueReader.read(pbf, pbf.readVarint() + pbf.pos);
111
125
  obj.numericProps[entry.key] = entry.value;
112
- }
126
+ } else if (tag === 6) obj.fields.push(FieldsReader.read(pbf, pbf.readVarint() + pbf.pos));
113
127
  }
114
128
 
115
129
  }
@@ -122,7 +136,8 @@ class LinesReader {
122
136
  globalFeatureIds: null,
123
137
  featureIds: null,
124
138
  properties: [],
125
- numericProps: {}
139
+ numericProps: {},
140
+ fields: []
126
141
  }, end);
127
142
  }
128
143
 
@@ -130,7 +145,7 @@ class LinesReader {
130
145
  if (tag === 1) obj.positions = DoublesReader.read(pbf, pbf.readVarint() + pbf.pos);else if (tag === 2) obj.pathIndices = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);else if (tag === 3) obj.globalFeatureIds = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);else if (tag === 4) obj.featureIds = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);else if (tag === 5) obj.properties.push(PropertiesReader.read(pbf, pbf.readVarint() + pbf.pos));else if (tag === 6) {
131
146
  const entry = NumericPropKeyValueReader.read(pbf, pbf.readVarint() + pbf.pos);
132
147
  obj.numericProps[entry.key] = entry.value;
133
- }
148
+ } else if (tag === 7) obj.fields.push(FieldsReader.read(pbf, pbf.readVarint() + pbf.pos));
134
149
  }
135
150
 
136
151
  }
@@ -145,7 +160,8 @@ class PolygonsReader {
145
160
  primitivePolygonIndices: null,
146
161
  triangles: null,
147
162
  properties: [],
148
- numericProps: {}
163
+ numericProps: {},
164
+ fields: []
149
165
  }, end);
150
166
  }
151
167
 
@@ -153,7 +169,7 @@ class PolygonsReader {
153
169
  if (tag === 1) obj.positions = DoublesReader.read(pbf, pbf.readVarint() + pbf.pos);else if (tag === 2) obj.polygonIndices = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);else if (tag === 3) obj.globalFeatureIds = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);else if (tag === 4) obj.featureIds = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);else if (tag === 5) obj.primitivePolygonIndices = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);else if (tag === 6) obj.triangles = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);else if (tag === 7) obj.properties.push(PropertiesReader.read(pbf, pbf.readVarint() + pbf.pos));else if (tag === 8) {
154
170
  const entry = NumericPropKeyValueReader.read(pbf, pbf.readVarint() + pbf.pos);
155
171
  obj.numericProps[entry.key] = entry.value;
156
- }
172
+ } else if (tag === 9) obj.fields.push(FieldsReader.read(pbf, pbf.readVarint() + pbf.pos));
157
173
  }
158
174
 
159
175
  }