@deck.gl/carto 8.8.2 → 8.8.5

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 (57) hide show
  1. package/dist/dist.dev.js +298 -82
  2. package/dist/es5/api/layer-map.js +104 -17
  3. package/dist/es5/api/layer-map.js.map +1 -1
  4. package/dist/es5/api/maps-v3-client.js +191 -35
  5. package/dist/es5/api/maps-v3-client.js.map +1 -1
  6. package/dist/es5/api/parseMap.js +14 -4
  7. package/dist/es5/api/parseMap.js.map +1 -1
  8. package/dist/es5/config.js +11 -2
  9. package/dist/es5/config.js.map +1 -1
  10. package/dist/es5/layers/carto-layer.js +4 -17
  11. package/dist/es5/layers/carto-layer.js.map +1 -1
  12. package/dist/es5/style/color-bins-style.js.map +1 -1
  13. package/dist/es5/style/color-categories-style.js.map +1 -1
  14. package/dist/es5/style/color-continuous-style.js.map +1 -1
  15. package/dist/es5/style/utils.js +3 -1
  16. package/dist/es5/style/utils.js.map +1 -1
  17. package/dist/esm/api/layer-map.js +79 -14
  18. package/dist/esm/api/layer-map.js.map +1 -1
  19. package/dist/esm/api/maps-v3-client.js +90 -3
  20. package/dist/esm/api/maps-v3-client.js.map +1 -1
  21. package/dist/esm/api/parseMap.js +18 -4
  22. package/dist/esm/api/parseMap.js.map +1 -1
  23. package/dist/esm/config.js +10 -2
  24. package/dist/esm/config.js.map +1 -1
  25. package/dist/esm/layers/carto-layer.js +4 -15
  26. package/dist/esm/layers/carto-layer.js.map +1 -1
  27. package/dist/esm/style/color-bins-style.js.map +1 -1
  28. package/dist/esm/style/color-categories-style.js.map +1 -1
  29. package/dist/esm/style/color-continuous-style.js.map +1 -1
  30. package/dist/esm/style/utils.js +3 -1
  31. package/dist/esm/style/utils.js.map +1 -1
  32. package/dist.min.js +138 -138
  33. package/package.json +9 -9
  34. package/src/api/layer-map.ts +76 -13
  35. package/src/api/maps-v3-client.ts +92 -4
  36. package/src/api/parseMap.ts +6 -2
  37. package/src/config.ts +12 -2
  38. package/src/layers/carto-layer.ts +9 -29
  39. package/src/style/color-bins-style.ts +25 -3
  40. package/src/style/color-categories-style.ts +28 -4
  41. package/src/style/color-continuous-style.ts +25 -3
  42. package/src/style/utils.ts +8 -4
  43. package/typed/api/layer-map.d.ts +12 -4
  44. package/typed/api/layer-map.d.ts.map +1 -1
  45. package/typed/api/maps-v3-client.d.ts.map +1 -1
  46. package/typed/config.d.ts +2 -0
  47. package/typed/config.d.ts.map +1 -1
  48. package/typed/layers/carto-layer.d.ts +2 -7
  49. package/typed/layers/carto-layer.d.ts.map +1 -1
  50. package/typed/style/color-bins-style.d.ts +22 -3
  51. package/typed/style/color-bins-style.d.ts.map +1 -1
  52. package/typed/style/color-categories-style.d.ts +24 -4
  53. package/typed/style/color-categories-style.d.ts.map +1 -1
  54. package/typed/style/color-continuous-style.d.ts +22 -3
  55. package/typed/style/color-continuous-style.d.ts.map +1 -1
  56. package/typed/style/utils.d.ts +3 -6
  57. package/typed/style/utils.d.ts.map +1 -1
package/dist/dist.dev.js CHANGED
@@ -6293,13 +6293,10 @@ __webpack_require__.r(__webpack_exports__);
6293
6293
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "forEachSegmentInPolygonPoints", function() { return forEachSegmentInPolygonPoints; });
6294
6294
  /* harmony import */ var _math_gl_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @math.gl/core */ "../../node_modules/@math.gl/core/dist/esm/index.js");
6295
6295
 
6296
- let WINDING;
6297
-
6298
- (function (WINDING) {
6299
- WINDING[WINDING["CLOCKWISE"] = 1] = "CLOCKWISE";
6300
- WINDING[WINDING["COUNTER_CLOCKWISE"] = -1] = "COUNTER_CLOCKWISE";
6301
- })(WINDING || (WINDING = {}));
6302
-
6296
+ const WINDING = {
6297
+ CLOCKWISE: 1,
6298
+ COUNTER_CLOCKWISE: -1
6299
+ };
6303
6300
  function modifyPolygonWindingDirection(points, direction, options = {}) {
6304
6301
  const windingDirection = getPolygonWindingDirection(points, options);
6305
6302
 
@@ -6822,7 +6819,7 @@ function unprojectOnFarPlane(viewport, x, targetZ) {
6822
6819
  /*!****************************************************************************************!*\
6823
6820
  !*** /Users/missx/Source/deck.gl/node_modules/@math.gl/web-mercator/dist/esm/index.js ***!
6824
6821
  \****************************************************************************************/
6825
- /*! exports provided: default, WebMercatorViewport, getBounds, fitBounds, normalizeViewportProps, flyToViewport, getFlyToDuration, MAX_LATITUDE, lngLatToWorld, worldToLngLat, worldToPixels, pixelsToWorld, zoomToScale, scaleToZoom, altitudeToFovy, fovyToAltitude, getMeterZoom, getDistanceScales, addMetersToLngLat, getViewMatrix, getProjectionMatrix, getProjectionParameters */
6822
+ /*! exports provided: default, WebMercatorViewport, getBounds, fitBounds, normalizeViewportProps, flyToViewport, getFlyToDuration, MAX_LATITUDE, lngLatToWorld, worldToLngLat, worldToPixels, pixelsToWorld, zoomToScale, scaleToZoom, altitudeToFovy, fovyToAltitude, getMeterZoom, unitsPerMeter, getDistanceScales, addMetersToLngLat, getViewMatrix, getProjectionMatrix, getProjectionParameters */
6826
6823
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
6827
6824
 
6828
6825
  "use strict";
@@ -6867,6 +6864,8 @@ __webpack_require__.r(__webpack_exports__);
6867
6864
 
6868
6865
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getMeterZoom", function() { return _web_mercator_utils__WEBPACK_IMPORTED_MODULE_5__["getMeterZoom"]; });
6869
6866
 
6867
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "unitsPerMeter", function() { return _web_mercator_utils__WEBPACK_IMPORTED_MODULE_5__["unitsPerMeter"]; });
6868
+
6870
6869
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getDistanceScales", function() { return _web_mercator_utils__WEBPACK_IMPORTED_MODULE_5__["getDistanceScales"]; });
6871
6870
 
6872
6871
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addMetersToLngLat", function() { return _web_mercator_utils__WEBPACK_IMPORTED_MODULE_5__["addMetersToLngLat"]; });
@@ -7007,7 +7006,7 @@ function normalizeViewportProps(props) {
7007
7006
  /*!*****************************************************************************************************!*\
7008
7007
  !*** /Users/missx/Source/deck.gl/node_modules/@math.gl/web-mercator/dist/esm/web-mercator-utils.js ***!
7009
7008
  \*****************************************************************************************************/
7010
- /*! exports provided: MAX_LATITUDE, DEFAULT_ALTITUDE, zoomToScale, scaleToZoom, lngLatToWorld, worldToLngLat, getMeterZoom, getDistanceScales, addMetersToLngLat, getViewMatrix, getProjectionParameters, getProjectionMatrix, altitudeToFovy, fovyToAltitude, worldToPixels, pixelsToWorld */
7009
+ /*! exports provided: MAX_LATITUDE, DEFAULT_ALTITUDE, zoomToScale, scaleToZoom, lngLatToWorld, worldToLngLat, getMeterZoom, unitsPerMeter, getDistanceScales, addMetersToLngLat, getViewMatrix, getProjectionParameters, getProjectionMatrix, altitudeToFovy, fovyToAltitude, worldToPixels, pixelsToWorld */
7011
7010
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
7012
7011
 
7013
7012
  "use strict";
@@ -7019,6 +7018,7 @@ __webpack_require__.r(__webpack_exports__);
7019
7018
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lngLatToWorld", function() { return lngLatToWorld; });
7020
7019
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "worldToLngLat", function() { return worldToLngLat; });
7021
7020
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getMeterZoom", function() { return getMeterZoom; });
7021
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unitsPerMeter", function() { return unitsPerMeter; });
7022
7022
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDistanceScales", function() { return getDistanceScales; });
7023
7023
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addMetersToLngLat", function() { return addMetersToLngLat; });
7024
7024
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getViewMatrix", function() { return getViewMatrix; });
@@ -7076,6 +7076,10 @@ function getMeterZoom(options) {
7076
7076
  const latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);
7077
7077
  return scaleToZoom(EARTH_CIRCUMFERENCE * latCosine) - 9;
7078
7078
  }
7079
+ function unitsPerMeter(latitude) {
7080
+ const latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);
7081
+ return TILE_SIZE / EARTH_CIRCUMFERENCE / latCosine;
7082
+ }
7079
7083
  function getDistanceScales(options) {
7080
7084
  const {
7081
7085
  latitude,
@@ -7152,6 +7156,9 @@ function getProjectionParameters(options) {
7152
7156
  height,
7153
7157
  altitude,
7154
7158
  pitch = 0,
7159
+ offset,
7160
+ center,
7161
+ scale,
7155
7162
  nearZMultiplier = 1,
7156
7163
  farZMultiplier = 1
7157
7164
  } = options;
@@ -7163,17 +7170,26 @@ function getProjectionParameters(options) {
7163
7170
  fovy = altitudeToFovy(altitude);
7164
7171
  }
7165
7172
 
7166
- const halfFov = 0.5 * fovy * DEGREES_TO_RADIANS;
7167
- const focalDistance = fovyToAltitude(fovy);
7173
+ const fovRadians = fovy * DEGREES_TO_RADIANS;
7168
7174
  const pitchRadians = pitch * DEGREES_TO_RADIANS;
7169
- const topHalfSurfaceDistance = Math.sin(halfFov) * focalDistance / Math.sin(Math.min(Math.max(Math.PI / 2 - pitchRadians - halfFov, 0.01), Math.PI - 0.01));
7170
- const farZ = Math.sin(pitchRadians) * topHalfSurfaceDistance + focalDistance;
7175
+ const focalDistance = fovyToAltitude(fovy);
7176
+ let cameraToSeaLevelDistance = focalDistance;
7177
+
7178
+ if (center) {
7179
+ cameraToSeaLevelDistance += center[2] * scale / Math.cos(pitchRadians) / height;
7180
+ }
7181
+
7182
+ const fovAboveCenter = fovRadians * (0.5 + (offset ? offset[1] : 0) / height);
7183
+ const topHalfSurfaceDistance = Math.sin(fovAboveCenter) * cameraToSeaLevelDistance / Math.sin(Object(_math_utils__WEBPACK_IMPORTED_MODULE_0__["clamp"])(Math.PI / 2 - pitchRadians - fovAboveCenter, 0.01, Math.PI - 0.01));
7184
+ const furthestDistance = Math.sin(pitchRadians) * topHalfSurfaceDistance + cameraToSeaLevelDistance;
7185
+ const horizonDistance = cameraToSeaLevelDistance * 10;
7186
+ const farZ = Math.min(furthestDistance * farZMultiplier, horizonDistance);
7171
7187
  return {
7172
- fov: 2 * halfFov,
7188
+ fov: fovRadians,
7173
7189
  aspect: width / height,
7174
7190
  focalDistance,
7175
7191
  near: nearZMultiplier,
7176
- far: farZ * farZMultiplier
7192
+ far: farZ
7177
7193
  };
7178
7194
  }
7179
7195
  function getProjectionMatrix(options) {
@@ -7377,6 +7393,8 @@ class WebMercatorViewport {
7377
7393
  this.projectionMatrix = Object(_web_mercator_utils__WEBPACK_IMPORTED_MODULE_2__["getProjectionMatrix"])({
7378
7394
  width,
7379
7395
  height,
7396
+ scale,
7397
+ center,
7380
7398
  pitch,
7381
7399
  fovy,
7382
7400
  nearZMultiplier,
@@ -46658,7 +46676,7 @@ __webpack_require__.r(__webpack_exports__);
46658
46676
  /*!******************************!*\
46659
46677
  !*** ./src/api/layer-map.ts ***!
46660
46678
  \******************************/
46661
- /*! exports provided: AGGREGATION, OPACITY_MAP, getLayer, opacityToAlpha, getColorValueAccessor, getColorAccessor, getSizeAccessor, getTextAccessor, getTextPixelOffsetAccessor, _domainFromValues */
46679
+ /*! exports provided: AGGREGATION, OPACITY_MAP, getLayer, layerFromTileDataset, opacityToAlpha, getColorValueAccessor, getColorAccessor, getSizeAccessor, getTextAccessor, getTextPixelOffsetAccessor, _domainFromValues */
46662
46680
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
46663
46681
 
46664
46682
  "use strict";
@@ -46666,6 +46684,7 @@ __webpack_require__.r(__webpack_exports__);
46666
46684
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AGGREGATION", function() { return AGGREGATION; });
46667
46685
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OPACITY_MAP", function() { return OPACITY_MAP; });
46668
46686
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLayer", function() { return getLayer; });
46687
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "layerFromTileDataset", function() { return layerFromTileDataset; });
46669
46688
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "opacityToAlpha", function() { return opacityToAlpha; });
46670
46689
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getColorValueAccessor", function() { return getColorValueAccessor; });
46671
46690
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getColorAccessor", function() { return getColorAccessor; });
@@ -46682,8 +46701,12 @@ __webpack_require__.r(__webpack_exports__);
46682
46701
  /* harmony import */ var _deck_gl_aggregation_layers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @deck.gl/aggregation-layers */ "@deck.gl/core");
46683
46702
  /* harmony import */ var _deck_gl_aggregation_layers__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_deck_gl_aggregation_layers__WEBPACK_IMPORTED_MODULE_5__);
46684
46703
  /* harmony import */ var _layers_carto_tile_layer__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../layers/carto-tile-layer */ "./src/layers/carto-tile-layer.ts");
46685
- /* harmony import */ var _maps_api_common__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./maps-api-common */ "./src/api/maps-api-common.ts");
46686
- /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
46704
+ /* harmony import */ var _layers_h3_tile_layer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../layers/h3-tile-layer */ "./src/layers/h3-tile-layer.ts");
46705
+ /* harmony import */ var _layers_quadbin_tile_layer__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../layers/quadbin-tile-layer */ "./src/layers/quadbin-tile-layer.ts");
46706
+ /* harmony import */ var _maps_api_common__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./maps-api-common */ "./src/api/maps-api-common.ts");
46707
+ /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
46708
+
46709
+
46687
46710
 
46688
46711
 
46689
46712
 
@@ -46787,7 +46810,7 @@ function mergePropMaps(a = {}, b = {}) {
46787
46810
  }
46788
46811
 
46789
46812
  function getLayer(type, config, dataset) {
46790
- if (type === 'mvt' || type === 'tileset') {
46813
+ if (type === 'mvt' || type === 'tileset' || type === 'h3' || type === 'quadbin') {
46791
46814
  return getTileLayer(dataset);
46792
46815
  }
46793
46816
 
@@ -46859,7 +46882,7 @@ function getLayer(type, config, dataset) {
46859
46882
  }
46860
46883
  };
46861
46884
  const layer = layerTypeDefs[type];
46862
- Object(_utils__WEBPACK_IMPORTED_MODULE_8__["assert"])(layer, `Unsupported layer type: ${type}`);
46885
+ Object(_utils__WEBPACK_IMPORTED_MODULE_10__["assert"])(layer, `Unsupported layer type: ${type}`);
46863
46886
  return { ...layer,
46864
46887
  propMap: mergePropMaps(sharedPropMap, layer.propMap),
46865
46888
  defaultProps: { ...defaultProps,
@@ -46867,31 +46890,60 @@ function getLayer(type, config, dataset) {
46867
46890
  }
46868
46891
  };
46869
46892
  }
46893
+ function layerFromTileDataset(formatTiles = _maps_api_common__WEBPACK_IMPORTED_MODULE_9__["TILE_FORMATS"].MVT, scheme) {
46894
+ if (scheme === 'h3') {
46895
+ return _layers_h3_tile_layer__WEBPACK_IMPORTED_MODULE_7__["default"];
46896
+ }
46897
+
46898
+ if (scheme === 'quadbin') {
46899
+ return _layers_quadbin_tile_layer__WEBPACK_IMPORTED_MODULE_8__["default"];
46900
+ }
46901
+
46902
+ if (formatTiles === _maps_api_common__WEBPACK_IMPORTED_MODULE_9__["TILE_FORMATS"].MVT) {
46903
+ return _deck_gl_aggregation_layers__WEBPACK_IMPORTED_MODULE_5__["MVTLayer"];
46904
+ } // formatTiles === BINARY|JSON|GEOJSON
46905
+
46906
+
46907
+ return _layers_carto_tile_layer__WEBPACK_IMPORTED_MODULE_6__["default"];
46908
+ }
46870
46909
 
46871
46910
  function getTileLayer(dataset) {
46872
46911
  const {
46912
+ aggregationExp,
46913
+ aggregationResLevel,
46873
46914
  data: {
46915
+ scheme,
46874
46916
  tiles: [tileUrl]
46875
46917
  }
46876
46918
  } = dataset;
46877
46919
  /* global URL */
46878
46920
 
46879
- const formatTiles = new URL(tileUrl).searchParams.get('formatTiles') || _maps_api_common__WEBPACK_IMPORTED_MODULE_7__["TILE_FORMATS"].MVT;
46921
+ const formatTiles = new URL(tileUrl).searchParams.get('formatTiles');
46880
46922
  return {
46881
- Layer: formatTiles === _maps_api_common__WEBPACK_IMPORTED_MODULE_7__["TILE_FORMATS"].MVT ? _deck_gl_aggregation_layers__WEBPACK_IMPORTED_MODULE_5__["MVTLayer"] : _layers_carto_tile_layer__WEBPACK_IMPORTED_MODULE_6__["default"],
46923
+ Layer: layerFromTileDataset(formatTiles, scheme),
46882
46924
  propMap: sharedPropMap,
46883
46925
  defaultProps: { ...defaultProps,
46884
- uniqueIdProperty: 'geoid',
46885
- formatTiles
46926
+ ...(aggregationExp && {
46927
+ aggregationExp
46928
+ }),
46929
+ ...(aggregationResLevel && {
46930
+ aggregationResLevel
46931
+ }),
46932
+ formatTiles,
46933
+ uniqueIdProperty: 'geoid'
46886
46934
  }
46887
46935
  };
46888
46936
  }
46889
46937
 
46890
- function domainFromAttribute(attribute, scaleType) {
46938
+ function domainFromAttribute(attribute, scaleType, scaleLength) {
46891
46939
  if (scaleType === 'ordinal' || scaleType === 'point') {
46892
46940
  return attribute.categories.map(c => c.category).filter(c => c !== undefined && c !== null);
46893
46941
  }
46894
46942
 
46943
+ if (scaleType === 'quantile' && attribute.quantiles) {
46944
+ return attribute.quantiles[scaleLength];
46945
+ }
46946
+
46895
46947
  let {
46896
46948
  min
46897
46949
  } = attribute;
@@ -46916,14 +46968,14 @@ function domainFromValues(values, scaleType) {
46916
46968
  return Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["extent"])(values);
46917
46969
  }
46918
46970
 
46919
- function calculateDomain(data, name, scaleType) {
46971
+ function calculateDomain(data, name, scaleType, scaleLength) {
46920
46972
  if (data.tilestats) {
46921
46973
  // Tileset data type
46922
46974
  const {
46923
46975
  attributes
46924
46976
  } = data.tilestats.layers[0];
46925
46977
  const attribute = attributes.find(a => a.attribute === name);
46926
- return domainFromAttribute(attribute, scaleType);
46978
+ return domainFromAttribute(attribute, scaleType, scaleLength);
46927
46979
  } else if (data.features) {
46928
46980
  // GeoJSON data type
46929
46981
  const values = data.features.map(({
@@ -46954,6 +47006,28 @@ function normalizeAccessor(accessor, data) {
46954
47006
  function opacityToAlpha(opacity) {
46955
47007
  return opacity !== undefined ? Math.round(255 * Math.pow(opacity, 1 / 2.2)) : 255;
46956
47008
  }
47009
+
47010
+ function getAccessorKeys(name, aggregation) {
47011
+ let keys = [name];
47012
+
47013
+ if (aggregation) {
47014
+ // Snowflake will capitalized the keys, need to check lower and upper case version
47015
+ keys = keys.concat([aggregation, aggregation.toUpperCase()].map(a => `${name}_${a}`));
47016
+ }
47017
+
47018
+ return keys;
47019
+ }
47020
+
47021
+ function findAccessorKey(keys, properties) {
47022
+ for (const key of keys) {
47023
+ if (key in properties) {
47024
+ return [key];
47025
+ }
47026
+ }
47027
+
47028
+ throw new Error(`Could not find property for any accessor key: ${keys}`);
47029
+ }
47030
+
46957
47031
  function getColorValueAccessor({
46958
47032
  name
46959
47033
  }, colorAggregation, data) {
@@ -46966,8 +47040,11 @@ function getColorValueAccessor({
46966
47040
  function getColorAccessor({
46967
47041
  name
46968
47042
  }, scaleType, {
46969
- colors,
46970
- colorMap
47043
+ aggregation,
47044
+ range: {
47045
+ colors,
47046
+ colorMap
47047
+ }
46971
47048
  }, opacity, data) {
46972
47049
  const scale = SCALE_FUNCS[scaleType]();
46973
47050
  let domain = [];
@@ -46979,7 +47056,7 @@ function getColorAccessor({
46979
47056
  scaleColor.push(color);
46980
47057
  });
46981
47058
  } else {
46982
- domain = calculateDomain(data, name, scaleType);
47059
+ domain = calculateDomain(data, name, scaleType, colors.length);
46983
47060
  scaleColor = colors;
46984
47061
  }
46985
47062
 
@@ -46991,9 +47068,14 @@ function getColorAccessor({
46991
47068
  scale.range(scaleColor);
46992
47069
  scale.unknown(UNKNOWN_COLOR);
46993
47070
  const alpha = opacityToAlpha(opacity);
47071
+ let accessorKeys = getAccessorKeys(name, aggregation);
46994
47072
 
46995
47073
  const accessor = properties => {
46996
- const propertyValue = properties[name];
47074
+ if (!(accessorKeys[0] in properties)) {
47075
+ accessorKeys = findAccessorKey(accessorKeys, properties);
47076
+ }
47077
+
47078
+ const propertyValue = properties[accessorKeys[0]];
46997
47079
  const {
46998
47080
  r,
46999
47081
  g,
@@ -47006,13 +47088,19 @@ function getColorAccessor({
47006
47088
  }
47007
47089
  function getSizeAccessor({
47008
47090
  name
47009
- }, scaleType, range, data) {
47091
+ }, scaleType, aggregation, range, data) {
47010
47092
  const scale = SCALE_FUNCS[scaleType]();
47011
47093
  scale.domain(calculateDomain(data, name, scaleType));
47012
47094
  scale.range(range);
47095
+ let accessorKeys = getAccessorKeys(name, aggregation);
47013
47096
 
47014
47097
  const accessor = properties => {
47015
- return scale(properties[name]);
47098
+ if (!(accessorKeys[0] in properties)) {
47099
+ accessorKeys = findAccessorKey(accessorKeys, properties);
47100
+ }
47101
+
47102
+ const propertyValue = properties[accessorKeys[0]];
47103
+ return scale(propertyValue);
47016
47104
  };
47017
47105
 
47018
47106
  return normalizeAccessor(accessor, data);
@@ -47481,6 +47569,9 @@ function getParameters({
47481
47569
 
47482
47570
  if (aggregationExp) {
47483
47571
  parameters.push(Object(_maps_api_common__WEBPACK_IMPORTED_MODULE_1__["encodeParameter"])('aggregationExp', aggregationExp));
47572
+ } else if (isSpatialIndexGeoColumn(geoColumn)) {
47573
+ // Default aggregationExp required for spatial index layers
47574
+ parameters.push(Object(_maps_api_common__WEBPACK_IMPORTED_MODULE_1__["encodeParameter"])('aggregationExp', '1 AS value'));
47484
47575
  }
47485
47576
 
47486
47577
  if (aggregationResLevel) {
@@ -47490,6 +47581,11 @@ function getParameters({
47490
47581
  return parameters.join('&');
47491
47582
  }
47492
47583
 
47584
+ function isSpatialIndexGeoColumn(geoColumn) {
47585
+ const spatialIndex = geoColumn?.split(':')[0];
47586
+ return spatialIndex === 'h3' || spatialIndex === 'quadbin';
47587
+ }
47588
+
47493
47589
  async function mapInstantiation({
47494
47590
  type,
47495
47591
  source,
@@ -47508,8 +47604,8 @@ async function mapInstantiation({
47508
47604
  geoColumn,
47509
47605
  columns,
47510
47606
  clientId,
47511
- aggregationExp,
47512
- aggregationResLevel
47607
+ aggregationResLevel,
47608
+ aggregationExp
47513
47609
  })}`;
47514
47610
  const {
47515
47611
  accessToken
@@ -47712,6 +47808,8 @@ async function _fetchDataUrl({
47712
47808
 
47713
47809
  async function _fetchMapDataset(dataset, accessToken, credentials, clientId) {
47714
47810
  const {
47811
+ aggregationExp,
47812
+ aggregationResLevel,
47715
47813
  connectionName: connection,
47716
47814
  columns,
47717
47815
  format,
@@ -47724,6 +47822,8 @@ async function _fetchMapDataset(dataset, accessToken, credentials, clientId) {
47724
47822
  url,
47725
47823
  mapFormat
47726
47824
  } = await _fetchDataUrl({
47825
+ aggregationExp,
47826
+ aggregationResLevel,
47727
47827
  clientId,
47728
47828
  credentials: { ...credentials,
47729
47829
  accessToken
@@ -47752,6 +47852,36 @@ async function _fetchMapDataset(dataset, accessToken, credentials, clientId) {
47752
47852
  return true;
47753
47853
  }
47754
47854
 
47855
+ async function _fetchTilestats(attribute, dataset, accessToken, credentials) {
47856
+ const {
47857
+ connectionName: connection,
47858
+ source,
47859
+ type
47860
+ } = dataset;
47861
+ const statsUrl = Object(_config__WEBPACK_IMPORTED_MODULE_0__["buildStatsUrlFromBase"])(credentials.apiBaseUrl);
47862
+ let url = `${statsUrl}/${connection}/`;
47863
+
47864
+ if (type === _maps_api_common__WEBPACK_IMPORTED_MODULE_1__["MAP_TYPES"].QUERY) {
47865
+ url += `${attribute}?q=${source}`;
47866
+ } else {
47867
+ // MAP_TYPE.TABLE
47868
+ url += `${source}/${attribute}`;
47869
+ }
47870
+
47871
+ const stats = await requestData({
47872
+ url,
47873
+ format: _maps_api_common__WEBPACK_IMPORTED_MODULE_1__["FORMATS"].JSON,
47874
+ accessToken
47875
+ }); // Replace tilestats for attribute with value from API
47876
+
47877
+ const {
47878
+ attributes
47879
+ } = dataset.data.tilestats.layers[0];
47880
+ const index = attributes.findIndex(d => d.attribute === attribute);
47881
+ attributes[index] = stats;
47882
+ return true;
47883
+ }
47884
+
47755
47885
  async function fillInMapDatasets({
47756
47886
  datasets,
47757
47887
  token
@@ -47760,6 +47890,53 @@ async function fillInMapDatasets({
47760
47890
  return await Promise.all(promises);
47761
47891
  }
47762
47892
 
47893
+ async function fillInTileStats({
47894
+ datasets,
47895
+ keplerMapConfig,
47896
+ token
47897
+ }, credentials) {
47898
+ const attributes = [];
47899
+ const {
47900
+ layers
47901
+ } = keplerMapConfig.config.visState;
47902
+
47903
+ for (const layer of layers) {
47904
+ for (const channel of Object.keys(layer.visualChannels)) {
47905
+ const attribute = layer.visualChannels[channel]?.name;
47906
+
47907
+ if (attribute) {
47908
+ const dataset = datasets.find(d => d.id === layer.config.dataId);
47909
+
47910
+ if (dataset.data.tilestats && dataset.type !== _maps_api_common__WEBPACK_IMPORTED_MODULE_1__["MAP_TYPES"].TILESET) {
47911
+ // Only fetch stats for QUERY & TABLE map types
47912
+ attributes.push({
47913
+ attribute,
47914
+ dataset
47915
+ });
47916
+ }
47917
+ }
47918
+ }
47919
+ } // Remove duplicates to avoid repeated requests
47920
+
47921
+
47922
+ const filteredAttributes = [];
47923
+
47924
+ for (const a of attributes) {
47925
+ if (!filteredAttributes.find(({
47926
+ attribute,
47927
+ dataset
47928
+ }) => attribute === a.attribute && dataset === a.dataset)) {
47929
+ filteredAttributes.push(a);
47930
+ }
47931
+ }
47932
+
47933
+ const promises = filteredAttributes.map(({
47934
+ attribute,
47935
+ dataset
47936
+ }) => _fetchTilestats(attribute, dataset, token, credentials));
47937
+ return await Promise.all(promises);
47938
+ }
47939
+
47763
47940
  async function fetchMap({
47764
47941
  cartoMapId,
47765
47942
  clientId,
@@ -47824,7 +48001,9 @@ async function fetchMap({
47824
48001
  }
47825
48002
  }); // Mutates map.datasets so that dataset.data contains data
47826
48003
 
47827
- await fillInMapDatasets(map, clientId, localCreds);
48004
+ await fillInMapDatasets(map, clientId, localCreds); // Mutates attributes in visualChannels to contain tile stats
48005
+
48006
+ await fillInTileStats(map, localCreds);
47828
48007
  return { ...Object(_parseMap__WEBPACK_IMPORTED_MODULE_2__["parseMap"])(map),
47829
48008
  ...{
47830
48009
  stopAutoRefresh
@@ -48064,21 +48243,35 @@ function createChannelProps(visualChannels, type, config, data) {
48064
48243
  }
48065
48244
  }
48066
48245
  } else if (colorField) {
48067
- result.getFillColor = Object(_layer_map__WEBPACK_IMPORTED_MODULE_1__["getColorAccessor"])(colorField, colorScale, visConfig.colorRange, visConfig.opacity, data);
48246
+ const {
48247
+ colorAggregation: aggregation,
48248
+ colorRange: range
48249
+ } = visConfig;
48250
+ result.getFillColor = Object(_layer_map__WEBPACK_IMPORTED_MODULE_1__["getColorAccessor"])(colorField, colorScale, {
48251
+ aggregation,
48252
+ range
48253
+ }, visConfig.opacity, data);
48068
48254
  }
48069
48255
 
48070
48256
  if (strokeColorField) {
48071
48257
  const fallbackOpacity = type === 'point' ? visConfig.opacity : 1;
48072
48258
  const opacity = visConfig.strokeOpacity !== undefined ? visConfig.strokeOpacity : fallbackOpacity;
48073
- result.getLineColor = Object(_layer_map__WEBPACK_IMPORTED_MODULE_1__["getColorAccessor"])(strokeColorField, strokeColorScale, visConfig.strokeColorRange, opacity, data);
48259
+ const {
48260
+ strokeColorAggregation: aggregation,
48261
+ strokeColorRange: range
48262
+ } = visConfig;
48263
+ result.getLineColor = Object(_layer_map__WEBPACK_IMPORTED_MODULE_1__["getColorAccessor"])(strokeColorField, strokeColorScale, {
48264
+ aggregation,
48265
+ range
48266
+ }, opacity, data);
48074
48267
  }
48075
48268
 
48076
48269
  if (heightField) {
48077
- result.getElevation = Object(_layer_map__WEBPACK_IMPORTED_MODULE_1__["getSizeAccessor"])(heightField, heightScale, visConfig.heightRange || visConfig.sizeRange, data);
48270
+ result.getElevation = Object(_layer_map__WEBPACK_IMPORTED_MODULE_1__["getSizeAccessor"])(heightField, heightScale, visConfig.heightAggregation, visConfig.heightRange || visConfig.sizeRange, data);
48078
48271
  }
48079
48272
 
48080
48273
  if (sizeField) {
48081
- result.getPointRadius = Object(_layer_map__WEBPACK_IMPORTED_MODULE_1__["getSizeAccessor"])(sizeField, sizeScale, visConfig.radiusRange || visConfig.sizeRange, data);
48274
+ result.getPointRadius = Object(_layer_map__WEBPACK_IMPORTED_MODULE_1__["getSizeAccessor"])(sizeField, sizeScale, visConfig.sizeAggregation, visConfig.radiusRange || visConfig.sizeRange, data);
48082
48275
  }
48083
48276
 
48084
48277
  if (textLabelField) {
@@ -48118,7 +48311,7 @@ const baseUrl = 'https://basemaps.cartocdn.com/gl/{basemap}-gl-style/style.json'
48118
48311
  /*!***********************!*\
48119
48312
  !*** ./src/config.ts ***!
48120
48313
  \***********************/
48121
- /*! exports provided: defaultClassicCredentials, defaultCloudNativeCredentials, setDefaultCredentials, getDefaultCredentials, buildMapsUrlFromBase */
48314
+ /*! exports provided: defaultClassicCredentials, defaultCloudNativeCredentials, setDefaultCredentials, getDefaultCredentials, buildMapsUrlFromBase, buildStatsUrlFromBase */
48122
48315
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
48123
48316
 
48124
48317
  "use strict";
@@ -48128,6 +48321,7 @@ __webpack_require__.r(__webpack_exports__);
48128
48321
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setDefaultCredentials", function() { return setDefaultCredentials; });
48129
48322
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDefaultCredentials", function() { return getDefaultCredentials; });
48130
48323
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildMapsUrlFromBase", function() { return buildMapsUrlFromBase; });
48324
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildStatsUrlFromBase", function() { return buildStatsUrlFromBase; });
48131
48325
  /* harmony import */ var _api_maps_api_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./api/maps-api-common */ "./src/api/maps-api-common.ts");
48132
48326
 
48133
48327
  const defaultClassicCredentials = {
@@ -48171,8 +48365,9 @@ function setDefaultCredentials({
48171
48365
  function getDefaultCredentials() {
48172
48366
  return credentials;
48173
48367
  }
48174
- function buildMapsUrlFromBase(apiBaseUrl) {
48175
- let suffix = '/v3/maps';
48368
+
48369
+ function buildUrlFromBase(apiBaseUrl, endpoint) {
48370
+ let suffix = `/v3/${endpoint}`;
48176
48371
 
48177
48372
  if (apiBaseUrl.endsWith('/')) {
48178
48373
  suffix = suffix.substring(1);
@@ -48181,6 +48376,13 @@ function buildMapsUrlFromBase(apiBaseUrl) {
48181
48376
  return `${apiBaseUrl}${suffix}`;
48182
48377
  }
48183
48378
 
48379
+ function buildMapsUrlFromBase(apiBaseUrl) {
48380
+ return buildUrlFromBase(apiBaseUrl, 'maps');
48381
+ }
48382
+ function buildStatsUrlFromBase(apiBaseUrl) {
48383
+ return buildUrlFromBase(apiBaseUrl, 'stats');
48384
+ }
48385
+
48184
48386
  /***/ }),
48185
48387
 
48186
48388
  /***/ "./src/index.ts":
@@ -48271,13 +48473,11 @@ __webpack_require__.r(__webpack_exports__);
48271
48473
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return CartoLayer; });
48272
48474
  /* harmony import */ var _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @deck.gl/core */ "@deck.gl/core");
48273
48475
  /* harmony import */ var _deck_gl_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_deck_gl_core__WEBPACK_IMPORTED_MODULE_0__);
48274
- /* harmony import */ var _carto_tile_layer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./carto-tile-layer */ "./src/layers/carto-tile-layer.ts");
48275
- /* harmony import */ var _h3_tile_layer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./h3-tile-layer */ "./src/layers/h3-tile-layer.ts");
48276
- /* harmony import */ var _quadbin_tile_layer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./quadbin-tile-layer */ "./src/layers/quadbin-tile-layer.ts");
48277
- /* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../api */ "./src/api/index.ts");
48278
- /* harmony import */ var _api_maps_api_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../api/maps-api-common */ "./src/api/maps-api-common.ts");
48279
- /* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../config */ "./src/config.ts");
48280
- /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
48476
+ /* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../api */ "./src/api/index.ts");
48477
+ /* harmony import */ var _api_layer_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../api/layer-map */ "./src/api/layer-map.ts");
48478
+ /* harmony import */ var _api_maps_api_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../api/maps-api-common */ "./src/api/maps-api-common.ts");
48479
+ /* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../config */ "./src/config.ts");
48480
+ /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
48281
48481
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
48282
48482
 
48283
48483
 
@@ -48287,8 +48487,6 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
48287
48487
 
48288
48488
 
48289
48489
 
48290
-
48291
-
48292
48490
  const defaultProps = {
48293
48491
  // (String, required): data resource to load. table name, sql query or tileset name.
48294
48492
  data: null,
@@ -48356,29 +48554,29 @@ class CartoLayer extends _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["CompositeLa
48356
48554
  geoColumn,
48357
48555
  columns
48358
48556
  } = props;
48359
- const localCreds = { ...Object(_config__WEBPACK_IMPORTED_MODULE_6__["getDefaultCredentials"])(),
48557
+ const localCreds = { ...Object(_config__WEBPACK_IMPORTED_MODULE_4__["getDefaultCredentials"])(),
48360
48558
  ...credentials
48361
48559
  };
48362
48560
  const {
48363
48561
  apiVersion
48364
48562
  } = localCreds;
48365
- _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(Object.values(_api__WEBPACK_IMPORTED_MODULE_4__["API_VERSIONS"]).includes(apiVersion), `Invalid apiVersion ${apiVersion}. Use API_VERSIONS enum.`);
48563
+ _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(Object.values(_api__WEBPACK_IMPORTED_MODULE_1__["API_VERSIONS"]).includes(apiVersion), `Invalid apiVersion ${apiVersion}. Use API_VERSIONS enum.`);
48366
48564
 
48367
- if (apiVersion === _api__WEBPACK_IMPORTED_MODULE_4__["API_VERSIONS"].V1 || apiVersion === _api__WEBPACK_IMPORTED_MODULE_4__["API_VERSIONS"].V2) {
48368
- _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(type === _api_maps_api_common__WEBPACK_IMPORTED_MODULE_5__["MAP_TYPES"].QUERY || type === _api_maps_api_common__WEBPACK_IMPORTED_MODULE_5__["MAP_TYPES"].TILESET, `Invalid type ${type}. Use type MAP_TYPES.QUERY or MAP_TYPES.TILESET for apiVersion ${apiVersion}`);
48565
+ if (apiVersion === _api__WEBPACK_IMPORTED_MODULE_1__["API_VERSIONS"].V1 || apiVersion === _api__WEBPACK_IMPORTED_MODULE_1__["API_VERSIONS"].V2) {
48566
+ _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(type === _api_maps_api_common__WEBPACK_IMPORTED_MODULE_3__["MAP_TYPES"].QUERY || type === _api_maps_api_common__WEBPACK_IMPORTED_MODULE_3__["MAP_TYPES"].TILESET, `Invalid type ${type}. Use type MAP_TYPES.QUERY or MAP_TYPES.TILESET for apiVersion ${apiVersion}`);
48369
48567
  _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(!connection, `Connection prop is not supported for apiVersion ${apiVersion}`);
48370
48568
  _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(!geoColumn, `geoColumn prop is not supported for apiVersion ${apiVersion}`);
48371
48569
  _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(!columns, `columns prop is not supported for apiVersion ${apiVersion}`);
48372
- } else if (apiVersion === _api__WEBPACK_IMPORTED_MODULE_4__["API_VERSIONS"].V3) {
48570
+ } else if (apiVersion === _api__WEBPACK_IMPORTED_MODULE_1__["API_VERSIONS"].V3) {
48373
48571
  _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(connection, 'Missing mandatory connection parameter');
48374
- _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(Object.values(_api_maps_api_common__WEBPACK_IMPORTED_MODULE_5__["MAP_TYPES"]).includes(type), `Invalid type ${type}. Use MAP_TYPES enum.`);
48572
+ _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(Object.values(_api_maps_api_common__WEBPACK_IMPORTED_MODULE_3__["MAP_TYPES"]).includes(type), `Invalid type ${type}. Use MAP_TYPES enum.`);
48375
48573
 
48376
- if (!_api_maps_api_common__WEBPACK_IMPORTED_MODULE_5__["COLUMNS_SUPPORT"].includes(type)) {
48377
- _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(!columns, `columns prop is only supported for types: ${_api_maps_api_common__WEBPACK_IMPORTED_MODULE_5__["COLUMNS_SUPPORT"].join()}`);
48574
+ if (!_api_maps_api_common__WEBPACK_IMPORTED_MODULE_3__["COLUMNS_SUPPORT"].includes(type)) {
48575
+ _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(!columns, `columns prop is only supported for types: ${_api_maps_api_common__WEBPACK_IMPORTED_MODULE_3__["COLUMNS_SUPPORT"].join()}`);
48378
48576
  }
48379
48577
 
48380
- if (!_api_maps_api_common__WEBPACK_IMPORTED_MODULE_5__["GEO_COLUMN_SUPPORT"].includes(type)) {
48381
- _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(!geoColumn, `geoColumn prop is only supported for types: ${_api_maps_api_common__WEBPACK_IMPORTED_MODULE_5__["GEO_COLUMN_SUPPORT"].join()}`);
48578
+ if (!_api_maps_api_common__WEBPACK_IMPORTED_MODULE_3__["GEO_COLUMN_SUPPORT"].includes(type)) {
48579
+ _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["log"].assert(!geoColumn, `geoColumn prop is only supported for types: ${_api_maps_api_common__WEBPACK_IMPORTED_MODULE_3__["GEO_COLUMN_SUPPORT"].join()}`);
48382
48580
  }
48383
48581
 
48384
48582
  if (columns) {
@@ -48416,7 +48614,7 @@ class CartoLayer extends _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["CompositeLa
48416
48614
  connection,
48417
48615
  ...rest
48418
48616
  } = this.props;
48419
- const localConfig = { ...Object(_config__WEBPACK_IMPORTED_MODULE_6__["getDefaultCredentials"])(),
48617
+ const localConfig = { ...Object(_config__WEBPACK_IMPORTED_MODULE_4__["getDefaultCredentials"])(),
48420
48618
  ...credentials
48421
48619
  };
48422
48620
  const {
@@ -48424,16 +48622,16 @@ class CartoLayer extends _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["CompositeLa
48424
48622
  } = localConfig;
48425
48623
  let result;
48426
48624
 
48427
- if (apiVersion === _api__WEBPACK_IMPORTED_MODULE_4__["API_VERSIONS"].V1 || apiVersion === _api__WEBPACK_IMPORTED_MODULE_4__["API_VERSIONS"].V2) {
48625
+ if (apiVersion === _api__WEBPACK_IMPORTED_MODULE_1__["API_VERSIONS"].V1 || apiVersion === _api__WEBPACK_IMPORTED_MODULE_1__["API_VERSIONS"].V2) {
48428
48626
  result = {
48429
- data: await Object(_api__WEBPACK_IMPORTED_MODULE_4__["getDataV2"])({
48627
+ data: await Object(_api__WEBPACK_IMPORTED_MODULE_1__["getDataV2"])({
48430
48628
  type,
48431
48629
  source,
48432
48630
  credentials: credentials
48433
48631
  })
48434
48632
  };
48435
48633
  } else {
48436
- result = await Object(_api__WEBPACK_IMPORTED_MODULE_4__["fetchLayerData"])({
48634
+ result = await Object(_api__WEBPACK_IMPORTED_MODULE_1__["fetchLayerData"])({
48437
48635
  type,
48438
48636
  source,
48439
48637
  clientId,
@@ -48441,7 +48639,7 @@ class CartoLayer extends _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["CompositeLa
48441
48639
  connection,
48442
48640
  ...rest,
48443
48641
  // CartoLayer only supports tiled output from v8.8, force data format
48444
- format: _api_maps_api_common__WEBPACK_IMPORTED_MODULE_5__["FORMATS"].TILEJSON
48642
+ format: _api_maps_api_common__WEBPACK_IMPORTED_MODULE_3__["FORMATS"].TILEJSON
48445
48643
  });
48446
48644
  }
48447
48645
 
@@ -48462,7 +48660,7 @@ class CartoLayer extends _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["CompositeLa
48462
48660
  }
48463
48661
 
48464
48662
  _getSubLayerAndProps() {
48465
- Object(_utils__WEBPACK_IMPORTED_MODULE_7__["assert"])(this.state);
48663
+ Object(_utils__WEBPACK_IMPORTED_MODULE_5__["assert"])(this.state);
48466
48664
  const {
48467
48665
  data,
48468
48666
  apiVersion
@@ -48481,28 +48679,19 @@ class CartoLayer extends _deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["CompositeLa
48481
48679
  ...propsNoData
48482
48680
  };
48483
48681
 
48484
- if (apiVersion === _api__WEBPACK_IMPORTED_MODULE_4__["API_VERSIONS"].V1 || apiVersion === _api__WEBPACK_IMPORTED_MODULE_4__["API_VERSIONS"].V2) {
48682
+ if (apiVersion === _api__WEBPACK_IMPORTED_MODULE_1__["API_VERSIONS"].V1 || apiVersion === _api__WEBPACK_IMPORTED_MODULE_1__["API_VERSIONS"].V2) {
48485
48683
  return [_deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["MVTLayer"], props];
48486
48684
  }
48487
48685
  /* global URL */
48488
48686
 
48489
48687
 
48490
48688
  const tileUrl = new URL(data.tiles[0]);
48491
- props.formatTiles = props.formatTiles || tileUrl.searchParams.get('formatTiles') || _api_maps_api_common__WEBPACK_IMPORTED_MODULE_5__["TILE_FORMATS"].MVT;
48492
-
48493
- if (data.scheme === 'h3') {
48494
- return [_h3_tile_layer__WEBPACK_IMPORTED_MODULE_2__["default"], props];
48495
- }
48496
-
48497
- if (data.scheme === 'quadbin') {
48498
- return [_quadbin_tile_layer__WEBPACK_IMPORTED_MODULE_3__["default"], props];
48499
- }
48500
-
48501
- return props.formatTiles === _api_maps_api_common__WEBPACK_IMPORTED_MODULE_5__["TILE_FORMATS"].MVT ? [_deck_gl_core__WEBPACK_IMPORTED_MODULE_0__["MVTLayer"], props] : [_carto_tile_layer__WEBPACK_IMPORTED_MODULE_1__["default"], props];
48689
+ props.formatTiles = props.formatTiles || tileUrl.searchParams.get('formatTiles');
48690
+ return [Object(_api_layer_map__WEBPACK_IMPORTED_MODULE_2__["layerFromTileDataset"])(props.formatTiles, data.scheme), props];
48502
48691
  }
48503
48692
 
48504
48693
  renderLayers() {
48505
- Object(_utils__WEBPACK_IMPORTED_MODULE_7__["assert"])(this.state);
48694
+ Object(_utils__WEBPACK_IMPORTED_MODULE_5__["assert"])(this.state);
48506
48695
  const {
48507
48696
  data
48508
48697
  } = this.state;
@@ -49564,6 +49753,15 @@ __webpack_require__.r(__webpack_exports__);
49564
49753
 
49565
49754
 
49566
49755
 
49756
+ /**
49757
+ * Helper function for quickly creating a color bins style based on `d3` `scaleThreshold`.
49758
+ *
49759
+ * Data values of each attribute are rounded down to the nearest value in the domain and are then
49760
+ * styled with the corresponding color.
49761
+ *
49762
+ * @return accessor that maps objects to `Color` values
49763
+ */
49764
+
49567
49765
  function colorBins({
49568
49766
  attr,
49569
49767
  domain,
@@ -49595,6 +49793,15 @@ __webpack_require__.r(__webpack_exports__);
49595
49793
  /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ "./src/style/utils.ts");
49596
49794
 
49597
49795
 
49796
+ /**
49797
+ * Helper function for quickly creating a color category style.
49798
+ *
49799
+ * Data values of each attribute listed in the domain are mapped one to one
49800
+ * with corresponding colors in the range.
49801
+ *
49802
+ * @return accessor that maps objects to `Color` values
49803
+ */
49804
+
49598
49805
  function colorCategories({
49599
49806
  attr,
49600
49807
  domain,
@@ -49634,6 +49841,15 @@ __webpack_require__.r(__webpack_exports__);
49634
49841
 
49635
49842
 
49636
49843
 
49844
+ /**
49845
+ * Helper function for quickly creating a color continuous style.
49846
+ *
49847
+ * Data values of each field are interpolated linearly across values in the domain and
49848
+ * are then styled with a blend of the corresponding color in the range.
49849
+ *
49850
+ * @return accessor that maps objects to `Color` values
49851
+ */
49852
+
49637
49853
  function colorContinuous({
49638
49854
  attr,
49639
49855
  domain,
@@ -49745,7 +49961,7 @@ function getAttrValue(attr, d) {
49745
49961
  return attr(d);
49746
49962
  }
49747
49963
 
49748
- return d.properties[attr];
49964
+ return d?.properties?.[attr];
49749
49965
  }
49750
49966
  function assert(condition, message = '') {
49751
49967
  if (!condition) {