@deck.gl/carto 8.8.4 → 8.8.7

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 (125) hide show
  1. package/dist/dist.dev.js +31412 -22945
  2. package/dist/es5/api/index.js.map +1 -1
  3. package/dist/es5/api/layer-map.js +104 -17
  4. package/dist/es5/api/layer-map.js.map +1 -1
  5. package/dist/es5/api/maps-api-common.js.map +1 -1
  6. package/dist/es5/api/maps-v3-client.js +230 -57
  7. package/dist/es5/api/maps-v3-client.js.map +1 -1
  8. package/dist/es5/api/parseMap.js +14 -4
  9. package/dist/es5/api/parseMap.js.map +1 -1
  10. package/dist/es5/config.js +11 -2
  11. package/dist/es5/config.js.map +1 -1
  12. package/dist/es5/index.js.map +1 -1
  13. package/dist/es5/layers/carto-layer.js +15 -23
  14. package/dist/es5/layers/carto-layer.js.map +1 -1
  15. package/dist/es5/layers/carto-tile-layer.js +1 -1
  16. package/dist/es5/layers/carto-tile-layer.js.map +1 -1
  17. package/dist/es5/layers/quadbin-utils.js +2 -0
  18. package/dist/es5/layers/quadbin-utils.js.map +1 -1
  19. package/dist/es5/layers/schema/carto-spatial-tile-loader.js +99 -0
  20. package/dist/es5/layers/schema/carto-spatial-tile-loader.js.map +1 -0
  21. package/dist/es5/layers/schema/carto-spatial-tile.js +117 -0
  22. package/dist/es5/layers/schema/carto-spatial-tile.js.map +1 -0
  23. package/dist/es5/layers/schema/carto-tile.js +5 -1
  24. package/dist/es5/layers/schema/carto-tile.js.map +1 -1
  25. package/dist/es5/layers/schema/spatialjson-utils.js +41 -0
  26. package/dist/es5/layers/schema/spatialjson-utils.js.map +1 -0
  27. package/dist/es5/layers/spatial-index-tile-layer.js +6 -0
  28. package/dist/es5/layers/spatial-index-tile-layer.js.map +1 -1
  29. package/dist/esm/api/index.js.map +1 -1
  30. package/dist/esm/api/layer-map.js +79 -14
  31. package/dist/esm/api/layer-map.js.map +1 -1
  32. package/dist/esm/api/maps-api-common.js.map +1 -1
  33. package/dist/esm/api/maps-v3-client.js +129 -16
  34. package/dist/esm/api/maps-v3-client.js.map +1 -1
  35. package/dist/esm/api/parseMap.js +18 -4
  36. package/dist/esm/api/parseMap.js.map +1 -1
  37. package/dist/esm/config.js +10 -2
  38. package/dist/esm/config.js.map +1 -1
  39. package/dist/esm/index.js.map +1 -1
  40. package/dist/esm/layers/carto-layer.js +12 -19
  41. package/dist/esm/layers/carto-layer.js.map +1 -1
  42. package/dist/esm/layers/carto-tile-layer.js +1 -1
  43. package/dist/esm/layers/carto-tile-layer.js.map +1 -1
  44. package/dist/esm/layers/quadbin-utils.js +2 -5
  45. package/dist/esm/layers/quadbin-utils.js.map +1 -1
  46. package/dist/esm/layers/schema/carto-spatial-tile-loader.js +56 -0
  47. package/dist/esm/layers/schema/carto-spatial-tile-loader.js.map +1 -0
  48. package/dist/esm/layers/schema/carto-spatial-tile.js +72 -0
  49. package/dist/esm/layers/schema/carto-spatial-tile.js.map +1 -0
  50. package/dist/esm/layers/schema/carto-tile.js +2 -2
  51. package/dist/esm/layers/schema/carto-tile.js.map +1 -1
  52. package/dist/esm/layers/schema/spatialjson-utils.js +26 -0
  53. package/dist/esm/layers/schema/spatialjson-utils.js.map +1 -0
  54. package/dist/esm/layers/spatial-index-tile-layer.js +3 -0
  55. package/dist/esm/layers/spatial-index-tile-layer.js.map +1 -1
  56. package/dist.min.js +138 -138
  57. package/package.json +2 -2
  58. package/src/api/index.ts +1 -0
  59. package/src/api/layer-map.ts +76 -13
  60. package/src/api/maps-api-common.ts +8 -0
  61. package/src/api/maps-v3-client.ts +148 -21
  62. package/src/api/parseMap.ts +6 -2
  63. package/src/config.ts +12 -2
  64. package/src/index.ts +1 -1
  65. package/src/layers/carto-layer.ts +26 -33
  66. package/src/layers/carto-tile-layer.ts +6 -3
  67. package/src/layers/quadbin-utils.ts +2 -2
  68. package/src/layers/schema/carto-spatial-tile-loader.ts +59 -0
  69. package/src/layers/schema/carto-spatial-tile.ts +83 -0
  70. package/src/layers/schema/carto-tile.ts +6 -6
  71. package/src/layers/schema/spatialjson-utils.ts +35 -0
  72. package/src/layers/spatial-index-tile-layer.ts +4 -0
  73. package/typed/api/index.d.ts +1 -0
  74. package/typed/api/index.d.ts.map +1 -1
  75. package/typed/api/layer-map.d.ts +12 -4
  76. package/typed/api/layer-map.d.ts.map +1 -1
  77. package/typed/api/maps-api-common.d.ts +4 -0
  78. package/typed/api/maps-api-common.d.ts.map +1 -1
  79. package/typed/api/maps-v3-client.d.ts +8 -4
  80. package/typed/api/maps-v3-client.d.ts.map +1 -1
  81. package/typed/config.d.ts +2 -0
  82. package/typed/config.d.ts.map +1 -1
  83. package/typed/index.d.ts +1 -0
  84. package/typed/index.d.ts.map +1 -1
  85. package/typed/layers/carto-layer.d.ts +8 -8
  86. package/typed/layers/carto-layer.d.ts.map +1 -1
  87. package/typed/layers/carto-tile-layer.d.ts.map +1 -1
  88. package/typed/layers/quadbin-utils.d.ts +2 -0
  89. package/typed/layers/quadbin-utils.d.ts.map +1 -1
  90. package/typed/layers/schema/carto-spatial-tile-loader.d.ts +4 -0
  91. package/typed/layers/schema/carto-spatial-tile-loader.d.ts.map +1 -0
  92. package/typed/layers/schema/carto-spatial-tile.d.ts +21 -0
  93. package/typed/layers/schema/carto-spatial-tile.d.ts.map +1 -0
  94. package/typed/layers/schema/carto-tile.d.ts +15 -3
  95. package/typed/layers/schema/carto-tile.d.ts.map +1 -1
  96. package/typed/layers/schema/spatialjson-utils.d.ts +25 -0
  97. package/typed/layers/schema/spatialjson-utils.d.ts.map +1 -0
  98. package/typed/layers/spatial-index-tile-layer.d.ts.map +1 -1
  99. package/typed/api/index.js +0 -3
  100. package/typed/api/layer-map.js +0 -264
  101. package/typed/api/maps-api-common.js +0 -50
  102. package/typed/api/maps-client.js +0 -125
  103. package/typed/api/maps-v3-client.js +0 -304
  104. package/typed/api/parseMap.js +0 -178
  105. package/typed/basemap.js +0 -9
  106. package/typed/config.js +0 -35
  107. package/typed/index.js +0 -10
  108. package/typed/layers/carto-layer.js +0 -173
  109. package/typed/layers/carto-tile-layer.js +0 -105
  110. package/typed/layers/h3-tile-layer.js +0 -47
  111. package/typed/layers/h3-tileset-2d.js +0 -85
  112. package/typed/layers/quadkey-tile-layer.d.ts +0 -21
  113. package/typed/layers/quadkey-tile-layer.d.ts.map +0 -1
  114. package/typed/layers/quadkey-tile-layer.js +0 -42
  115. package/typed/layers/quadkey-tileset-2d.d.ts +0 -15
  116. package/typed/layers/quadkey-tileset-2d.d.ts.map +0 -1
  117. package/typed/layers/quadkey-tileset-2d.js +0 -36
  118. package/typed/layers/schema/carto-tile.js +0 -161
  119. package/typed/layers/spatial-index-tile-layer.js +0 -40
  120. package/typed/style/color-bins-style.js +0 -12
  121. package/typed/style/color-categories-style.js +0 -16
  122. package/typed/style/color-continuous-style.js +0 -12
  123. package/typed/style/palette.js +0 -62
  124. package/typed/style/utils.js +0 -15
  125. package/typed/utils.js +0 -4
@@ -7,6 +7,8 @@ import { CPUGridLayer, HeatmapLayer, HexagonLayer } from '@deck.gl/aggregation-l
7
7
  import { GeoJsonLayer } from '@deck.gl/layers';
8
8
  import { H3HexagonLayer, MVTLayer } from '@deck.gl/geo-layers';
9
9
  import CartoTileLayer from '../layers/carto-tile-layer';
10
+ import H3TileLayer from '../layers/h3-tile-layer';
11
+ import QuadbinTileLayer from '../layers/quadbin-tile-layer';
10
12
  import { TILE_FORMATS } from './maps-api-common';
11
13
  import { assert } from '../utils';
12
14
  const SCALE_FUNCS = {
@@ -101,7 +103,7 @@ function mergePropMaps(a = {}, b = {}) {
101
103
  export function getLayer(type, config, dataset) {
102
104
  var _config$columns;
103
105
 
104
- if (type === 'mvt' || type === 'tileset') {
106
+ if (type === 'mvt' || type === 'tileset' || type === 'h3' || type === 'quadbin') {
105
107
  return getTileLayer(dataset);
106
108
  }
107
109
 
@@ -181,29 +183,57 @@ export function getLayer(type, config, dataset) {
181
183
  }
182
184
  };
183
185
  }
186
+ export function layerFromTileDataset(formatTiles = TILE_FORMATS.MVT, scheme) {
187
+ if (scheme === 'h3') {
188
+ return H3TileLayer;
189
+ }
190
+
191
+ if (scheme === 'quadbin') {
192
+ return QuadbinTileLayer;
193
+ }
194
+
195
+ if (formatTiles === TILE_FORMATS.MVT) {
196
+ return MVTLayer;
197
+ }
198
+
199
+ return CartoTileLayer;
200
+ }
184
201
 
185
202
  function getTileLayer(dataset) {
186
203
  const {
204
+ aggregationExp,
205
+ aggregationResLevel,
187
206
  data: {
207
+ scheme,
188
208
  tiles: [tileUrl]
189
209
  }
190
210
  } = dataset;
191
- const formatTiles = new URL(tileUrl).searchParams.get('formatTiles') || TILE_FORMATS.MVT;
211
+ const formatTiles = new URL(tileUrl).searchParams.get('formatTiles');
192
212
  return {
193
- Layer: formatTiles === TILE_FORMATS.MVT ? MVTLayer : CartoTileLayer,
213
+ Layer: layerFromTileDataset(formatTiles, scheme),
194
214
  propMap: sharedPropMap,
195
215
  defaultProps: { ...defaultProps,
196
- uniqueIdProperty: 'geoid',
197
- formatTiles
216
+ ...(aggregationExp && {
217
+ aggregationExp
218
+ }),
219
+ ...(aggregationResLevel && {
220
+ aggregationResLevel
221
+ }),
222
+ formatTiles,
223
+ uniqueIdProperty: 'geoid'
198
224
  }
199
225
  };
200
226
  }
201
227
 
202
- function domainFromAttribute(attribute, scaleType) {
228
+ function domainFromAttribute(attribute, scaleType, scaleLength) {
203
229
  if (scaleType === 'ordinal' || scaleType === 'point') {
204
230
  return attribute.categories.map(c => c.category).filter(c => c !== undefined && c !== null);
205
231
  }
206
232
 
233
+ if (scaleType === 'quantile' && attribute.quantiles) {
234
+ return attribute.quantiles[scaleLength];
235
+ }
236
+
207
237
  let {
208
238
  min
209
239
  } = attribute;
@@ -228,13 +258,13 @@ function domainFromValues(values, scaleType) {
228
258
  return extent(values);
229
259
  }
230
260
 
231
- function calculateDomain(data, name, scaleType) {
261
+ function calculateDomain(data, name, scaleType, scaleLength) {
232
262
  if (data.tilestats) {
233
263
  const {
234
264
  attributes
235
265
  } = data.tilestats.layers[0];
236
266
  const attribute = attributes.find(a => a.attribute === name);
237
- return domainFromAttribute(attribute, scaleType);
267
+ return domainFromAttribute(attribute, scaleType, scaleLength);
238
268
  } else if (data.features) {
239
269
  const values = data.features.map(({
240
270
  properties
@@ -263,6 +293,27 @@ function normalizeAccessor(accessor, data) {
263
293
  export function opacityToAlpha(opacity) {
264
294
  return opacity !== undefined ? Math.round(255 * Math.pow(opacity, 1 / 2.2)) : 255;
265
295
  }
296
+
297
+ function getAccessorKeys(name, aggregation) {
298
+ let keys = [name];
299
+
300
+ if (aggregation) {
301
+ keys = keys.concat([aggregation, aggregation.toUpperCase()].map(a => "".concat(name, "_").concat(a)));
302
+ }
303
+
304
+ return keys;
305
+ }
306
+
307
+ function findAccessorKey(keys, properties) {
308
+ for (const key of keys) {
309
+ if (key in properties) {
310
+ return [key];
311
+ }
312
+ }
313
+
314
+ throw new Error("Could not find property for any accessor key: ".concat(keys));
315
+ }
316
+
266
317
  export function getColorValueAccessor({
267
318
  name
268
319
  }, colorAggregation, data) {
@@ -275,8 +326,11 @@ export function getColorValueAccessor({
275
326
  export function getColorAccessor({
276
327
  name
277
328
  }, scaleType, {
278
- colors,
279
- colorMap
329
+ aggregation,
330
+ range: {
331
+ colors,
332
+ colorMap
333
+ }
280
334
  }, opacity, data) {
281
335
  const scale = SCALE_FUNCS[scaleType]();
282
336
  let domain = [];
@@ -288,7 +342,7 @@ export function getColorAccessor({
288
342
  scaleColor.push(color);
289
343
  });
290
344
  } else {
291
- domain = calculateDomain(data, name, scaleType);
345
+ domain = calculateDomain(data, name, scaleType, colors.length);
292
346
  scaleColor = colors;
293
347
  }
294
348
 
@@ -300,9 +354,14 @@ export function getColorAccessor({
300
354
  scale.range(scaleColor);
301
355
  scale.unknown(UNKNOWN_COLOR);
302
356
  const alpha = opacityToAlpha(opacity);
357
+ let accessorKeys = getAccessorKeys(name, aggregation);
303
358
 
304
359
  const accessor = properties => {
305
- const propertyValue = properties[name];
360
+ if (!(accessorKeys[0] in properties)) {
361
+ accessorKeys = findAccessorKey(accessorKeys, properties);
362
+ }
363
+
364
+ const propertyValue = properties[accessorKeys[0]];
306
365
  const {
307
366
  r,
308
367
  g,
@@ -315,13 +374,19 @@ export function getColorAccessor({
315
374
  }
316
375
  export function getSizeAccessor({
317
376
  name
318
- }, scaleType, range, data) {
377
+ }, scaleType, aggregation, range, data) {
319
378
  const scale = SCALE_FUNCS[scaleType]();
320
379
  scale.domain(calculateDomain(data, name, scaleType));
321
380
  scale.range(range);
381
+ let accessorKeys = getAccessorKeys(name, aggregation);
322
382
 
323
383
  const accessor = properties => {
324
- return scale(properties[name]);
384
+ if (!(accessorKeys[0] in properties)) {
385
+ accessorKeys = findAccessorKey(accessorKeys, properties);
386
+ }
387
+
388
+ const propertyValue = properties[accessorKeys[0]];
389
+ return scale(propertyValue);
325
390
  };
326
391
 
327
392
  return normalizeAccessor(accessor, data);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api/layer-map.ts"],"names":["deviation","extent","groupSort","median","variance","rgb","scaleLinear","scaleOrdinal","scaleLog","scalePoint","scaleQuantile","scaleQuantize","scaleSqrt","scaleThreshold","format","d3Format","moment","CPUGridLayer","HeatmapLayer","HexagonLayer","GeoJsonLayer","H3HexagonLayer","MVTLayer","CartoTileLayer","TILE_FORMATS","assert","SCALE_FUNCS","linear","ordinal","log","point","quantile","quantize","sqrt","custom","UNKNOWN_COLOR","AGGREGATION","average","maximum","minimum","sum","OPACITY_MAP","getFillColor","getLineColor","getTextColor","AGGREGATION_FUNC","values","accessor","v","length","mode","pop","stddev","hexToRGBA","c","r","g","b","opacity","sharedPropMap","color","isVisible","label","textLabel","alignment","anchor","size","visConfig","enable3d","elevationScale","filled","strokeColor","stroked","thickness","radius","wireframe","aggregationVisConfig","colorAggregation","x","colorRange","colors","map","coverage","elevationPercentile","percentile","defaultProps","lineMiterLimit","lineWidthUnits","pointRadiusUnits","rounded","wrapLongitude","mergePropMaps","a","getLayer","type","config","dataset","getTileLayer","geoColumn","getPosition","d","coordinates","hexagonId","columns","hex_id","layerTypeDefs","Layer","propMap","outline","geojson","grid","worldUnitSize","cellSize","heatmap","hexagon","getHexagon","layer","data","tiles","tileUrl","formatTiles","URL","searchParams","get","MVT","uniqueIdProperty","domainFromAttribute","attribute","scaleType","categories","category","filter","undefined","min","max","domainFromValues","sort","d0","d1","calculateDomain","name","tilestats","attributes","layers","find","features","properties","Array","isArray","normalizeAccessor","opacityToAlpha","Math","round","pow","getColorValueAccessor","aggregator","p","getColorAccessor","colorMap","scale","domain","scaleColor","forEach","value","push","slice","range","unknown","alpha","propertyValue","getSizeAccessor","FORMATS","date","s","utc","integer","float","timestamp","default","String","getTextAccessor","getTextPixelOffsetAccessor","padding","signX","signY","sizeOffset","calculateOffset","_domainFromValues"],"mappings":"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","sourcesContent":["import {deviation, extent, groupSort, median, variance} from 'd3-array';\nimport {rgb} from 'd3-color';\nimport {\n scaleLinear,\n scaleOrdinal,\n scaleLog,\n scalePoint,\n scaleQuantile,\n scaleQuantize,\n scaleSqrt,\n scaleThreshold\n} from 'd3-scale';\nimport {format as d3Format} from 'd3-format';\nimport moment from 'moment-timezone';\n\nimport {Layer, _ConstructorOf as ConstructorOf} from '@deck.gl/core';\nimport {CPUGridLayer, HeatmapLayer, HexagonLayer} from '@deck.gl/aggregation-layers';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {H3HexagonLayer, MVTLayer} from '@deck.gl/geo-layers';\n\nimport CartoTileLayer from '../layers/carto-tile-layer';\nimport {TILE_FORMATS} from './maps-api-common';\nimport {assert} from '../utils';\n\nconst SCALE_FUNCS = {\n linear: scaleLinear,\n ordinal: scaleOrdinal,\n log: scaleLog,\n point: scalePoint,\n quantile: scaleQuantile,\n quantize: scaleQuantize,\n sqrt: scaleSqrt,\n custom: scaleThreshold\n};\nexport type SCALE_TYPE = keyof typeof SCALE_FUNCS;\n\nconst UNKNOWN_COLOR = '#868d91';\n\nexport const AGGREGATION = {\n average: 'MEAN',\n maximum: 'MAX',\n minimum: 'MIN',\n sum: 'SUM'\n};\n\nexport const OPACITY_MAP = {\n getFillColor: 'opacity',\n getLineColor: 'strokeOpacity',\n getTextColor: 'opacity'\n};\n\nconst AGGREGATION_FUNC = {\n 'count unique': (values, accessor) => groupSort(values, v => v.length, accessor).length,\n median,\n // Unfortunately mode() is only available in d3-array@3+ which is ESM only\n mode: (values, accessor) => groupSort(values, v => v.length, accessor).pop(),\n stddev: deviation,\n variance\n};\n\nconst hexToRGBA = c => {\n const {r, g, b, opacity} = rgb(c);\n return [r, g, b, 255 * opacity];\n};\n\n// Kepler -> Deck.gl\nconst sharedPropMap = {\n color: 'getFillColor',\n isVisible: 'visible',\n label: 'cartoLabel',\n textLabel: {\n alignment: 'getTextAlignmentBaseline',\n anchor: 'getTextAnchor',\n color: 'getTextColor',\n size: 'getTextSize'\n },\n visConfig: {\n enable3d: 'extruded',\n elevationScale: 'elevationScale',\n filled: 'filled',\n strokeColor: 'getLineColor',\n stroked: 'stroked',\n thickness: 'getLineWidth',\n radius: 'getPointRadius',\n wireframe: 'wireframe'\n }\n};\n\nconst aggregationVisConfig = {\n colorAggregation: x => ({colorAggregation: AGGREGATION[x] || AGGREGATION.sum}),\n colorRange: x => ({colorRange: x.colors.map(hexToRGBA)}),\n coverage: 'coverage',\n elevationPercentile: ['elevationLowerPercentile', 'elevationUpperPercentile'],\n percentile: ['lowerPercentile', 'upperPercentile']\n};\n\nconst defaultProps = {\n lineMiterLimit: 2,\n lineWidthUnits: 'pixels',\n pointRadiusUnits: 'pixels',\n rounded: true,\n wrapLongitude: false\n};\n\nfunction mergePropMaps(a: Record<string, any> = {}, b: Record<string, any> = {}) {\n return {...a, ...b, visConfig: {...a.visConfig, ...b.visConfig}};\n}\n\nexport function getLayer(\n type: string,\n config,\n dataset\n): {Layer: ConstructorOf<Layer>; propMap: any; defaultProps: any} {\n if (type === 'mvt' || type === 'tileset') {\n return getTileLayer(dataset);\n }\n\n const geoColumn = dataset?.geoColumn;\n const getPosition = d => d[geoColumn].coordinates;\n\n const hexagonId = config.columns?.hex_id;\n\n const layerTypeDefs: Record<\n string,\n {Layer: ConstructorOf<Layer>; propMap?: any; defaultProps?: any}\n > = {\n point: {\n Layer: GeoJsonLayer,\n propMap: {visConfig: {outline: 'stroked'}}\n },\n geojson: {\n Layer: GeoJsonLayer\n },\n grid: {\n Layer: CPUGridLayer,\n propMap: {visConfig: {...aggregationVisConfig, worldUnitSize: x => ({cellSize: 1000 * x})}},\n defaultProps: {getPosition}\n },\n heatmap: {\n Layer: HeatmapLayer,\n propMap: {visConfig: {...aggregationVisConfig, radius: 'radiusPixels'}},\n defaultProps: {getPosition}\n },\n hexagon: {\n Layer: HexagonLayer,\n propMap: {visConfig: {...aggregationVisConfig, worldUnitSize: x => ({radius: 1000 * x})}},\n defaultProps: {getPosition}\n },\n hexagonId: {\n Layer: H3HexagonLayer,\n propMap: {visConfig: {coverage: 'coverage'}},\n defaultProps: {getHexagon: d => d[hexagonId], stroked: false}\n }\n };\n\n const layer = layerTypeDefs[type];\n\n assert(layer, `Unsupported layer type: ${type}`);\n return {\n ...layer,\n propMap: mergePropMaps(sharedPropMap, layer.propMap),\n defaultProps: {...defaultProps, ...layer.defaultProps}\n };\n}\n\nfunction getTileLayer(dataset) {\n const {\n data: {\n tiles: [tileUrl]\n }\n } = dataset;\n /* global URL */\n const formatTiles = new URL(tileUrl).searchParams.get('formatTiles') || TILE_FORMATS.MVT;\n\n return {\n Layer: formatTiles === TILE_FORMATS.MVT ? MVTLayer : CartoTileLayer,\n propMap: sharedPropMap,\n defaultProps: {\n ...defaultProps,\n uniqueIdProperty: 'geoid',\n formatTiles\n }\n };\n}\n\nfunction domainFromAttribute(attribute, scaleType: SCALE_TYPE) {\n if (scaleType === 'ordinal' || scaleType === 'point') {\n return attribute.categories.map(c => c.category).filter(c => c !== undefined && c !== null);\n }\n\n let {min} = attribute;\n if (scaleType === 'log' && min === 0) {\n min = 1e-5;\n }\n return [min, attribute.max];\n}\n\nfunction domainFromValues(values, scaleType: SCALE_TYPE) {\n if (scaleType === 'ordinal') {\n return groupSort(\n values,\n g => -g.length,\n d => d\n );\n } else if (scaleType === 'quantile') {\n return values.sort((a, b) => a - b);\n } else if (scaleType === 'log') {\n const [d0, d1] = extent(values as number[]);\n return [d0 === 0 ? 1e-5 : d0, d1];\n }\n return extent(values);\n}\n\nfunction calculateDomain(data, name, scaleType) {\n if (data.tilestats) {\n // Tileset data type\n const {attributes} = data.tilestats.layers[0];\n const attribute = attributes.find(a => a.attribute === name);\n return domainFromAttribute(attribute, scaleType);\n } else if (data.features) {\n // GeoJSON data type\n const values = data.features.map(({properties}) => properties[name]);\n return domainFromValues(values, scaleType);\n } else if (Array.isArray(data) && data[0][name] !== undefined) {\n // JSON data type\n const values = data.map(properties => properties[name]);\n return domainFromValues(values, scaleType);\n }\n\n return [0, 1];\n}\n\nfunction normalizeAccessor(accessor, data) {\n if (data.features || data.tilestats) {\n return ({properties}) => {\n return accessor(properties);\n };\n }\n return accessor;\n}\n\nexport function opacityToAlpha(opacity) {\n return opacity !== undefined ? Math.round(255 * Math.pow(opacity, 1 / 2.2)) : 255;\n}\n\nexport function getColorValueAccessor({name}, colorAggregation, data: any) {\n const aggregator = AGGREGATION_FUNC[colorAggregation];\n const accessor = values => aggregator(values, p => p[name]);\n return normalizeAccessor(accessor, data);\n}\n\nexport function getColorAccessor(\n {name},\n scaleType: SCALE_TYPE,\n {colors, colorMap},\n opacity: number | undefined,\n data: any\n) {\n const scale = SCALE_FUNCS[scaleType as any]();\n let domain: (string | number)[] = [];\n let scaleColor: string[] = [];\n\n if (Array.isArray(colorMap)) {\n colorMap.forEach(([value, color]) => {\n domain.push(value);\n scaleColor.push(color);\n });\n } else {\n domain = calculateDomain(data, name, scaleType);\n scaleColor = colors;\n }\n\n if (scaleType === 'ordinal') {\n domain = domain.slice(0, scaleColor.length);\n }\n\n scale.domain(domain);\n scale.range(scaleColor);\n scale.unknown(UNKNOWN_COLOR);\n const alpha = opacityToAlpha(opacity);\n\n const accessor = properties => {\n const propertyValue = properties[name];\n const {r, g, b} = rgb(scale(propertyValue));\n return [r, g, b, propertyValue === null ? 0 : alpha];\n };\n return normalizeAccessor(accessor, data);\n}\n\nexport function getSizeAccessor({name}, scaleType: SCALE_TYPE, range: Iterable<Range>, data: any) {\n const scale = SCALE_FUNCS[scaleType as any]();\n scale.domain(calculateDomain(data, name, scaleType));\n scale.range(range);\n\n const accessor = properties => {\n return scale(properties[name]);\n };\n return normalizeAccessor(accessor, data);\n}\n\nconst FORMATS: Record<string, (value: any) => string> = {\n date: s => moment.utc(s).format('MM/DD/YY HH:mm:ssa'),\n integer: d3Format('i'),\n float: d3Format('.5f'),\n timestamp: s => moment.utc(s).format('X'),\n default: String\n};\n\nexport function getTextAccessor({name, type}, data) {\n const format = FORMATS[type] || FORMATS.default;\n const accessor = properties => {\n return format(properties[name]);\n };\n return normalizeAccessor(accessor, data);\n}\n\nexport function getTextPixelOffsetAccessor({alignment, anchor, size}, radius) {\n const padding = 20;\n const signX = anchor === 'middle' ? 0 : anchor === 'start' ? 1 : -1;\n const signY = alignment === 'center' ? 0 : alignment === 'bottom' ? 1 : -1;\n const sizeOffset = alignment === 'center' ? 0 : size;\n\n const calculateOffset = r => [signX * (r + padding), signY * (r + padding + sizeOffset)];\n\n return typeof radius === 'function'\n ? d => {\n return calculateOffset(radius(d));\n }\n : calculateOffset(radius);\n}\n\nexport {domainFromValues as _domainFromValues};\n"],"file":"layer-map.js"}
1
+ {"version":3,"sources":["../../../src/api/layer-map.ts"],"names":["deviation","extent","groupSort","median","variance","rgb","scaleLinear","scaleOrdinal","scaleLog","scalePoint","scaleQuantile","scaleQuantize","scaleSqrt","scaleThreshold","format","d3Format","moment","CPUGridLayer","HeatmapLayer","HexagonLayer","GeoJsonLayer","H3HexagonLayer","MVTLayer","CartoTileLayer","H3TileLayer","QuadbinTileLayer","TILE_FORMATS","assert","SCALE_FUNCS","linear","ordinal","log","point","quantile","quantize","sqrt","custom","UNKNOWN_COLOR","AGGREGATION","average","maximum","minimum","sum","OPACITY_MAP","getFillColor","getLineColor","getTextColor","AGGREGATION_FUNC","values","accessor","v","length","mode","pop","stddev","hexToRGBA","c","r","g","b","opacity","sharedPropMap","color","isVisible","label","textLabel","alignment","anchor","size","visConfig","enable3d","elevationScale","filled","strokeColor","stroked","thickness","radius","wireframe","aggregationVisConfig","colorAggregation","x","colorRange","colors","map","coverage","elevationPercentile","percentile","defaultProps","lineMiterLimit","lineWidthUnits","pointRadiusUnits","rounded","wrapLongitude","mergePropMaps","a","getLayer","type","config","dataset","getTileLayer","geoColumn","getPosition","d","coordinates","hexagonId","columns","hex_id","layerTypeDefs","Layer","propMap","outline","geojson","grid","worldUnitSize","cellSize","heatmap","hexagon","getHexagon","layer","layerFromTileDataset","formatTiles","MVT","scheme","aggregationExp","aggregationResLevel","data","tiles","tileUrl","URL","searchParams","get","uniqueIdProperty","domainFromAttribute","attribute","scaleType","scaleLength","categories","category","filter","undefined","quantiles","min","max","domainFromValues","sort","d0","d1","calculateDomain","name","tilestats","attributes","layers","find","features","properties","Array","isArray","normalizeAccessor","opacityToAlpha","Math","round","pow","getAccessorKeys","aggregation","keys","concat","toUpperCase","findAccessorKey","key","Error","getColorValueAccessor","aggregator","p","getColorAccessor","range","colorMap","scale","domain","scaleColor","forEach","value","push","slice","unknown","alpha","accessorKeys","propertyValue","getSizeAccessor","FORMATS","date","s","utc","integer","float","timestamp","default","String","getTextAccessor","getTextPixelOffsetAccessor","padding","signX","signY","sizeOffset","calculateOffset","_domainFromValues"],"mappings":"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","sourcesContent":["import {deviation, extent, groupSort, median, variance} from 'd3-array';\nimport {rgb} from 'd3-color';\nimport {\n scaleLinear,\n scaleOrdinal,\n scaleLog,\n scalePoint,\n scaleQuantile,\n scaleQuantize,\n scaleSqrt,\n scaleThreshold\n} from 'd3-scale';\nimport {format as d3Format} from 'd3-format';\nimport moment from 'moment-timezone';\n\nimport {Layer, _ConstructorOf as ConstructorOf} from '@deck.gl/core';\nimport {CPUGridLayer, HeatmapLayer, HexagonLayer} from '@deck.gl/aggregation-layers';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {H3HexagonLayer, MVTLayer} from '@deck.gl/geo-layers';\n\nimport CartoTileLayer from '../layers/carto-tile-layer';\nimport H3TileLayer from '../layers/h3-tile-layer';\nimport QuadbinTileLayer from '../layers/quadbin-tile-layer';\nimport {TILE_FORMATS} from './maps-api-common';\nimport {assert} from '../utils';\n\nconst SCALE_FUNCS = {\n linear: scaleLinear,\n ordinal: scaleOrdinal,\n log: scaleLog,\n point: scalePoint,\n quantile: scaleQuantile,\n quantize: scaleQuantize,\n sqrt: scaleSqrt,\n custom: scaleThreshold\n};\nexport type SCALE_TYPE = keyof typeof SCALE_FUNCS;\n\nconst UNKNOWN_COLOR = '#868d91';\n\nexport const AGGREGATION = {\n average: 'MEAN',\n maximum: 'MAX',\n minimum: 'MIN',\n sum: 'SUM'\n};\n\nexport const OPACITY_MAP = {\n getFillColor: 'opacity',\n getLineColor: 'strokeOpacity',\n getTextColor: 'opacity'\n};\n\nconst AGGREGATION_FUNC = {\n 'count unique': (values, accessor) => groupSort(values, v => v.length, accessor).length,\n median,\n // Unfortunately mode() is only available in d3-array@3+ which is ESM only\n mode: (values, accessor) => groupSort(values, v => v.length, accessor).pop(),\n stddev: deviation,\n variance\n};\n\nconst hexToRGBA = c => {\n const {r, g, b, opacity} = rgb(c);\n return [r, g, b, 255 * opacity];\n};\n\n// Kepler -> Deck.gl\nconst sharedPropMap = {\n color: 'getFillColor',\n isVisible: 'visible',\n label: 'cartoLabel',\n textLabel: {\n alignment: 'getTextAlignmentBaseline',\n anchor: 'getTextAnchor',\n color: 'getTextColor',\n size: 'getTextSize'\n },\n visConfig: {\n enable3d: 'extruded',\n elevationScale: 'elevationScale',\n filled: 'filled',\n strokeColor: 'getLineColor',\n stroked: 'stroked',\n thickness: 'getLineWidth',\n radius: 'getPointRadius',\n wireframe: 'wireframe'\n }\n};\n\nconst aggregationVisConfig = {\n colorAggregation: x => ({colorAggregation: AGGREGATION[x] || AGGREGATION.sum}),\n colorRange: x => ({colorRange: x.colors.map(hexToRGBA)}),\n coverage: 'coverage',\n elevationPercentile: ['elevationLowerPercentile', 'elevationUpperPercentile'],\n percentile: ['lowerPercentile', 'upperPercentile']\n};\n\nconst defaultProps = {\n lineMiterLimit: 2,\n lineWidthUnits: 'pixels',\n pointRadiusUnits: 'pixels',\n rounded: true,\n wrapLongitude: false\n};\n\nfunction mergePropMaps(a: Record<string, any> = {}, b: Record<string, any> = {}) {\n return {...a, ...b, visConfig: {...a.visConfig, ...b.visConfig}};\n}\n\nexport function getLayer(\n type: string,\n config,\n dataset\n): {Layer: ConstructorOf<Layer>; propMap: any; defaultProps: any} {\n if (type === 'mvt' || type === 'tileset' || type === 'h3' || type === 'quadbin') {\n return getTileLayer(dataset);\n }\n\n const geoColumn = dataset?.geoColumn;\n const getPosition = d => d[geoColumn].coordinates;\n\n const hexagonId = config.columns?.hex_id;\n\n const layerTypeDefs: Record<\n string,\n {Layer: ConstructorOf<Layer>; propMap?: any; defaultProps?: any}\n > = {\n point: {\n Layer: GeoJsonLayer,\n propMap: {visConfig: {outline: 'stroked'}}\n },\n geojson: {\n Layer: GeoJsonLayer\n },\n grid: {\n Layer: CPUGridLayer,\n propMap: {visConfig: {...aggregationVisConfig, worldUnitSize: x => ({cellSize: 1000 * x})}},\n defaultProps: {getPosition}\n },\n heatmap: {\n Layer: HeatmapLayer,\n propMap: {visConfig: {...aggregationVisConfig, radius: 'radiusPixels'}},\n defaultProps: {getPosition}\n },\n hexagon: {\n Layer: HexagonLayer,\n propMap: {visConfig: {...aggregationVisConfig, worldUnitSize: x => ({radius: 1000 * x})}},\n defaultProps: {getPosition}\n },\n hexagonId: {\n Layer: H3HexagonLayer,\n propMap: {visConfig: {coverage: 'coverage'}},\n defaultProps: {getHexagon: d => d[hexagonId], stroked: false}\n }\n };\n\n const layer = layerTypeDefs[type];\n\n assert(layer, `Unsupported layer type: ${type}`);\n return {\n ...layer,\n propMap: mergePropMaps(sharedPropMap, layer.propMap),\n defaultProps: {...defaultProps, ...layer.defaultProps}\n };\n}\n\nexport function layerFromTileDataset(\n formatTiles: string | null = TILE_FORMATS.MVT,\n scheme: string\n): typeof CartoTileLayer | typeof H3TileLayer | typeof MVTLayer | typeof QuadbinTileLayer {\n if (scheme === 'h3') {\n return H3TileLayer;\n }\n if (scheme === 'quadbin') {\n return QuadbinTileLayer;\n }\n if (formatTiles === TILE_FORMATS.MVT) {\n return MVTLayer;\n }\n\n // formatTiles === BINARY|JSON|GEOJSON\n return CartoTileLayer;\n}\n\nfunction getTileLayer(dataset) {\n const {\n aggregationExp,\n aggregationResLevel,\n data: {\n scheme,\n tiles: [tileUrl]\n }\n } = dataset;\n /* global URL */\n const formatTiles = new URL(tileUrl).searchParams.get('formatTiles');\n\n return {\n Layer: layerFromTileDataset(formatTiles, scheme),\n propMap: sharedPropMap,\n defaultProps: {\n ...defaultProps,\n ...(aggregationExp && {aggregationExp}),\n ...(aggregationResLevel && {aggregationResLevel}),\n formatTiles,\n uniqueIdProperty: 'geoid'\n }\n };\n}\n\nfunction domainFromAttribute(attribute, scaleType: SCALE_TYPE, scaleLength: number) {\n if (scaleType === 'ordinal' || scaleType === 'point') {\n return attribute.categories.map(c => c.category).filter(c => c !== undefined && c !== null);\n }\n\n if (scaleType === 'quantile' && attribute.quantiles) {\n return attribute.quantiles[scaleLength];\n }\n\n let {min} = attribute;\n if (scaleType === 'log' && min === 0) {\n min = 1e-5;\n }\n return [min, attribute.max];\n}\n\nfunction domainFromValues(values, scaleType: SCALE_TYPE) {\n if (scaleType === 'ordinal') {\n return groupSort(\n values,\n g => -g.length,\n d => d\n );\n } else if (scaleType === 'quantile') {\n return values.sort((a, b) => a - b);\n } else if (scaleType === 'log') {\n const [d0, d1] = extent(values as number[]);\n return [d0 === 0 ? 1e-5 : d0, d1];\n }\n return extent(values);\n}\n\nfunction calculateDomain(data, name, scaleType, scaleLength?) {\n if (data.tilestats) {\n // Tileset data type\n const {attributes} = data.tilestats.layers[0];\n const attribute = attributes.find(a => a.attribute === name);\n return domainFromAttribute(attribute, scaleType, scaleLength);\n } else if (data.features) {\n // GeoJSON data type\n const values = data.features.map(({properties}) => properties[name]);\n return domainFromValues(values, scaleType);\n } else if (Array.isArray(data) && data[0][name] !== undefined) {\n // JSON data type\n const values = data.map(properties => properties[name]);\n return domainFromValues(values, scaleType);\n }\n\n return [0, 1];\n}\n\nfunction normalizeAccessor(accessor, data) {\n if (data.features || data.tilestats) {\n return ({properties}) => {\n return accessor(properties);\n };\n }\n return accessor;\n}\n\nexport function opacityToAlpha(opacity) {\n return opacity !== undefined ? Math.round(255 * Math.pow(opacity, 1 / 2.2)) : 255;\n}\n\nfunction getAccessorKeys(name: string, aggregation: string | undefined): string[] {\n let keys = [name];\n if (aggregation) {\n // Snowflake will capitalized the keys, need to check lower and upper case version\n keys = keys.concat([aggregation, aggregation.toUpperCase()].map(a => `${name}_${a}`));\n }\n return keys;\n}\n\nfunction findAccessorKey(keys: string[], properties): string[] {\n for (const key of keys) {\n if (key in properties) {\n return [key];\n }\n }\n\n throw new Error(`Could not find property for any accessor key: ${keys}`);\n}\n\nexport function getColorValueAccessor({name}, colorAggregation, data: any) {\n const aggregator = AGGREGATION_FUNC[colorAggregation];\n const accessor = values => aggregator(values, p => p[name]);\n return normalizeAccessor(accessor, data);\n}\n\nexport function getColorAccessor(\n {name},\n scaleType: SCALE_TYPE,\n {aggregation, range: {colors, colorMap}},\n opacity: number | undefined,\n data: any\n) {\n const scale = SCALE_FUNCS[scaleType as any]();\n let domain: (string | number)[] = [];\n let scaleColor: string[] = [];\n\n if (Array.isArray(colorMap)) {\n colorMap.forEach(([value, color]) => {\n domain.push(value);\n scaleColor.push(color);\n });\n } else {\n domain = calculateDomain(data, name, scaleType, colors.length);\n scaleColor = colors;\n }\n\n if (scaleType === 'ordinal') {\n domain = domain.slice(0, scaleColor.length);\n }\n\n scale.domain(domain);\n scale.range(scaleColor);\n scale.unknown(UNKNOWN_COLOR);\n const alpha = opacityToAlpha(opacity);\n\n let accessorKeys = getAccessorKeys(name, aggregation);\n const accessor = properties => {\n if (!(accessorKeys[0] in properties)) {\n accessorKeys = findAccessorKey(accessorKeys, properties);\n }\n const propertyValue = properties[accessorKeys[0]];\n const {r, g, b} = rgb(scale(propertyValue));\n return [r, g, b, propertyValue === null ? 0 : alpha];\n };\n return normalizeAccessor(accessor, data);\n}\n\nexport function getSizeAccessor(\n {name},\n scaleType: SCALE_TYPE,\n aggregation,\n range: Iterable<Range>,\n data: any\n) {\n const scale = SCALE_FUNCS[scaleType as any]();\n scale.domain(calculateDomain(data, name, scaleType));\n scale.range(range);\n\n let accessorKeys = getAccessorKeys(name, aggregation);\n const accessor = properties => {\n if (!(accessorKeys[0] in properties)) {\n accessorKeys = findAccessorKey(accessorKeys, properties);\n }\n const propertyValue = properties[accessorKeys[0]];\n return scale(propertyValue);\n };\n return normalizeAccessor(accessor, data);\n}\n\nconst FORMATS: Record<string, (value: any) => string> = {\n date: s => moment.utc(s).format('MM/DD/YY HH:mm:ssa'),\n integer: d3Format('i'),\n float: d3Format('.5f'),\n timestamp: s => moment.utc(s).format('X'),\n default: String\n};\n\nexport function getTextAccessor({name, type}, data) {\n const format = FORMATS[type] || FORMATS.default;\n const accessor = properties => {\n return format(properties[name]);\n };\n return normalizeAccessor(accessor, data);\n}\n\nexport function getTextPixelOffsetAccessor({alignment, anchor, size}, radius) {\n const padding = 20;\n const signX = anchor === 'middle' ? 0 : anchor === 'start' ? 1 : -1;\n const signY = alignment === 'center' ? 0 : alignment === 'bottom' ? 1 : -1;\n const sizeOffset = alignment === 'center' ? 0 : size;\n\n const calculateOffset = r => [signX * (r + padding), signY * (r + padding + sizeOffset)];\n\n return typeof radius === 'function'\n ? d => {\n return calculateOffset(radius(d));\n }\n : calculateOffset(radius);\n}\n\nexport {domainFromValues as _domainFromValues};\n"],"file":"layer-map.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api/maps-api-common.ts"],"names":["DEFAULT_USER_COMPONENT_IN_URL","DEFAULT_REGION_COMPONENT_IN_URL","API_VERSIONS","V1","V2","V3","DEFAULT_MAPS_URL_FORMAT","MAP_TYPES","QUERY","TABLE","TILESET","COLUMNS_SUPPORT","GEO_COLUMN_SUPPORT","FORMATS","GEOJSON","NDJSON","TILEJSON","JSON","TILE_FORMATS","MVT","BINARY","SchemaFieldType","encodeParameter","name","value","encodeURIComponent"],"mappings":"AAAA,OAAO,MAAMA,6BAA6B,GAAG,QAAtC;AACP,OAAO,MAAMC,+BAA+B,GAAG,UAAxC;AAGP,OAAO,MAAMC,YAAY,GAAG;AAC1BC,EAAAA,EAAE,EAAE,IADsB;AAE1BC,EAAAA,EAAE,EAAE,IAFsB;AAG1BC,EAAAA,EAAE,EAAE;AAHsB,CAArB;AAOP,OAAO,MAAMC,uBAAuB,GAAG;AACrC,GAACJ,YAAY,CAACC,EAAd,qBAA8BH,6BAA9B,0BADqC;AAErC,GAACE,YAAY,CAACE,EAAd,iCAA0CH,+BAA1C,6BAA4FD,6BAA5F;AAFqC,CAAhC;AAKP,OAAO,MAAMO,SAAS,GAAG;AACvBC,EAAAA,KAAK,EAAE,OADgB;AAEvBC,EAAAA,KAAK,EAAE,OAFgB;AAGvBC,EAAAA,OAAO,EAAE;AAHc,CAAlB;AAMP,OAAO,MAAMC,eAA0B,GAAG,CAACJ,SAAS,CAACE,KAAX,CAAnC;AACP,OAAO,MAAMG,kBAA6B,GAAG,CAACL,SAAS,CAACC,KAAX,EAAkBD,SAAS,CAACE,KAA5B,CAAtC;AAGP,OAAO,MAAMI,OAAO,GAAG;AACrBC,EAAAA,OAAO,EAAE,SADY;AAErBC,EAAAA,MAAM,EAAE,QAFa;AAGrBC,EAAAA,QAAQ,EAAE,UAHW;AAIrBC,EAAAA,IAAI,EAAE;AAJe,CAAhB;AASP,OAAO,MAAMC,YAAY,GAAG;AAC1BC,EAAAA,GAAG,EAAE,KADqB;AAE1BF,EAAAA,IAAI,EAAE,MAFoB;AAG1BH,EAAAA,OAAO,EAAE,SAHiB;AAI1BM,EAAAA,MAAM,EAAE;AAJkB,CAArB;AAQP,WAAYC,eAAZ;;WAAYA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;GAAAA,e,KAAAA,e;;AAiCZ,OAAO,SAASC,eAAT,CAAyBC,IAAzB,EAAuCC,KAAvC,EAAiF;AACtF,mBAAUD,IAAV,cAAkBE,kBAAkB,CAACD,KAAD,CAApC;AACD","sourcesContent":["export const DEFAULT_USER_COMPONENT_IN_URL = '{user}';\nexport const DEFAULT_REGION_COMPONENT_IN_URL = '{region}';\n\nexport type ValuesOf<T extends {}> = T[keyof T];\nexport const API_VERSIONS = {\n V1: 'v1',\n V2: 'v2',\n V3: 'v3'\n} as const;\nexport type ApiVersion = ValuesOf<typeof API_VERSIONS>;\n\nexport const DEFAULT_MAPS_URL_FORMAT = {\n [API_VERSIONS.V1]: `https://${DEFAULT_USER_COMPONENT_IN_URL}.carto.com/api/v1/map`,\n [API_VERSIONS.V2]: `https://maps-api-v2.${DEFAULT_REGION_COMPONENT_IN_URL}.carto.com/user/${DEFAULT_USER_COMPONENT_IN_URL}`\n} as const;\n\nexport const MAP_TYPES = {\n QUERY: 'query',\n TABLE: 'table',\n TILESET: 'tileset'\n} as const;\nexport type MapType = ValuesOf<typeof MAP_TYPES>;\nexport const COLUMNS_SUPPORT: MapType[] = [MAP_TYPES.TABLE];\nexport const GEO_COLUMN_SUPPORT: MapType[] = [MAP_TYPES.QUERY, MAP_TYPES.TABLE];\n\n// AVAILABLE FORMATS\nexport const FORMATS = {\n GEOJSON: 'geojson',\n NDJSON: 'ndjson',\n TILEJSON: 'tilejson',\n JSON: 'json'\n} as const;\nexport type Format = ValuesOf<typeof FORMATS>;\n\n// AVAILABLE FORMATS FOR TILES\nexport const TILE_FORMATS = {\n MVT: 'mvt',\n JSON: 'json',\n GEOJSON: 'geojson',\n BINARY: 'binary'\n} as const;\nexport type TileFormat = ValuesOf<typeof TILE_FORMATS>;\n\nexport enum SchemaFieldType {\n Number = 'number',\n Bigint = 'bigint',\n String = 'string',\n Geometry = 'geometry',\n Timestamp = 'timestamp',\n Object = 'object',\n Boolean = 'boolean',\n Variant = 'variant',\n Unknown = 'unknown'\n}\nexport interface SchemaField {\n name: string;\n type: SchemaFieldType; // Field type in the CARTO stack, common for all providers\n}\n\nexport interface MapInstantiation extends MapInstantiationFormats {\n nrows: number;\n size?: number;\n schema: SchemaField[];\n}\n\ntype MapInstantiationFormats = Record<\n Format,\n {\n url: string[];\n error?: any;\n }\n>;\n\n/**\n * Simple encode parameter\n */\nexport function encodeParameter(name: string, value: string | boolean | number): string {\n return `${name}=${encodeURIComponent(value)}`;\n}\n"],"file":"maps-api-common.js"}
1
+ {"version":3,"sources":["../../../src/api/maps-api-common.ts"],"names":["DEFAULT_USER_COMPONENT_IN_URL","DEFAULT_REGION_COMPONENT_IN_URL","API_VERSIONS","V1","V2","V3","DEFAULT_MAPS_URL_FORMAT","MAP_TYPES","QUERY","TABLE","TILESET","COLUMNS_SUPPORT","GEO_COLUMN_SUPPORT","FORMATS","GEOJSON","NDJSON","TILEJSON","JSON","TILE_FORMATS","MVT","BINARY","SchemaFieldType","encodeParameter","name","value","encodeURIComponent"],"mappings":"AAAA,OAAO,MAAMA,6BAA6B,GAAG,QAAtC;AACP,OAAO,MAAMC,+BAA+B,GAAG,UAAxC;AAGP,OAAO,MAAMC,YAAY,GAAG;AAC1BC,EAAAA,EAAE,EAAE,IADsB;AAE1BC,EAAAA,EAAE,EAAE,IAFsB;AAG1BC,EAAAA,EAAE,EAAE;AAHsB,CAArB;AAOP,OAAO,MAAMC,uBAAuB,GAAG;AACrC,GAACJ,YAAY,CAACC,EAAd,qBAA8BH,6BAA9B,0BADqC;AAErC,GAACE,YAAY,CAACE,EAAd,iCAA0CH,+BAA1C,6BAA4FD,6BAA5F;AAFqC,CAAhC;AAKP,OAAO,MAAMO,SAAS,GAAG;AACvBC,EAAAA,KAAK,EAAE,OADgB;AAEvBC,EAAAA,KAAK,EAAE,OAFgB;AAGvBC,EAAAA,OAAO,EAAE;AAHc,CAAlB;AAMP,OAAO,MAAMC,eAA0B,GAAG,CAACJ,SAAS,CAACE,KAAX,CAAnC;AACP,OAAO,MAAMG,kBAA6B,GAAG,CAACL,SAAS,CAACC,KAAX,EAAkBD,SAAS,CAACE,KAA5B,CAAtC;AAGP,OAAO,MAAMI,OAAO,GAAG;AACrBC,EAAAA,OAAO,EAAE,SADY;AAErBC,EAAAA,MAAM,EAAE,QAFa;AAGrBC,EAAAA,QAAQ,EAAE,UAHW;AAIrBC,EAAAA,IAAI,EAAE;AAJe,CAAhB;AASP,OAAO,MAAMC,YAAY,GAAG;AAC1BC,EAAAA,GAAG,EAAE,KADqB;AAE1BF,EAAAA,IAAI,EAAE,MAFoB;AAG1BH,EAAAA,OAAO,EAAE,SAHiB;AAI1BM,EAAAA,MAAM,EAAE;AAJkB,CAArB;AAQP,WAAYC,eAAZ;;WAAYA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;GAAAA,e,KAAAA,e;;AAiCZ,OAAO,SAASC,eAAT,CAAyBC,IAAzB,EAAuCC,KAAvC,EAAiF;AACtF,mBAAUD,IAAV,cAAkBE,kBAAkB,CAACD,KAAD,CAApC;AACD","sourcesContent":["export const DEFAULT_USER_COMPONENT_IN_URL = '{user}';\nexport const DEFAULT_REGION_COMPONENT_IN_URL = '{region}';\n\nexport type ValuesOf<T extends {}> = T[keyof T];\nexport const API_VERSIONS = {\n V1: 'v1',\n V2: 'v2',\n V3: 'v3'\n} as const;\nexport type ApiVersion = ValuesOf<typeof API_VERSIONS>;\n\nexport const DEFAULT_MAPS_URL_FORMAT = {\n [API_VERSIONS.V1]: `https://${DEFAULT_USER_COMPONENT_IN_URL}.carto.com/api/v1/map`,\n [API_VERSIONS.V2]: `https://maps-api-v2.${DEFAULT_REGION_COMPONENT_IN_URL}.carto.com/user/${DEFAULT_USER_COMPONENT_IN_URL}`\n} as const;\n\nexport const MAP_TYPES = {\n QUERY: 'query',\n TABLE: 'table',\n TILESET: 'tileset'\n} as const;\nexport type MapType = ValuesOf<typeof MAP_TYPES>;\nexport const COLUMNS_SUPPORT: MapType[] = [MAP_TYPES.TABLE];\nexport const GEO_COLUMN_SUPPORT: MapType[] = [MAP_TYPES.QUERY, MAP_TYPES.TABLE];\n\n// AVAILABLE FORMATS\nexport const FORMATS = {\n GEOJSON: 'geojson',\n NDJSON: 'ndjson',\n TILEJSON: 'tilejson',\n JSON: 'json'\n} as const;\nexport type Format = ValuesOf<typeof FORMATS>;\n\n// AVAILABLE FORMATS FOR TILES\nexport const TILE_FORMATS = {\n MVT: 'mvt',\n JSON: 'json',\n GEOJSON: 'geojson',\n BINARY: 'binary'\n} as const;\nexport type TileFormat = ValuesOf<typeof TILE_FORMATS>;\n\nexport enum SchemaFieldType {\n Number = 'number',\n Bigint = 'bigint',\n String = 'string',\n Geometry = 'geometry',\n Timestamp = 'timestamp',\n Object = 'object',\n Boolean = 'boolean',\n Variant = 'variant',\n Unknown = 'unknown'\n}\nexport interface SchemaField {\n name: string;\n type: SchemaFieldType; // Field type in the CARTO stack, common for all providers\n}\n\nexport interface MapInstantiation extends MapInstantiationFormats {\n nrows: number;\n size?: number;\n schema: SchemaField[];\n}\n\ntype MapInstantiationFormats = Record<\n Format,\n {\n url: string[];\n error?: any;\n }\n>;\n\n/**\n * Simple encode parameter\n */\nexport function encodeParameter(name: string, value: string | boolean | number): string {\n return `${name}=${encodeURIComponent(value)}`;\n}\n\nexport type QueryParameterValue = string | number | boolean | Array<QueryParameterValue> | object;\n\nexport type NamedQueryParameter = Record<string, QueryParameterValue>;\n\nexport type PositionalQueryParameter = QueryParameterValue[];\n\nexport type QueryParameters = NamedQueryParameter | PositionalQueryParameter;\n"],"file":"maps-api-common.js"}
@@ -1,4 +1,4 @@
1
- import { getDefaultCredentials, buildMapsUrlFromBase } from '../config';
1
+ import { getDefaultCredentials, buildMapsUrlFromBase, buildStatsUrlFromBase } from '../config';
2
2
  import { API_VERSIONS, COLUMNS_SUPPORT, encodeParameter, FORMATS, GEO_COLUMN_SUPPORT, MAP_TYPES, TILE_FORMATS } from './maps-api-common';
3
3
  import { parseMap } from './parseMap';
4
4
  import { log } from '@deck.gl/core';
@@ -9,10 +9,11 @@ const DEFAULT_CLIENT = 'deck-gl-carto';
9
9
  async function request({
10
10
  method,
11
11
  url,
12
+ headers: customHeaders,
12
13
  accessToken,
13
14
  body
14
15
  }) {
15
- const headers = {
16
+ const headers = { ...customHeaders,
16
17
  Accept: 'application/json'
17
18
  };
18
19
 
@@ -38,12 +39,14 @@ async function request({
38
39
  async function requestJson({
39
40
  method,
40
41
  url,
42
+ headers,
41
43
  accessToken,
42
44
  body
43
45
  }) {
44
46
  const response = await request({
45
47
  method,
46
48
  url,
49
+ headers,
47
50
  accessToken,
48
51
  body
49
52
  });
@@ -108,12 +111,17 @@ function getParameters({
108
111
  columns,
109
112
  clientId,
110
113
  aggregationExp,
111
- aggregationResLevel
114
+ aggregationResLevel,
115
+ queryParameters
112
116
  }) {
113
117
  const parameters = [encodeParameter('client', clientId || DEFAULT_CLIENT)];
114
118
  const sourceName = type === MAP_TYPES.QUERY ? 'q' : 'name';
115
119
  parameters.push(encodeParameter(sourceName, source));
116
120
 
121
+ if (queryParameters) {
122
+ parameters.push(encodeParameter('queryParameters', JSON.stringify(queryParameters)));
123
+ }
124
+
117
125
  if (geoColumn) {
118
126
  parameters.push(encodeParameter('geo_column', geoColumn));
119
127
  }
@@ -124,6 +132,8 @@ function getParameters({
124
132
 
125
133
  if (aggregationExp) {
126
134
  parameters.push(encodeParameter('aggregationExp', aggregationExp));
135
+ } else if (isSpatialIndexGeoColumn(geoColumn)) {
136
+ parameters.push(encodeParameter('aggregationExp', '1 AS value'));
127
137
  }
128
138
 
129
139
  if (aggregationResLevel) {
@@ -133,6 +143,11 @@ function getParameters({
133
143
  return parameters.join('&');
134
144
  }
135
145
 
146
+ function isSpatialIndexGeoColumn(geoColumn) {
147
+ const spatialIndex = geoColumn === null || geoColumn === void 0 ? void 0 : geoColumn.split(':')[0];
148
+ return spatialIndex === 'h3' || spatialIndex === 'quadbin';
149
+ }
150
+
136
151
  export async function mapInstantiation({
137
152
  type,
138
153
  source,
@@ -141,8 +156,10 @@ export async function mapInstantiation({
141
156
  geoColumn,
142
157
  columns,
143
158
  clientId,
159
+ headers,
144
160
  aggregationExp,
145
- aggregationResLevel
161
+ aggregationResLevel,
162
+ queryParameters
146
163
  }) {
147
164
  const baseUrl = "".concat(credentials.mapsUrl, "/").concat(connection, "/").concat(type);
148
165
  const url = "".concat(baseUrl, "?").concat(getParameters({
@@ -151,8 +168,9 @@ export async function mapInstantiation({
151
168
  geoColumn,
152
169
  columns,
153
170
  clientId,
171
+ aggregationResLevel,
154
172
  aggregationExp,
155
- aggregationResLevel
173
+ queryParameters
156
174
  }));
157
175
  const {
158
176
  accessToken
@@ -161,11 +179,13 @@ export async function mapInstantiation({
161
179
  if (url.length > MAX_GET_LENGTH && type === MAP_TYPES.QUERY) {
162
180
  const body = JSON.stringify({
163
181
  q: source,
164
- client: clientId || DEFAULT_CLIENT
182
+ client: clientId || DEFAULT_CLIENT,
183
+ queryParameters
165
184
  });
166
185
  return await requestJson({
167
186
  method: 'POST',
168
187
  url: baseUrl,
188
+ headers,
169
189
  accessToken,
170
190
  body
171
191
  });
@@ -173,6 +193,7 @@ export async function mapInstantiation({
173
193
 
174
194
  return await requestJson({
175
195
  url,
196
+ headers,
176
197
  accessToken
177
198
  });
178
199
  }
@@ -230,8 +251,10 @@ export async function fetchLayerData({
230
251
  format,
231
252
  formatTiles,
232
253
  clientId,
254
+ headers,
233
255
  aggregationExp,
234
- aggregationResLevel
256
+ aggregationResLevel,
257
+ queryParameters
235
258
  }) {
236
259
  const {
237
260
  url,
@@ -248,8 +271,10 @@ export async function fetchLayerData({
248
271
  format,
249
272
  formatTiles,
250
273
  clientId,
274
+ headers,
251
275
  aggregationExp,
252
- aggregationResLevel
276
+ aggregationResLevel,
277
+ queryParameters
253
278
  });
254
279
  const data = await requestData({
255
280
  url,
@@ -274,8 +299,10 @@ async function _fetchDataUrl({
274
299
  format,
275
300
  formatTiles,
276
301
  clientId,
302
+ headers,
277
303
  aggregationExp,
278
- aggregationResLevel
304
+ aggregationResLevel,
305
+ queryParameters
279
306
  }) {
280
307
  const defaultCredentials = getDefaultCredentials();
281
308
  const localCreds = { ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),
@@ -304,8 +331,10 @@ async function _fetchDataUrl({
304
331
  geoColumn,
305
332
  columns,
306
333
  clientId,
334
+ headers,
307
335
  aggregationExp,
308
- aggregationResLevel
336
+ aggregationResLevel,
337
+ queryParameters
309
338
  });
310
339
  let url = null;
311
340
  let mapFormat;
@@ -345,8 +374,10 @@ async function _fetchDataUrl({
345
374
  };
346
375
  }
347
376
 
348
- async function _fetchMapDataset(dataset, accessToken, credentials, clientId) {
377
+ async function _fetchMapDataset(dataset, accessToken, credentials, clientId, headers, queryParameters) {
349
378
  const {
379
+ aggregationExp,
380
+ aggregationResLevel,
350
381
  connectionName: connection,
351
382
  columns,
352
383
  format,
@@ -358,6 +389,8 @@ async function _fetchMapDataset(dataset, accessToken, credentials, clientId) {
358
389
  url,
359
390
  mapFormat
360
391
  } = await _fetchDataUrl({
392
+ aggregationExp,
393
+ aggregationResLevel,
361
394
  clientId,
362
395
  credentials: { ...credentials,
363
396
  accessToken
@@ -366,8 +399,10 @@ async function _fetchMapDataset(dataset, accessToken, credentials, clientId) {
366
399
  columns,
367
400
  format,
368
401
  geoColumn,
402
+ headers,
369
403
  source,
370
- type
404
+ type,
405
+ queryParameters
371
406
  });
372
407
  const cache = parseInt(new URL(url).searchParams.get('cache') || '', 10);
373
408
 
@@ -384,11 +419,86 @@ async function _fetchMapDataset(dataset, accessToken, credentials, clientId) {
384
419
  return true;
385
420
  }
386
421
 
422
+ async function _fetchTilestats(attribute, dataset, accessToken, credentials) {
423
+ const {
424
+ connectionName: connection,
425
+ source,
426
+ type
427
+ } = dataset;
428
+ const statsUrl = buildStatsUrlFromBase(credentials.apiBaseUrl);
429
+ let url = "".concat(statsUrl, "/").concat(connection, "/");
430
+
431
+ if (type === MAP_TYPES.QUERY) {
432
+ url += "".concat(attribute, "?q=").concat(source);
433
+ } else {
434
+ url += "".concat(source, "/").concat(attribute);
435
+ }
436
+
437
+ const stats = await requestData({
438
+ url,
439
+ format: FORMATS.JSON,
440
+ accessToken
441
+ });
442
+ const {
443
+ attributes
444
+ } = dataset.data.tilestats.layers[0];
445
+ const index = attributes.findIndex(d => d.attribute === attribute);
446
+ attributes[index] = stats;
447
+ return true;
448
+ }
449
+
387
450
  async function fillInMapDatasets({
388
451
  datasets,
389
452
  token
390
- }, clientId, credentials) {
391
- const promises = datasets.map(dataset => _fetchMapDataset(dataset, token, credentials, clientId));
453
+ }, clientId, credentials, headers) {
454
+ const promises = datasets.map(dataset => _fetchMapDataset(dataset, token, credentials, clientId, headers));
455
+ return await Promise.all(promises);
456
+ }
457
+
458
+ async function fillInTileStats({
459
+ datasets,
460
+ keplerMapConfig,
461
+ token
462
+ }, credentials) {
463
+ const attributes = [];
464
+ const {
465
+ layers
466
+ } = keplerMapConfig.config.visState;
467
+
468
+ for (const layer of layers) {
469
+ for (const channel of Object.keys(layer.visualChannels)) {
470
+ var _layer$visualChannels;
471
+
472
+ const attribute = (_layer$visualChannels = layer.visualChannels[channel]) === null || _layer$visualChannels === void 0 ? void 0 : _layer$visualChannels.name;
473
+
474
+ if (attribute) {
475
+ const dataset = datasets.find(d => d.id === layer.config.dataId);
476
+
477
+ if (dataset.data.tilestats && dataset.type !== MAP_TYPES.TILESET) {
478
+ attributes.push({
479
+ attribute,
480
+ dataset
481
+ });
482
+ }
483
+ }
484
+ }
485
+ }
486
+
487
+ const filteredAttributes = [];
488
+
489
+ for (const a of attributes) {
490
+ if (!filteredAttributes.find(({
491
+ attribute,
492
+ dataset
493
+ }) => attribute === a.attribute && dataset === a.dataset)) {
494
+ filteredAttributes.push(a);
495
+ }
496
+ }
497
+
498
+ const promises = filteredAttributes.map(({
499
+ attribute,
500
+ dataset
501
+ }) => _fetchTilestats(attribute, dataset, token, credentials));
392
502
  return await Promise.all(promises);
393
503
  }
394
504
 
@@ -396,6 +506,7 @@ export async function fetchMap({
396
506
  cartoMapId,
397
507
  clientId,
398
508
  credentials,
509
+ headers,
399
510
  autoRefresh,
400
511
  onNewData
401
512
  }) {
@@ -423,13 +534,14 @@ export async function fetchMap({
423
534
  const url = "".concat(localCreds.mapsUrl, "/public/").concat(cartoMapId);
424
535
  const map = await requestJson({
425
536
  url,
537
+ headers,
426
538
  accessToken
427
539
  });
428
540
  let stopAutoRefresh;
429
541
 
430
542
  if (autoRefresh) {
431
543
  const intervalId = setInterval(async () => {
432
- const changed = await fillInMapDatasets(map, clientId, localCreds);
544
+ const changed = await fillInMapDatasets(map, clientId, localCreds, headers);
433
545
 
434
546
  if (onNewData && changed.some(v => v === true)) {
435
547
  onNewData(parseMap(map));
@@ -452,7 +564,8 @@ export async function fetchMap({
452
564
  dataset.format = 'geojson';
453
565
  }
454
566
  });
455
- await fillInMapDatasets(map, clientId, localCreds);
567
+ await fillInMapDatasets(map, clientId, localCreds, headers);
568
+ await fillInTileStats(map, localCreds);
456
569
  return { ...parseMap(map),
457
570
  ...{
458
571
  stopAutoRefresh