@deck.gl/carto 9.0.16 → 9.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/carto-api-error.d.ts +3 -1
- package/dist/api/carto-api-error.d.ts.map +1 -1
- package/dist/api/carto-api-error.js +2 -1
- package/dist/api/common.d.ts +0 -8
- package/dist/api/common.d.ts.map +1 -1
- package/dist/api/common.js +0 -9
- package/dist/api/request-with-parameters.d.ts +1 -1
- package/dist/api/request-with-parameters.d.ts.map +1 -1
- package/dist/api/request-with-parameters.js +48 -15
- package/dist/api/types.d.ts +5 -5
- package/dist/api/types.d.ts.map +1 -1
- package/dist/cartoRasterTile-worker.js +1 -1
- package/dist/cartoSpatialTile-worker.js +1 -1
- package/dist/cartoVectorTile-worker.js +1 -1
- package/dist/dist.dev.js +494 -560
- package/dist/index.cjs +445 -358
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/layers/heatmap-tile-layer.d.ts +36 -0
- package/dist/layers/heatmap-tile-layer.d.ts.map +1 -0
- package/dist/layers/heatmap-tile-layer.js +165 -0
- package/dist/layers/heatmap.d.ts +5 -0
- package/dist/layers/heatmap.d.ts.map +1 -1
- package/dist/layers/heatmap.js +17 -15
- package/dist/layers/schema/carto-raster-tile-loader.js +1 -1
- package/dist/layers/schema/carto-spatial-tile-loader.js +1 -1
- package/dist/layers/schema/carto-vector-tile-loader.js +1 -1
- package/dist/layers/vector-tile-layer.d.ts +1 -1
- package/dist/layers/vector-tile-layer.d.ts.map +1 -1
- package/dist/layers/vector-tile-layer.js +5 -10
- package/dist/sources/raster-source.d.ts +2 -2
- package/dist/sources/raster-source.d.ts.map +1 -1
- package/dist/sources/raster-source.js +4 -1
- package/dist.min.js +37 -31
- package/package.json +2 -2
- package/src/api/carto-api-error.ts +10 -1
- package/src/api/common.ts +0 -12
- package/src/api/request-with-parameters.ts +55 -19
- package/src/api/types.ts +5 -5
- package/src/index.ts +3 -3
- package/src/layers/heatmap-tile-layer.ts +236 -0
- package/src/layers/heatmap.ts +31 -18
- package/src/layers/vector-tile-layer.ts +4 -14
- package/src/sources/raster-source.ts +10 -5
- package/dist/layers/quadbin-heatmap-tile-layer.d.ts +0 -24
- package/dist/layers/quadbin-heatmap-tile-layer.d.ts.map +0 -1
- package/dist/layers/quadbin-heatmap-tile-layer.js +0 -84
- package/src/layers/quadbin-heatmap-tile-layer.ts +0 -125
package/dist/dist.dev.js
CHANGED
|
@@ -6993,7 +6993,7 @@ var __exports__ = (() => {
|
|
|
6993
6993
|
CARTO_SOURCES: () => CARTO_SOURCES,
|
|
6994
6994
|
CartoAPIError: () => CartoAPIError,
|
|
6995
6995
|
H3TileLayer: () => H3TileLayer,
|
|
6996
|
-
|
|
6996
|
+
HeatmapTileLayer: () => heatmap_tile_layer_default,
|
|
6997
6997
|
QuadbinTileLayer: () => QuadbinTileLayer,
|
|
6998
6998
|
RasterTileLayer: () => RasterTileLayer,
|
|
6999
6999
|
SOURCE_DEFAULTS: () => SOURCE_DEFAULTS,
|
|
@@ -7811,318 +7811,13 @@ var __exports__ = (() => {
|
|
|
7811
7811
|
H3TileLayer.layerName = "H3TileLayer";
|
|
7812
7812
|
H3TileLayer.defaultProps = defaultProps2;
|
|
7813
7813
|
|
|
7814
|
-
// src/layers/
|
|
7815
|
-
var
|
|
7814
|
+
// src/layers/heatmap-tile-layer.ts
|
|
7815
|
+
var import_core8 = __toESM(require_core(), 1);
|
|
7816
7816
|
var import_layers = __toESM(require_layers(), 1);
|
|
7817
|
-
var [LEFT, TOP, RIGHT, BOTTOM] = [0, 1, 2, 3];
|
|
7818
|
-
var EnhancedTextBackgroundLayer = class extends import_layers._TextBackgroundLayer {
|
|
7819
|
-
getShaders() {
|
|
7820
|
-
const shaders = super.getShaders();
|
|
7821
|
-
let vs = shaders.vs;
|
|
7822
|
-
vs = vs.replaceAll("padding.", "_padding.");
|
|
7823
|
-
vs = vs.replace(
|
|
7824
|
-
"void main(void) {",
|
|
7825
|
-
"void main(void) {\n vec4 _padding = padding + instancePixelOffsets.xyxy * vec4(1.0, 1.0, -1.0, -1.0);"
|
|
7826
|
-
);
|
|
7827
|
-
return { ...shaders, vs };
|
|
7828
|
-
}
|
|
7829
|
-
};
|
|
7830
|
-
EnhancedTextBackgroundLayer.layerName = "EnhancedTextBackgroundLayer";
|
|
7831
|
-
var EnhancedTextLayer = class extends import_layers.TextLayer {
|
|
7832
|
-
filterSubLayer({ layer, renderPass }) {
|
|
7833
|
-
const background = layer.id.includes("primary-background");
|
|
7834
|
-
if (renderPass === "collision") {
|
|
7835
|
-
return background;
|
|
7836
|
-
}
|
|
7837
|
-
return !background;
|
|
7838
|
-
}
|
|
7839
|
-
};
|
|
7840
|
-
EnhancedTextLayer.layerName = "EnhancedTextLayer";
|
|
7841
|
-
var defaultProps3 = {
|
|
7842
|
-
...import_layers.TextLayer.defaultProps,
|
|
7843
|
-
getRadius: { type: "accessor", value: 1 },
|
|
7844
|
-
radiusScale: { type: "number", min: 0, value: 1 }
|
|
7845
|
-
};
|
|
7846
|
-
var PointLabelLayer = class extends import_core6.CompositeLayer {
|
|
7847
|
-
calculatePixelOffset(secondary) {
|
|
7848
|
-
const {
|
|
7849
|
-
getTextAnchor: anchor,
|
|
7850
|
-
getAlignmentBaseline: alignment,
|
|
7851
|
-
getRadius,
|
|
7852
|
-
getSecondaryText,
|
|
7853
|
-
radiusScale,
|
|
7854
|
-
secondarySizeScale,
|
|
7855
|
-
sizeScale
|
|
7856
|
-
} = this.props;
|
|
7857
|
-
const xMult = anchor === "middle" ? 0 : anchor === "start" ? 1 : -1;
|
|
7858
|
-
const yMult = alignment === "center" ? 0 : alignment === "bottom" ? 1 : -1;
|
|
7859
|
-
const xPadding = sizeScale / 4;
|
|
7860
|
-
const yPadding = sizeScale * (1 + 1 / 4);
|
|
7861
|
-
const secondaryOffset = 0.6 * (1 - yMult) * sizeScale;
|
|
7862
|
-
let yOffset = secondary ? secondaryOffset : 0;
|
|
7863
|
-
if (anchor === "middle" && alignment === "top" && getSecondaryText) {
|
|
7864
|
-
yOffset -= secondaryOffset;
|
|
7865
|
-
yOffset -= secondarySizeScale;
|
|
7866
|
-
yOffset += sizeScale;
|
|
7867
|
-
}
|
|
7868
|
-
const radiusPadding = 1 + 1 / 4;
|
|
7869
|
-
return typeof getRadius === "function" ? (d, info) => {
|
|
7870
|
-
const r = (info ? getRadius(d, info) : 1) * radiusScale * radiusPadding;
|
|
7871
|
-
return [xMult * (r + xPadding), yMult * (r + yPadding) + yOffset];
|
|
7872
|
-
} : [
|
|
7873
|
-
xMult * (getRadius * radiusScale * radiusPadding + xPadding),
|
|
7874
|
-
yMult * (getRadius * radiusScale * radiusPadding + yPadding) + yOffset
|
|
7875
|
-
];
|
|
7876
|
-
}
|
|
7877
|
-
calculateBackgroundPadding() {
|
|
7878
|
-
const { getTextAnchor: anchor, getAlignmentBaseline: alignment, sizeScale } = this.props;
|
|
7879
|
-
const paddingX = 12 * sizeScale;
|
|
7880
|
-
const paddingY = 3 * sizeScale;
|
|
7881
|
-
const backgroundPadding = [0, 0, 0, 0];
|
|
7882
|
-
if (alignment === "top") {
|
|
7883
|
-
backgroundPadding[TOP] = paddingY;
|
|
7884
|
-
} else if (alignment === "bottom") {
|
|
7885
|
-
backgroundPadding[BOTTOM] = paddingY;
|
|
7886
|
-
} else {
|
|
7887
|
-
backgroundPadding[TOP] = 0.5 * paddingY;
|
|
7888
|
-
backgroundPadding[BOTTOM] = 0.5 * paddingY;
|
|
7889
|
-
}
|
|
7890
|
-
if (anchor === "start") {
|
|
7891
|
-
backgroundPadding[LEFT] = paddingX;
|
|
7892
|
-
} else if (anchor === "end") {
|
|
7893
|
-
backgroundPadding[RIGHT] = paddingX;
|
|
7894
|
-
} else {
|
|
7895
|
-
backgroundPadding[LEFT] = 0.5 * paddingX;
|
|
7896
|
-
backgroundPadding[RIGHT] = 0.5 * paddingX;
|
|
7897
|
-
}
|
|
7898
|
-
return backgroundPadding;
|
|
7899
|
-
}
|
|
7900
|
-
renderTextLayer(id4, { updateTriggers: updateTriggersOverride = {}, ...props }) {
|
|
7901
|
-
const {
|
|
7902
|
-
data,
|
|
7903
|
-
characterSet,
|
|
7904
|
-
fontFamily,
|
|
7905
|
-
fontSettings,
|
|
7906
|
-
fontWeight,
|
|
7907
|
-
outlineColor,
|
|
7908
|
-
outlineWidth,
|
|
7909
|
-
sizeScale,
|
|
7910
|
-
radiusScale,
|
|
7911
|
-
getAlignmentBaseline,
|
|
7912
|
-
getColor,
|
|
7913
|
-
getPosition,
|
|
7914
|
-
getTextAnchor,
|
|
7915
|
-
updateTriggers
|
|
7916
|
-
} = this.props;
|
|
7917
|
-
return new EnhancedTextLayer(
|
|
7918
|
-
this.getSubLayerProps({
|
|
7919
|
-
id: id4,
|
|
7920
|
-
data,
|
|
7921
|
-
characterSet,
|
|
7922
|
-
fontFamily,
|
|
7923
|
-
fontSettings,
|
|
7924
|
-
fontWeight,
|
|
7925
|
-
outlineColor,
|
|
7926
|
-
outlineWidth,
|
|
7927
|
-
sizeScale,
|
|
7928
|
-
getAlignmentBaseline,
|
|
7929
|
-
getColor,
|
|
7930
|
-
getPosition,
|
|
7931
|
-
getTextAnchor,
|
|
7932
|
-
updateTriggers: {
|
|
7933
|
-
...updateTriggers,
|
|
7934
|
-
...updateTriggersOverride,
|
|
7935
|
-
getPixelOffset: [
|
|
7936
|
-
updateTriggers.getRadius,
|
|
7937
|
-
updateTriggers.getTextAnchor,
|
|
7938
|
-
updateTriggers.getAlignmentBaseline,
|
|
7939
|
-
radiusScale,
|
|
7940
|
-
sizeScale
|
|
7941
|
-
]
|
|
7942
|
-
}
|
|
7943
|
-
}),
|
|
7944
|
-
{
|
|
7945
|
-
getSize: 1,
|
|
7946
|
-
_subLayerProps: { background: { type: EnhancedTextBackgroundLayer } }
|
|
7947
|
-
},
|
|
7948
|
-
props
|
|
7949
|
-
);
|
|
7950
|
-
}
|
|
7951
|
-
renderLayers() {
|
|
7952
|
-
const {
|
|
7953
|
-
getText,
|
|
7954
|
-
getSecondaryColor,
|
|
7955
|
-
getSecondaryText,
|
|
7956
|
-
secondaryOutlineColor,
|
|
7957
|
-
secondarySizeScale,
|
|
7958
|
-
updateTriggers
|
|
7959
|
-
} = this.props;
|
|
7960
|
-
const getPixelOffset = this.calculatePixelOffset(false);
|
|
7961
|
-
const backgroundPadding = this.calculateBackgroundPadding();
|
|
7962
|
-
const out = [
|
|
7963
|
-
this.renderTextLayer(`${updateTriggers.getText}-primary`, {
|
|
7964
|
-
backgroundPadding,
|
|
7965
|
-
getText,
|
|
7966
|
-
getPixelOffset,
|
|
7967
|
-
background: true
|
|
7968
|
-
}),
|
|
7969
|
-
Boolean(getSecondaryText) && this.renderTextLayer(`${updateTriggers.getSecondaryText}-secondary`, {
|
|
7970
|
-
getText: getSecondaryText,
|
|
7971
|
-
getPixelOffset: this.calculatePixelOffset(true),
|
|
7972
|
-
getAlignmentBaseline: "top",
|
|
7973
|
-
...getSecondaryColor && { getColor: getSecondaryColor },
|
|
7974
|
-
...secondarySizeScale && { sizeScale: secondarySizeScale },
|
|
7975
|
-
...secondaryOutlineColor && { outlineColor: secondaryOutlineColor }
|
|
7976
|
-
})
|
|
7977
|
-
];
|
|
7978
|
-
return out;
|
|
7979
|
-
}
|
|
7980
|
-
};
|
|
7981
|
-
PointLabelLayer.layerName = "PointLabelLayer";
|
|
7982
|
-
PointLabelLayer.defaultProps = defaultProps3;
|
|
7983
|
-
|
|
7984
|
-
// src/layers/quadbin-tile-layer.ts
|
|
7985
|
-
var import_core7 = __toESM(require_core(), 1);
|
|
7986
|
-
|
|
7987
|
-
// src/layers/quadbin-layer.ts
|
|
7988
|
-
var import_geo_layers4 = __toESM(require_geo_layers(), 1);
|
|
7989
|
-
|
|
7990
|
-
// ../../node_modules/@math.gl/web-mercator/dist/web-mercator-utils.js
|
|
7991
|
-
var PI = Math.PI;
|
|
7992
|
-
var PI_4 = PI / 4;
|
|
7993
|
-
var DEGREES_TO_RADIANS = PI / 180;
|
|
7994
|
-
var RADIANS_TO_DEGREES = 180 / PI;
|
|
7995
|
-
var TILE_SIZE = 512;
|
|
7996
|
-
function worldToLngLat(xy) {
|
|
7997
|
-
const [x, y] = xy;
|
|
7998
|
-
const lambda2 = x / TILE_SIZE * (2 * PI) - PI;
|
|
7999
|
-
const phi2 = 2 * (Math.atan(Math.exp(y / TILE_SIZE * (2 * PI) - PI)) - PI_4);
|
|
8000
|
-
return [lambda2 * RADIANS_TO_DEGREES, phi2 * RADIANS_TO_DEGREES];
|
|
8001
|
-
}
|
|
8002
|
-
|
|
8003
|
-
// ../../node_modules/@math.gl/web-mercator/dist/get-bounds.js
|
|
8004
|
-
var DEGREES_TO_RADIANS2 = Math.PI / 180;
|
|
8005
|
-
|
|
8006
|
-
// src/layers/quadbin-utils.ts
|
|
8007
|
-
var TILE_SIZE2 = 512;
|
|
8008
|
-
function quadbinToOffset(quadbin) {
|
|
8009
|
-
const { x, y, z } = cellToTile(quadbin);
|
|
8010
|
-
const scale = TILE_SIZE2 / (1 << z);
|
|
8011
|
-
return [x * scale, TILE_SIZE2 - y * scale, scale];
|
|
8012
|
-
}
|
|
8013
|
-
function quadbinToWorldBounds(quadbin, coverage) {
|
|
8014
|
-
const [xOffset, yOffset, scale] = quadbinToOffset(quadbin);
|
|
8015
|
-
return [
|
|
8016
|
-
[xOffset, yOffset],
|
|
8017
|
-
[xOffset + coverage * scale, yOffset - coverage * scale]
|
|
8018
|
-
];
|
|
8019
|
-
}
|
|
8020
|
-
function getQuadbinPolygon(quadbin, coverage = 1) {
|
|
8021
|
-
const [topLeft, bottomRight] = quadbinToWorldBounds(quadbin, coverage);
|
|
8022
|
-
const [w, n] = worldToLngLat(topLeft);
|
|
8023
|
-
const [e, s] = worldToLngLat(bottomRight);
|
|
8024
|
-
return [e, n, e, s, w, s, w, n, e, n];
|
|
8025
|
-
}
|
|
8026
|
-
|
|
8027
|
-
// src/layers/quadbin-layer.ts
|
|
8028
|
-
var defaultProps4 = {
|
|
8029
|
-
getQuadbin: { type: "accessor", value: (d) => d.quadbin }
|
|
8030
|
-
};
|
|
8031
|
-
var QuadbinLayer = class extends import_geo_layers4._GeoCellLayer {
|
|
8032
|
-
indexToBounds() {
|
|
8033
|
-
const { data, extruded, getQuadbin } = this.props;
|
|
8034
|
-
const coverage = extruded ? 0.99 : 1;
|
|
8035
|
-
return {
|
|
8036
|
-
data,
|
|
8037
|
-
_normalize: false,
|
|
8038
|
-
positionFormat: "XY",
|
|
8039
|
-
getPolygon: (x, objectInfo) => getQuadbinPolygon(getQuadbin(x, objectInfo), coverage),
|
|
8040
|
-
updateTriggers: { getPolygon: coverage }
|
|
8041
|
-
};
|
|
8042
|
-
}
|
|
8043
|
-
};
|
|
8044
|
-
QuadbinLayer.layerName = "QuadbinLayer";
|
|
8045
|
-
QuadbinLayer.defaultProps = defaultProps4;
|
|
8046
|
-
|
|
8047
|
-
// src/layers/quadbin-tileset-2d.ts
|
|
8048
|
-
var import_geo_layers5 = __toESM(require_geo_layers(), 1);
|
|
8049
|
-
var QuadbinTileset2D = class extends import_geo_layers5._Tileset2D {
|
|
8050
|
-
getTileIndices(opts) {
|
|
8051
|
-
return super.getTileIndices(opts).map(tileToCell).map((q) => ({ q, i: bigIntToHex(q) }));
|
|
8052
|
-
}
|
|
8053
|
-
getTileId({ q, i }) {
|
|
8054
|
-
return i || bigIntToHex(q);
|
|
8055
|
-
}
|
|
8056
|
-
getTileMetadata({ q }) {
|
|
8057
|
-
return super.getTileMetadata(cellToTile(q));
|
|
8058
|
-
}
|
|
8059
|
-
getTileZoom({ q }) {
|
|
8060
|
-
return Number(getResolution2(q));
|
|
8061
|
-
}
|
|
8062
|
-
getParentIndex({ q }) {
|
|
8063
|
-
return { q: cellToParent2(q) };
|
|
8064
|
-
}
|
|
8065
|
-
};
|
|
8066
|
-
|
|
8067
|
-
// src/layers/quadbin-tile-layer.ts
|
|
8068
|
-
var renderSubLayers2 = (props) => {
|
|
8069
|
-
const { data } = props;
|
|
8070
|
-
if (!data || !data.length)
|
|
8071
|
-
return null;
|
|
8072
|
-
const isBigInt = typeof data[0].id === "bigint";
|
|
8073
|
-
return new QuadbinLayer(props, {
|
|
8074
|
-
getQuadbin: isBigInt ? (d) => d.id : (d) => hexToBigInt(d.id)
|
|
8075
|
-
});
|
|
8076
|
-
};
|
|
8077
|
-
var defaultProps5 = {
|
|
8078
|
-
data: TilejsonPropType,
|
|
8079
|
-
tileSize: DEFAULT_TILE_SIZE
|
|
8080
|
-
};
|
|
8081
|
-
var QuadbinTileLayer = class extends import_core7.CompositeLayer {
|
|
8082
|
-
getLoadOptions() {
|
|
8083
|
-
const loadOptions = super.getLoadOptions() || {};
|
|
8084
|
-
const tileJSON = this.props.data;
|
|
8085
|
-
injectAccessToken(loadOptions, tileJSON.accessToken);
|
|
8086
|
-
loadOptions.cartoSpatialTile = { ...loadOptions.cartoSpatialTile, scheme: "quadbin" };
|
|
8087
|
-
return loadOptions;
|
|
8088
|
-
}
|
|
8089
|
-
renderLayers() {
|
|
8090
|
-
const tileJSON = this.props.data;
|
|
8091
|
-
if (!tileJSON)
|
|
8092
|
-
return null;
|
|
8093
|
-
const { tiles: data, maxresolution: maxZoom } = tileJSON;
|
|
8094
|
-
return [
|
|
8095
|
-
new SpatialIndexTileLayer(this.props, {
|
|
8096
|
-
id: `quadbin-tile-layer-${this.props.id}`,
|
|
8097
|
-
data,
|
|
8098
|
-
TilesetClass: QuadbinTileset2D,
|
|
8099
|
-
renderSubLayers: renderSubLayers2,
|
|
8100
|
-
maxZoom,
|
|
8101
|
-
loadOptions: this.getLoadOptions()
|
|
8102
|
-
})
|
|
8103
|
-
];
|
|
8104
|
-
}
|
|
8105
|
-
};
|
|
8106
|
-
QuadbinTileLayer.layerName = "QuadbinTileLayer";
|
|
8107
|
-
QuadbinTileLayer.defaultProps = defaultProps5;
|
|
8108
|
-
|
|
8109
|
-
// src/layers/quadbin-heatmap-tile-layer.ts
|
|
8110
|
-
var import_core9 = __toESM(require_core(), 1);
|
|
8111
|
-
var import_layers2 = __toESM(require_layers(), 1);
|
|
8112
|
-
|
|
8113
|
-
// ../../node_modules/@luma.gl/shadertools/dist/modules/math/random/random.js
|
|
8114
|
-
var fs = `float random(vec3 scale, float seed) {
|
|
8115
|
-
return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);
|
|
8116
|
-
}
|
|
8117
|
-
`;
|
|
8118
|
-
var random = {
|
|
8119
|
-
name: "random",
|
|
8120
|
-
fs
|
|
8121
|
-
};
|
|
8122
7817
|
|
|
8123
7818
|
// src/layers/heatmap.ts
|
|
8124
7819
|
var glsl = (s) => `${s}`;
|
|
8125
|
-
var
|
|
7820
|
+
var fs = glsl`\
|
|
8126
7821
|
uniform heatmapUniforms {
|
|
8127
7822
|
vec2 delta;
|
|
8128
7823
|
float radiusPixels;
|
|
@@ -8133,11 +7828,10 @@ uniform heatmapUniforms {
|
|
|
8133
7828
|
vec3 color4;
|
|
8134
7829
|
vec3 color5;
|
|
8135
7830
|
vec3 color6;
|
|
7831
|
+
float intensity;
|
|
8136
7832
|
float opacity;
|
|
8137
7833
|
} heatmap;
|
|
8138
7834
|
|
|
8139
|
-
// Controls quality of heatmap, larger values increase quality at expense of performance
|
|
8140
|
-
const float SUPPORT = 8.0;
|
|
8141
7835
|
const vec4 STOPS = vec4(0.2, 0.4, 0.6, 0.8);
|
|
8142
7836
|
|
|
8143
7837
|
vec3 colorGradient(float value) {
|
|
@@ -8156,20 +7850,18 @@ vec3 colorGradient(float value) {
|
|
|
8156
7850
|
} else if (value < STOPS.w) {
|
|
8157
7851
|
range = STOPS.zw;
|
|
8158
7852
|
c1 = heatmap.color4; c2 = heatmap.color5;
|
|
8159
|
-
} else
|
|
7853
|
+
} else {
|
|
8160
7854
|
range = vec2(STOPS.w, 1.0);
|
|
8161
7855
|
c1 = heatmap.color5; c2 = heatmap.color6;
|
|
8162
|
-
} else {
|
|
8163
|
-
// Fade out to white
|
|
8164
|
-
range = vec2(1.0, 10.0);
|
|
8165
|
-
c1 = heatmap.color6; c2 = vec3(255.0);
|
|
8166
7856
|
}
|
|
8167
7857
|
|
|
8168
|
-
float f = (value - range.x) / (range.y - range.x);
|
|
7858
|
+
float f = (clamp(value, 0.0, 1.0) - range.x) / (range.y - range.x);
|
|
8169
7859
|
return mix(c1, c2, f) / 255.0;
|
|
8170
7860
|
}
|
|
8171
7861
|
|
|
8172
7862
|
const vec3 SHIFT = vec3(1.0, 256.0, 256.0 * 256.0);
|
|
7863
|
+
const float MAX_VAL = SHIFT.z * 255.0;
|
|
7864
|
+
const float SCALE = MAX_VAL / 8.0;
|
|
8173
7865
|
vec4 pack(float value) {
|
|
8174
7866
|
return vec4(mod(vec3(value, floor(value / SHIFT.yz)), 256.0), 255.0) / 255.0;
|
|
8175
7867
|
}
|
|
@@ -8181,16 +7873,15 @@ vec4 heatmap_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {
|
|
|
8181
7873
|
bool firstPass = (heatmap.delta.y < 0.5);
|
|
8182
7874
|
float accumulator = 0.0;
|
|
8183
7875
|
|
|
8184
|
-
//
|
|
8185
|
-
float
|
|
7876
|
+
// Controls quality of heatmap, larger values increase quality at expense of performance
|
|
7877
|
+
float SUPPORT = clamp(heatmap.radiusPixels / 2.0, 8.0, 32.0);
|
|
8186
7878
|
|
|
8187
7879
|
// Gaussian normalization parameters
|
|
8188
|
-
|
|
8189
|
-
|
|
8190
|
-
|
|
8191
|
-
|
|
7880
|
+
float sigma = SUPPORT / 3.0;
|
|
7881
|
+
float a = -0.5 / (sigma * sigma);
|
|
7882
|
+
float w0 = 0.3989422804014327 / sigma; // 1D normalization
|
|
8192
7883
|
for (float t = -SUPPORT; t <= SUPPORT; t++) {
|
|
8193
|
-
vec2 percent = (t * heatmap.delta
|
|
7884
|
+
vec2 percent = (t * heatmap.delta - 0.5) / SUPPORT;
|
|
8194
7885
|
vec2 delta = percent * heatmap.radiusPixels / texSize;
|
|
8195
7886
|
vec4 offsetColor = texture(source, texCoord + delta);
|
|
8196
7887
|
|
|
@@ -8207,8 +7898,18 @@ vec4 heatmap_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {
|
|
|
8207
7898
|
return pack(accumulator);
|
|
8208
7899
|
}
|
|
8209
7900
|
|
|
7901
|
+
// Undo scaling to obtain normalized density
|
|
7902
|
+
float density = 10.0 * heatmap.intensity * accumulator / SCALE;
|
|
7903
|
+
|
|
7904
|
+
// Domain also in normalized density units
|
|
7905
|
+
vec2 domain = heatmap.colorDomain;
|
|
7906
|
+
|
|
8210
7907
|
// Apply domain
|
|
8211
|
-
float f = (
|
|
7908
|
+
float f = (density - domain[0]) / (domain[1] - domain[0]);
|
|
7909
|
+
|
|
7910
|
+
// sqrt/log scaling??
|
|
7911
|
+
// float f = (log(density) - log(domain[0] + 1.0)) / (log(domain[1] + 1.0) - log(domain[0] + 1.0));
|
|
7912
|
+
// f = sqrt(f);
|
|
8212
7913
|
|
|
8213
7914
|
// Color map
|
|
8214
7915
|
vec4 color = vec4(0.0);
|
|
@@ -8241,6 +7942,7 @@ vec4 heatmap_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {
|
|
|
8241
7942
|
color4: { value: [0, 0, 0] },
|
|
8242
7943
|
color5: { value: [0, 0, 0] },
|
|
8243
7944
|
color6: { value: [0, 0, 0] },
|
|
7945
|
+
intensity: { value: 1, min: 0.1, max: 10 },
|
|
8244
7946
|
opacity: { value: 1, min: 0, max: 1 }
|
|
8245
7947
|
},
|
|
8246
7948
|
uniformTypes: {
|
|
@@ -8253,6 +7955,7 @@ vec4 heatmap_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {
|
|
|
8253
7955
|
color4: "vec3<f32>",
|
|
8254
7956
|
color5: "vec3<f32>",
|
|
8255
7957
|
color6: "vec3<f32>",
|
|
7958
|
+
intensity: "f32",
|
|
8256
7959
|
opacity: "f32"
|
|
8257
7960
|
},
|
|
8258
7961
|
getUniforms: (opts) => {
|
|
@@ -8261,6 +7964,7 @@ vec4 heatmap_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {
|
|
|
8261
7964
|
colorRange = defaultColorRange,
|
|
8262
7965
|
radiusPixels = 20,
|
|
8263
7966
|
colorDomain = [0, 1],
|
|
7967
|
+
intensity = 1,
|
|
8264
7968
|
opacity = 1
|
|
8265
7969
|
} = opts;
|
|
8266
7970
|
const [color1, color2, color3, color4, color5, color6] = colorRange;
|
|
@@ -8274,11 +7978,11 @@ vec4 heatmap_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {
|
|
|
8274
7978
|
color6,
|
|
8275
7979
|
radiusPixels,
|
|
8276
7980
|
colorDomain,
|
|
7981
|
+
intensity,
|
|
8277
7982
|
opacity
|
|
8278
7983
|
};
|
|
8279
7984
|
},
|
|
8280
|
-
|
|
8281
|
-
fs: fs2,
|
|
7985
|
+
fs,
|
|
8282
7986
|
passes: [
|
|
8283
7987
|
{ sampler: true, uniforms: { delta: [1, 0] } },
|
|
8284
7988
|
{ sampler: true, uniforms: { delta: [0, 1] } }
|
|
@@ -8286,7 +7990,7 @@ vec4 heatmap_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {
|
|
|
8286
7990
|
};
|
|
8287
7991
|
|
|
8288
7992
|
// src/layers/post-process-utils.ts
|
|
8289
|
-
var
|
|
7993
|
+
var import_core6 = __toESM(require_core(), 1);
|
|
8290
7994
|
var TEXTURE_PROPS = {
|
|
8291
7995
|
format: "rgba8unorm",
|
|
8292
7996
|
mipmaps: false,
|
|
@@ -8303,7 +8007,7 @@ vec4 heatmap_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {
|
|
|
8303
8007
|
}
|
|
8304
8008
|
return layer;
|
|
8305
8009
|
}
|
|
8306
|
-
var DrawCallbackLayer = class extends
|
|
8010
|
+
var DrawCallbackLayer = class extends import_core6.Layer {
|
|
8307
8011
|
initializeState() {
|
|
8308
8012
|
this.id = `draw-callback-${getPostProcessLayer(this).props.id}`;
|
|
8309
8013
|
}
|
|
@@ -8335,7 +8039,7 @@ vec4 heatmap_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {
|
|
|
8335
8039
|
initializeState(context) {
|
|
8336
8040
|
super.initializeState(context);
|
|
8337
8041
|
this._createTextures();
|
|
8338
|
-
this.internalState.postProcess = new
|
|
8042
|
+
this.internalState.postProcess = new import_core6.PostProcessEffect(effect, this.props);
|
|
8339
8043
|
this.internalState.postProcess.setup(context);
|
|
8340
8044
|
}
|
|
8341
8045
|
updateState(params) {
|
|
@@ -8399,48 +8103,213 @@ vec4 heatmap_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {
|
|
|
8399
8103
|
}, _a.layerName = `PostProcess${BaseLayer.layerName}`, _a;
|
|
8400
8104
|
}
|
|
8401
8105
|
|
|
8402
|
-
// src/layers/quadbin-
|
|
8403
|
-
var
|
|
8106
|
+
// src/layers/quadbin-tile-layer.ts
|
|
8107
|
+
var import_core7 = __toESM(require_core(), 1);
|
|
8108
|
+
|
|
8109
|
+
// src/layers/quadbin-layer.ts
|
|
8110
|
+
var import_geo_layers4 = __toESM(require_geo_layers(), 1);
|
|
8111
|
+
|
|
8112
|
+
// ../../node_modules/@math.gl/web-mercator/dist/web-mercator-utils.js
|
|
8113
|
+
var PI = Math.PI;
|
|
8114
|
+
var PI_4 = PI / 4;
|
|
8115
|
+
var DEGREES_TO_RADIANS = PI / 180;
|
|
8116
|
+
var RADIANS_TO_DEGREES = 180 / PI;
|
|
8117
|
+
var TILE_SIZE = 512;
|
|
8118
|
+
function worldToLngLat(xy) {
|
|
8119
|
+
const [x, y] = xy;
|
|
8120
|
+
const lambda2 = x / TILE_SIZE * (2 * PI) - PI;
|
|
8121
|
+
const phi2 = 2 * (Math.atan(Math.exp(y / TILE_SIZE * (2 * PI) - PI)) - PI_4);
|
|
8122
|
+
return [lambda2 * RADIANS_TO_DEGREES, phi2 * RADIANS_TO_DEGREES];
|
|
8123
|
+
}
|
|
8124
|
+
|
|
8125
|
+
// ../../node_modules/@math.gl/web-mercator/dist/get-bounds.js
|
|
8126
|
+
var DEGREES_TO_RADIANS2 = Math.PI / 180;
|
|
8127
|
+
|
|
8128
|
+
// src/layers/quadbin-utils.ts
|
|
8129
|
+
var TILE_SIZE2 = 512;
|
|
8130
|
+
function quadbinToOffset(quadbin) {
|
|
8131
|
+
const { x, y, z } = cellToTile(quadbin);
|
|
8132
|
+
const scale = TILE_SIZE2 / (1 << z);
|
|
8133
|
+
return [x * scale, TILE_SIZE2 - y * scale, scale];
|
|
8134
|
+
}
|
|
8135
|
+
function quadbinToWorldBounds(quadbin, coverage) {
|
|
8136
|
+
const [xOffset, yOffset, scale] = quadbinToOffset(quadbin);
|
|
8137
|
+
return [
|
|
8138
|
+
[xOffset, yOffset],
|
|
8139
|
+
[xOffset + coverage * scale, yOffset - coverage * scale]
|
|
8140
|
+
];
|
|
8141
|
+
}
|
|
8142
|
+
function getQuadbinPolygon(quadbin, coverage = 1) {
|
|
8143
|
+
const [topLeft, bottomRight] = quadbinToWorldBounds(quadbin, coverage);
|
|
8144
|
+
const [w, n] = worldToLngLat(topLeft);
|
|
8145
|
+
const [e, s] = worldToLngLat(bottomRight);
|
|
8146
|
+
return [e, n, e, s, w, s, w, n, e, n];
|
|
8147
|
+
}
|
|
8148
|
+
|
|
8149
|
+
// src/layers/quadbin-layer.ts
|
|
8150
|
+
var defaultProps3 = {
|
|
8151
|
+
getQuadbin: { type: "accessor", value: (d) => d.quadbin }
|
|
8152
|
+
};
|
|
8153
|
+
var QuadbinLayer = class extends import_geo_layers4._GeoCellLayer {
|
|
8154
|
+
indexToBounds() {
|
|
8155
|
+
const { data, extruded, getQuadbin } = this.props;
|
|
8156
|
+
const coverage = extruded ? 0.99 : 1;
|
|
8157
|
+
return {
|
|
8158
|
+
data,
|
|
8159
|
+
_normalize: false,
|
|
8160
|
+
positionFormat: "XY",
|
|
8161
|
+
getPolygon: (x, objectInfo) => getQuadbinPolygon(getQuadbin(x, objectInfo), coverage),
|
|
8162
|
+
updateTriggers: { getPolygon: coverage }
|
|
8163
|
+
};
|
|
8164
|
+
}
|
|
8165
|
+
};
|
|
8166
|
+
QuadbinLayer.layerName = "QuadbinLayer";
|
|
8167
|
+
QuadbinLayer.defaultProps = defaultProps3;
|
|
8168
|
+
|
|
8169
|
+
// src/layers/quadbin-tileset-2d.ts
|
|
8170
|
+
var import_geo_layers5 = __toESM(require_geo_layers(), 1);
|
|
8171
|
+
var QuadbinTileset2D = class extends import_geo_layers5._Tileset2D {
|
|
8172
|
+
getTileIndices(opts) {
|
|
8173
|
+
return super.getTileIndices(opts).map(tileToCell).map((q) => ({ q, i: bigIntToHex(q) }));
|
|
8174
|
+
}
|
|
8175
|
+
getTileId({ q, i }) {
|
|
8176
|
+
return i || bigIntToHex(q);
|
|
8177
|
+
}
|
|
8178
|
+
getTileMetadata({ q }) {
|
|
8179
|
+
return super.getTileMetadata(cellToTile(q));
|
|
8180
|
+
}
|
|
8181
|
+
getTileZoom({ q }) {
|
|
8182
|
+
return Number(getResolution2(q));
|
|
8183
|
+
}
|
|
8184
|
+
getParentIndex({ q }) {
|
|
8185
|
+
return { q: cellToParent2(q) };
|
|
8186
|
+
}
|
|
8187
|
+
};
|
|
8188
|
+
|
|
8189
|
+
// src/layers/quadbin-tile-layer.ts
|
|
8190
|
+
var renderSubLayers2 = (props) => {
|
|
8191
|
+
const { data } = props;
|
|
8192
|
+
if (!data || !data.length)
|
|
8193
|
+
return null;
|
|
8194
|
+
const isBigInt = typeof data[0].id === "bigint";
|
|
8195
|
+
return new QuadbinLayer(props, {
|
|
8196
|
+
getQuadbin: isBigInt ? (d) => d.id : (d) => hexToBigInt(d.id)
|
|
8197
|
+
});
|
|
8198
|
+
};
|
|
8199
|
+
var defaultProps4 = {
|
|
8200
|
+
data: TilejsonPropType,
|
|
8201
|
+
tileSize: DEFAULT_TILE_SIZE
|
|
8202
|
+
};
|
|
8203
|
+
var QuadbinTileLayer = class extends import_core7.CompositeLayer {
|
|
8204
|
+
getLoadOptions() {
|
|
8205
|
+
const loadOptions = super.getLoadOptions() || {};
|
|
8206
|
+
const tileJSON = this.props.data;
|
|
8207
|
+
injectAccessToken(loadOptions, tileJSON.accessToken);
|
|
8208
|
+
loadOptions.cartoSpatialTile = { ...loadOptions.cartoSpatialTile, scheme: "quadbin" };
|
|
8209
|
+
return loadOptions;
|
|
8210
|
+
}
|
|
8211
|
+
renderLayers() {
|
|
8212
|
+
const tileJSON = this.props.data;
|
|
8213
|
+
if (!tileJSON)
|
|
8214
|
+
return null;
|
|
8215
|
+
const { tiles: data, maxresolution: maxZoom } = tileJSON;
|
|
8216
|
+
return [
|
|
8217
|
+
new SpatialIndexTileLayer(this.props, {
|
|
8218
|
+
id: `quadbin-tile-layer-${this.props.id}`,
|
|
8219
|
+
data,
|
|
8220
|
+
TilesetClass: QuadbinTileset2D,
|
|
8221
|
+
renderSubLayers: renderSubLayers2,
|
|
8222
|
+
maxZoom,
|
|
8223
|
+
loadOptions: this.getLoadOptions()
|
|
8224
|
+
})
|
|
8225
|
+
];
|
|
8226
|
+
}
|
|
8227
|
+
};
|
|
8228
|
+
QuadbinTileLayer.layerName = "QuadbinTileLayer";
|
|
8229
|
+
QuadbinTileLayer.defaultProps = defaultProps4;
|
|
8230
|
+
|
|
8231
|
+
// src/layers/heatmap-tile-layer.ts
|
|
8232
|
+
function unitDensityForCell(cell) {
|
|
8233
|
+
const cellResolution = Number(getResolution2(cell));
|
|
8234
|
+
return Math.pow(4, cellResolution);
|
|
8235
|
+
}
|
|
8236
|
+
var RTTSolidPolygonLayer = class extends RTTModifier(import_layers.SolidPolygonLayer) {
|
|
8404
8237
|
getShaders(type) {
|
|
8405
8238
|
const shaders = super.getShaders(type);
|
|
8406
8239
|
shaders.inject = {
|
|
8407
|
-
"vs:#decl":
|
|
8408
|
-
|
|
8409
|
-
|
|
8410
|
-
|
|
8240
|
+
"vs:#decl": `
|
|
8241
|
+
uniform float densityFactor;
|
|
8242
|
+
`,
|
|
8243
|
+
"vs:#main-end": `
|
|
8244
|
+
// Value from getWeight accessor
|
|
8245
|
+
float weight = elevations;
|
|
8411
8246
|
|
|
8412
8247
|
// Keep "power" delivered to screen constant when tiles update
|
|
8413
|
-
|
|
8414
|
-
|
|
8415
|
-
value *= relativeArea;
|
|
8248
|
+
// by outputting normalized density
|
|
8249
|
+
weight *= densityFactor;
|
|
8416
8250
|
|
|
8417
8251
|
// Pack float into 3 channels to pass to heatmap shader
|
|
8418
|
-
|
|
8419
|
-
|
|
8252
|
+
// SCALE value important, as we don't want to saturate
|
|
8253
|
+
// but also want enough definition to avoid banding
|
|
8254
|
+
const vec3 SHIFT = vec3(1.0, 256.0, 256.0 * 256.0);
|
|
8255
|
+
const float MAX_VAL = SHIFT.z * 255.0;
|
|
8256
|
+
const float SCALE = MAX_VAL / 8.0;
|
|
8257
|
+
weight *= SCALE;
|
|
8258
|
+
weight = clamp(weight, 0.0, MAX_VAL);
|
|
8259
|
+
vColor = vec4(mod(vec3(weight, floor(weight / SHIFT.yz)), 256.0), 255.0) / 255.0;
|
|
8260
|
+
`
|
|
8420
8261
|
};
|
|
8421
8262
|
return shaders;
|
|
8422
8263
|
}
|
|
8423
8264
|
draw(opts) {
|
|
8424
|
-
const
|
|
8425
|
-
const
|
|
8265
|
+
const cell = this.props.data[0];
|
|
8266
|
+
const maxDensity = this.props.elevationScale;
|
|
8267
|
+
const densityFactor = unitDensityForCell(cell.id) / maxDensity;
|
|
8426
8268
|
for (const model of this.state.models) {
|
|
8427
|
-
model.setUniforms({
|
|
8269
|
+
model.setUniforms({ densityFactor });
|
|
8428
8270
|
}
|
|
8429
8271
|
super.draw(opts);
|
|
8430
8272
|
}
|
|
8431
8273
|
};
|
|
8432
8274
|
RTTSolidPolygonLayer.layerName = "RTTSolidPolygonLayer";
|
|
8433
8275
|
var PostProcessQuadbinTileLayer = PostProcessModifier(QuadbinTileLayer, heatmap);
|
|
8434
|
-
|
|
8435
|
-
return [w % 256, Math.floor(w / 256), Math.floor(w / (256 * 256))];
|
|
8436
|
-
}
|
|
8437
|
-
var defaultProps6 = {
|
|
8276
|
+
var defaultProps5 = {
|
|
8438
8277
|
data: TilejsonPropType,
|
|
8439
|
-
getWeight: { type: "accessor", value: 1 }
|
|
8278
|
+
getWeight: { type: "accessor", value: 1 },
|
|
8279
|
+
onMaxDensityChange: { type: "function", optional: true, value: null },
|
|
8280
|
+
colorDomain: { type: "array", value: [0, 1] },
|
|
8281
|
+
intensity: { type: "number", value: 1 },
|
|
8282
|
+
radiusPixels: { type: "number", min: 0, max: 100, value: 20 }
|
|
8440
8283
|
};
|
|
8441
|
-
var
|
|
8284
|
+
var HeatmapTileLayer = class extends import_core8.CompositeLayer {
|
|
8285
|
+
initializeState() {
|
|
8286
|
+
this.state = {
|
|
8287
|
+
isLoaded: false,
|
|
8288
|
+
tiles: /* @__PURE__ */ new Set(),
|
|
8289
|
+
viewportChanged: false
|
|
8290
|
+
};
|
|
8291
|
+
}
|
|
8292
|
+
shouldUpdateState({ changeFlags }) {
|
|
8293
|
+
const { viewportChanged } = changeFlags;
|
|
8294
|
+
this.setState({ viewportChanged });
|
|
8295
|
+
return changeFlags.somethingChanged;
|
|
8296
|
+
}
|
|
8442
8297
|
renderLayers() {
|
|
8443
|
-
const {
|
|
8298
|
+
const {
|
|
8299
|
+
data,
|
|
8300
|
+
getWeight,
|
|
8301
|
+
colorDomain,
|
|
8302
|
+
colorRange,
|
|
8303
|
+
intensity,
|
|
8304
|
+
radiusPixels,
|
|
8305
|
+
_subLayerProps,
|
|
8306
|
+
updateTriggers,
|
|
8307
|
+
onMaxDensityChange,
|
|
8308
|
+
onViewportLoad,
|
|
8309
|
+
onTileLoad,
|
|
8310
|
+
onTileUnload,
|
|
8311
|
+
...tileLayerProps
|
|
8312
|
+
} = this.props;
|
|
8444
8313
|
const subLayerProps = {
|
|
8445
8314
|
..._subLayerProps,
|
|
8446
8315
|
cell: {
|
|
@@ -8454,26 +8323,245 @@ vec4 heatmap_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {
|
|
|
8454
8323
|
}
|
|
8455
8324
|
}
|
|
8456
8325
|
};
|
|
8457
|
-
|
|
8326
|
+
let tileZ = 0;
|
|
8327
|
+
let maxDensity = 0;
|
|
8328
|
+
const tiles2 = [...this.state.tiles].filter((t) => t.isVisible && t.data);
|
|
8329
|
+
for (const tile of tiles2) {
|
|
8330
|
+
const cell = tile.data[0];
|
|
8331
|
+
const unitDensity = unitDensityForCell(cell.id);
|
|
8332
|
+
maxDensity = Math.max(tile.userData.maxWeight * unitDensity, maxDensity);
|
|
8333
|
+
tileZ = Math.max(tile.zoom, tileZ);
|
|
8334
|
+
}
|
|
8335
|
+
const overzoom = this.context.viewport.zoom - tileZ;
|
|
8336
|
+
const estimatedMaxDensity = maxDensity * Math.pow(2, overzoom);
|
|
8337
|
+
maxDensity = estimatedMaxDensity;
|
|
8338
|
+
if (typeof onMaxDensityChange === "function") {
|
|
8339
|
+
onMaxDensityChange(maxDensity);
|
|
8340
|
+
}
|
|
8458
8341
|
return new PostProcessQuadbinTileLayer(
|
|
8342
|
+
tileLayerProps,
|
|
8459
8343
|
this.getSubLayerProps({
|
|
8460
8344
|
id: "heatmap",
|
|
8461
|
-
data
|
|
8462
|
-
getFillColor,
|
|
8345
|
+
data,
|
|
8346
|
+
getFillColor: 0,
|
|
8347
|
+
getElevation: getWeight,
|
|
8348
|
+
elevationScale: maxDensity,
|
|
8463
8349
|
colorDomain,
|
|
8464
8350
|
colorRange,
|
|
8465
8351
|
radiusPixels,
|
|
8352
|
+
intensity,
|
|
8466
8353
|
_subLayerProps: subLayerProps,
|
|
8354
|
+
refinementStrategy: "no-overlap",
|
|
8355
|
+
extruded: false,
|
|
8356
|
+
stroked: false,
|
|
8467
8357
|
updateTriggers: {
|
|
8468
|
-
|
|
8469
|
-
}
|
|
8358
|
+
getElevation: updateTriggers.getWeight
|
|
8359
|
+
},
|
|
8360
|
+
onViewportLoad: (tiles3) => {
|
|
8361
|
+
this.setState({ isLoaded: true });
|
|
8362
|
+
if (typeof onViewportLoad === "function") {
|
|
8363
|
+
onViewportLoad(tiles3);
|
|
8364
|
+
}
|
|
8365
|
+
},
|
|
8366
|
+
onTileLoad: (tile) => {
|
|
8367
|
+
let maxWeight = -Infinity;
|
|
8368
|
+
if (typeof getWeight !== "function") {
|
|
8369
|
+
maxWeight = getWeight;
|
|
8370
|
+
} else if (tile.content) {
|
|
8371
|
+
for (const d of tile.content) {
|
|
8372
|
+
maxWeight = Math.max(getWeight(d, {}), maxWeight);
|
|
8373
|
+
}
|
|
8374
|
+
}
|
|
8375
|
+
tile.userData = { maxWeight };
|
|
8376
|
+
this.state.tiles.add(tile);
|
|
8377
|
+
if (typeof onTileLoad === "function") {
|
|
8378
|
+
onTileLoad(tile);
|
|
8379
|
+
}
|
|
8380
|
+
},
|
|
8381
|
+
onTileUnload: (tile) => {
|
|
8382
|
+
this.state.tiles.delete(tile);
|
|
8383
|
+
if (typeof onTileUnload === "function") {
|
|
8384
|
+
onTileUnload(tile);
|
|
8385
|
+
}
|
|
8386
|
+
},
|
|
8387
|
+
transitions: { elevationScale: { type: "spring", stiffness: 0.3, damping: 0.5 } }
|
|
8470
8388
|
})
|
|
8471
8389
|
);
|
|
8472
8390
|
}
|
|
8473
8391
|
};
|
|
8474
|
-
|
|
8475
|
-
|
|
8476
|
-
var
|
|
8392
|
+
HeatmapTileLayer.layerName = "HeatmapTileLayer";
|
|
8393
|
+
HeatmapTileLayer.defaultProps = defaultProps5;
|
|
8394
|
+
var heatmap_tile_layer_default = HeatmapTileLayer;
|
|
8395
|
+
|
|
8396
|
+
// src/layers/point-label-layer.ts
|
|
8397
|
+
var import_core9 = __toESM(require_core(), 1);
|
|
8398
|
+
var import_layers2 = __toESM(require_layers(), 1);
|
|
8399
|
+
var [LEFT, TOP, RIGHT, BOTTOM] = [0, 1, 2, 3];
|
|
8400
|
+
var EnhancedTextBackgroundLayer = class extends import_layers2._TextBackgroundLayer {
|
|
8401
|
+
getShaders() {
|
|
8402
|
+
const shaders = super.getShaders();
|
|
8403
|
+
let vs = shaders.vs;
|
|
8404
|
+
vs = vs.replaceAll("padding.", "_padding.");
|
|
8405
|
+
vs = vs.replace(
|
|
8406
|
+
"void main(void) {",
|
|
8407
|
+
"void main(void) {\n vec4 _padding = padding + instancePixelOffsets.xyxy * vec4(1.0, 1.0, -1.0, -1.0);"
|
|
8408
|
+
);
|
|
8409
|
+
return { ...shaders, vs };
|
|
8410
|
+
}
|
|
8411
|
+
};
|
|
8412
|
+
EnhancedTextBackgroundLayer.layerName = "EnhancedTextBackgroundLayer";
|
|
8413
|
+
var EnhancedTextLayer = class extends import_layers2.TextLayer {
|
|
8414
|
+
filterSubLayer({ layer, renderPass }) {
|
|
8415
|
+
const background = layer.id.includes("primary-background");
|
|
8416
|
+
if (renderPass === "collision") {
|
|
8417
|
+
return background;
|
|
8418
|
+
}
|
|
8419
|
+
return !background;
|
|
8420
|
+
}
|
|
8421
|
+
};
|
|
8422
|
+
EnhancedTextLayer.layerName = "EnhancedTextLayer";
|
|
8423
|
+
var defaultProps6 = {
|
|
8424
|
+
...import_layers2.TextLayer.defaultProps,
|
|
8425
|
+
getRadius: { type: "accessor", value: 1 },
|
|
8426
|
+
radiusScale: { type: "number", min: 0, value: 1 }
|
|
8427
|
+
};
|
|
8428
|
+
var PointLabelLayer = class extends import_core9.CompositeLayer {
|
|
8429
|
+
calculatePixelOffset(secondary) {
|
|
8430
|
+
const {
|
|
8431
|
+
getTextAnchor: anchor,
|
|
8432
|
+
getAlignmentBaseline: alignment,
|
|
8433
|
+
getRadius,
|
|
8434
|
+
getSecondaryText,
|
|
8435
|
+
radiusScale,
|
|
8436
|
+
secondarySizeScale,
|
|
8437
|
+
sizeScale
|
|
8438
|
+
} = this.props;
|
|
8439
|
+
const xMult = anchor === "middle" ? 0 : anchor === "start" ? 1 : -1;
|
|
8440
|
+
const yMult = alignment === "center" ? 0 : alignment === "bottom" ? 1 : -1;
|
|
8441
|
+
const xPadding = sizeScale / 4;
|
|
8442
|
+
const yPadding = sizeScale * (1 + 1 / 4);
|
|
8443
|
+
const secondaryOffset = 0.6 * (1 - yMult) * sizeScale;
|
|
8444
|
+
let yOffset = secondary ? secondaryOffset : 0;
|
|
8445
|
+
if (anchor === "middle" && alignment === "top" && getSecondaryText) {
|
|
8446
|
+
yOffset -= secondaryOffset;
|
|
8447
|
+
yOffset -= secondarySizeScale;
|
|
8448
|
+
yOffset += sizeScale;
|
|
8449
|
+
}
|
|
8450
|
+
const radiusPadding = 1 + 1 / 4;
|
|
8451
|
+
return typeof getRadius === "function" ? (d, info) => {
|
|
8452
|
+
const r = (info ? getRadius(d, info) : 1) * radiusScale * radiusPadding;
|
|
8453
|
+
return [xMult * (r + xPadding), yMult * (r + yPadding) + yOffset];
|
|
8454
|
+
} : [
|
|
8455
|
+
xMult * (getRadius * radiusScale * radiusPadding + xPadding),
|
|
8456
|
+
yMult * (getRadius * radiusScale * radiusPadding + yPadding) + yOffset
|
|
8457
|
+
];
|
|
8458
|
+
}
|
|
8459
|
+
calculateBackgroundPadding() {
|
|
8460
|
+
const { getTextAnchor: anchor, getAlignmentBaseline: alignment, sizeScale } = this.props;
|
|
8461
|
+
const paddingX = 12 * sizeScale;
|
|
8462
|
+
const paddingY = 3 * sizeScale;
|
|
8463
|
+
const backgroundPadding = [0, 0, 0, 0];
|
|
8464
|
+
if (alignment === "top") {
|
|
8465
|
+
backgroundPadding[TOP] = paddingY;
|
|
8466
|
+
} else if (alignment === "bottom") {
|
|
8467
|
+
backgroundPadding[BOTTOM] = paddingY;
|
|
8468
|
+
} else {
|
|
8469
|
+
backgroundPadding[TOP] = 0.5 * paddingY;
|
|
8470
|
+
backgroundPadding[BOTTOM] = 0.5 * paddingY;
|
|
8471
|
+
}
|
|
8472
|
+
if (anchor === "start") {
|
|
8473
|
+
backgroundPadding[LEFT] = paddingX;
|
|
8474
|
+
} else if (anchor === "end") {
|
|
8475
|
+
backgroundPadding[RIGHT] = paddingX;
|
|
8476
|
+
} else {
|
|
8477
|
+
backgroundPadding[LEFT] = 0.5 * paddingX;
|
|
8478
|
+
backgroundPadding[RIGHT] = 0.5 * paddingX;
|
|
8479
|
+
}
|
|
8480
|
+
return backgroundPadding;
|
|
8481
|
+
}
|
|
8482
|
+
renderTextLayer(id4, { updateTriggers: updateTriggersOverride = {}, ...props }) {
|
|
8483
|
+
const {
|
|
8484
|
+
data,
|
|
8485
|
+
characterSet,
|
|
8486
|
+
fontFamily,
|
|
8487
|
+
fontSettings,
|
|
8488
|
+
fontWeight,
|
|
8489
|
+
outlineColor,
|
|
8490
|
+
outlineWidth,
|
|
8491
|
+
sizeScale,
|
|
8492
|
+
radiusScale,
|
|
8493
|
+
getAlignmentBaseline,
|
|
8494
|
+
getColor,
|
|
8495
|
+
getPosition,
|
|
8496
|
+
getTextAnchor,
|
|
8497
|
+
updateTriggers
|
|
8498
|
+
} = this.props;
|
|
8499
|
+
return new EnhancedTextLayer(
|
|
8500
|
+
this.getSubLayerProps({
|
|
8501
|
+
id: id4,
|
|
8502
|
+
data,
|
|
8503
|
+
characterSet,
|
|
8504
|
+
fontFamily,
|
|
8505
|
+
fontSettings,
|
|
8506
|
+
fontWeight,
|
|
8507
|
+
outlineColor,
|
|
8508
|
+
outlineWidth,
|
|
8509
|
+
sizeScale,
|
|
8510
|
+
getAlignmentBaseline,
|
|
8511
|
+
getColor,
|
|
8512
|
+
getPosition,
|
|
8513
|
+
getTextAnchor,
|
|
8514
|
+
updateTriggers: {
|
|
8515
|
+
...updateTriggers,
|
|
8516
|
+
...updateTriggersOverride,
|
|
8517
|
+
getPixelOffset: [
|
|
8518
|
+
updateTriggers.getRadius,
|
|
8519
|
+
updateTriggers.getTextAnchor,
|
|
8520
|
+
updateTriggers.getAlignmentBaseline,
|
|
8521
|
+
radiusScale,
|
|
8522
|
+
sizeScale
|
|
8523
|
+
]
|
|
8524
|
+
}
|
|
8525
|
+
}),
|
|
8526
|
+
{
|
|
8527
|
+
getSize: 1,
|
|
8528
|
+
_subLayerProps: { background: { type: EnhancedTextBackgroundLayer } }
|
|
8529
|
+
},
|
|
8530
|
+
props
|
|
8531
|
+
);
|
|
8532
|
+
}
|
|
8533
|
+
renderLayers() {
|
|
8534
|
+
const {
|
|
8535
|
+
getText,
|
|
8536
|
+
getSecondaryColor,
|
|
8537
|
+
getSecondaryText,
|
|
8538
|
+
secondaryOutlineColor,
|
|
8539
|
+
secondarySizeScale,
|
|
8540
|
+
updateTriggers
|
|
8541
|
+
} = this.props;
|
|
8542
|
+
const getPixelOffset = this.calculatePixelOffset(false);
|
|
8543
|
+
const backgroundPadding = this.calculateBackgroundPadding();
|
|
8544
|
+
const out = [
|
|
8545
|
+
this.renderTextLayer(`${updateTriggers.getText}-primary`, {
|
|
8546
|
+
backgroundPadding,
|
|
8547
|
+
getText,
|
|
8548
|
+
getPixelOffset,
|
|
8549
|
+
background: true
|
|
8550
|
+
}),
|
|
8551
|
+
Boolean(getSecondaryText) && this.renderTextLayer(`${updateTriggers.getSecondaryText}-secondary`, {
|
|
8552
|
+
getText: getSecondaryText,
|
|
8553
|
+
getPixelOffset: this.calculatePixelOffset(true),
|
|
8554
|
+
getAlignmentBaseline: "top",
|
|
8555
|
+
...getSecondaryColor && { getColor: getSecondaryColor },
|
|
8556
|
+
...secondarySizeScale && { sizeScale: secondarySizeScale },
|
|
8557
|
+
...secondaryOutlineColor && { outlineColor: secondaryOutlineColor }
|
|
8558
|
+
})
|
|
8559
|
+
];
|
|
8560
|
+
return out;
|
|
8561
|
+
}
|
|
8562
|
+
};
|
|
8563
|
+
PointLabelLayer.layerName = "PointLabelLayer";
|
|
8564
|
+
PointLabelLayer.defaultProps = defaultProps6;
|
|
8477
8565
|
|
|
8478
8566
|
// src/layers/raster-tile-layer.ts
|
|
8479
8567
|
var import_core11 = __toESM(require_core(), 1);
|
|
@@ -8821,170 +8909,6 @@ void main(void) {
|
|
|
8821
8909
|
var import_extensions = __toESM(require_extensions(), 1);
|
|
8822
8910
|
var import_geo_layers6 = __toESM(require_geo_layers(), 1);
|
|
8823
8911
|
var import_layers4 = __toESM(require_layers(), 1);
|
|
8824
|
-
|
|
8825
|
-
// ../../node_modules/@loaders.gl/gis/dist/lib/binary-features/binary-to-geojson.js
|
|
8826
|
-
function binaryToGeojson(data, options) {
|
|
8827
|
-
const globalFeatureId = options?.globalFeatureId;
|
|
8828
|
-
if (globalFeatureId !== void 0) {
|
|
8829
|
-
return getSingleFeature(data, globalFeatureId);
|
|
8830
|
-
}
|
|
8831
|
-
return parseFeatures(data, options?.type);
|
|
8832
|
-
}
|
|
8833
|
-
function getSingleFeature(data, globalFeatureId) {
|
|
8834
|
-
const dataArray = normalizeInput(data);
|
|
8835
|
-
for (const data2 of dataArray) {
|
|
8836
|
-
let lastIndex = 0;
|
|
8837
|
-
let lastValue = data2.featureIds.value[0];
|
|
8838
|
-
for (let i = 0; i < data2.featureIds.value.length; i++) {
|
|
8839
|
-
const currValue = data2.featureIds.value[i];
|
|
8840
|
-
if (currValue === lastValue) {
|
|
8841
|
-
continue;
|
|
8842
|
-
}
|
|
8843
|
-
if (globalFeatureId === data2.globalFeatureIds.value[lastIndex]) {
|
|
8844
|
-
return parseFeature(data2, lastIndex, i);
|
|
8845
|
-
}
|
|
8846
|
-
lastIndex = i;
|
|
8847
|
-
lastValue = currValue;
|
|
8848
|
-
}
|
|
8849
|
-
if (globalFeatureId === data2.globalFeatureIds.value[lastIndex]) {
|
|
8850
|
-
return parseFeature(data2, lastIndex, data2.featureIds.value.length);
|
|
8851
|
-
}
|
|
8852
|
-
}
|
|
8853
|
-
throw new Error(`featureId:${globalFeatureId} not found`);
|
|
8854
|
-
}
|
|
8855
|
-
function parseFeatures(data, type) {
|
|
8856
|
-
const dataArray = normalizeInput(data, type);
|
|
8857
|
-
return parseFeatureCollection(dataArray);
|
|
8858
|
-
}
|
|
8859
|
-
function binaryToGeometry(data, startIndex, endIndex) {
|
|
8860
|
-
switch (data.type) {
|
|
8861
|
-
case "Point":
|
|
8862
|
-
return pointToGeoJson(data, startIndex, endIndex);
|
|
8863
|
-
case "LineString":
|
|
8864
|
-
return lineStringToGeoJson(data, startIndex, endIndex);
|
|
8865
|
-
case "Polygon":
|
|
8866
|
-
return polygonToGeoJson(data, startIndex, endIndex);
|
|
8867
|
-
default:
|
|
8868
|
-
const unexpectedInput = data;
|
|
8869
|
-
throw new Error(`Unsupported geometry type: ${unexpectedInput?.type}`);
|
|
8870
|
-
}
|
|
8871
|
-
}
|
|
8872
|
-
function normalizeInput(data, type) {
|
|
8873
|
-
const features = [];
|
|
8874
|
-
if (data.points) {
|
|
8875
|
-
data.points.type = "Point";
|
|
8876
|
-
features.push(data.points);
|
|
8877
|
-
}
|
|
8878
|
-
if (data.lines) {
|
|
8879
|
-
data.lines.type = "LineString";
|
|
8880
|
-
features.push(data.lines);
|
|
8881
|
-
}
|
|
8882
|
-
if (data.polygons) {
|
|
8883
|
-
data.polygons.type = "Polygon";
|
|
8884
|
-
features.push(data.polygons);
|
|
8885
|
-
}
|
|
8886
|
-
return features;
|
|
8887
|
-
}
|
|
8888
|
-
function parseFeatureCollection(dataArray) {
|
|
8889
|
-
const features = [];
|
|
8890
|
-
for (const data of dataArray) {
|
|
8891
|
-
if (data.featureIds.value.length === 0) {
|
|
8892
|
-
continue;
|
|
8893
|
-
}
|
|
8894
|
-
let lastIndex = 0;
|
|
8895
|
-
let lastValue = data.featureIds.value[0];
|
|
8896
|
-
for (let i = 0; i < data.featureIds.value.length; i++) {
|
|
8897
|
-
const currValue = data.featureIds.value[i];
|
|
8898
|
-
if (currValue === lastValue) {
|
|
8899
|
-
continue;
|
|
8900
|
-
}
|
|
8901
|
-
features.push(parseFeature(data, lastIndex, i));
|
|
8902
|
-
lastIndex = i;
|
|
8903
|
-
lastValue = currValue;
|
|
8904
|
-
}
|
|
8905
|
-
features.push(parseFeature(data, lastIndex, data.featureIds.value.length));
|
|
8906
|
-
}
|
|
8907
|
-
return features;
|
|
8908
|
-
}
|
|
8909
|
-
function parseFeature(data, startIndex, endIndex) {
|
|
8910
|
-
const geometry = binaryToGeometry(data, startIndex, endIndex);
|
|
8911
|
-
const properties = parseProperties(data, startIndex, endIndex);
|
|
8912
|
-
const fields = parseFields(data, startIndex, endIndex);
|
|
8913
|
-
return { type: "Feature", geometry, properties, ...fields };
|
|
8914
|
-
}
|
|
8915
|
-
function parseFields(data, startIndex = 0, endIndex) {
|
|
8916
|
-
return data.fields && data.fields[data.featureIds.value[startIndex]];
|
|
8917
|
-
}
|
|
8918
|
-
function parseProperties(data, startIndex = 0, endIndex) {
|
|
8919
|
-
const properties = Object.assign({}, data.properties[data.featureIds.value[startIndex]]);
|
|
8920
|
-
for (const key in data.numericProps) {
|
|
8921
|
-
properties[key] = data.numericProps[key].value[startIndex];
|
|
8922
|
-
}
|
|
8923
|
-
return properties;
|
|
8924
|
-
}
|
|
8925
|
-
function polygonToGeoJson(data, startIndex = -Infinity, endIndex = Infinity) {
|
|
8926
|
-
const { positions } = data;
|
|
8927
|
-
const polygonIndices = data.polygonIndices.value.filter((x) => x >= startIndex && x <= endIndex);
|
|
8928
|
-
const primitivePolygonIndices = data.primitivePolygonIndices.value.filter((x) => x >= startIndex && x <= endIndex);
|
|
8929
|
-
const multi = polygonIndices.length > 2;
|
|
8930
|
-
if (!multi) {
|
|
8931
|
-
const coordinates2 = [];
|
|
8932
|
-
for (let i = 0; i < primitivePolygonIndices.length - 1; i++) {
|
|
8933
|
-
const startRingIndex = primitivePolygonIndices[i];
|
|
8934
|
-
const endRingIndex = primitivePolygonIndices[i + 1];
|
|
8935
|
-
const ringCoordinates = ringToGeoJson(positions, startRingIndex, endRingIndex);
|
|
8936
|
-
coordinates2.push(ringCoordinates);
|
|
8937
|
-
}
|
|
8938
|
-
return { type: "Polygon", coordinates: coordinates2 };
|
|
8939
|
-
}
|
|
8940
|
-
const coordinates = [];
|
|
8941
|
-
for (let i = 0; i < polygonIndices.length - 1; i++) {
|
|
8942
|
-
const startPolygonIndex = polygonIndices[i];
|
|
8943
|
-
const endPolygonIndex = polygonIndices[i + 1];
|
|
8944
|
-
const polygonCoordinates = polygonToGeoJson(data, startPolygonIndex, endPolygonIndex).coordinates;
|
|
8945
|
-
coordinates.push(polygonCoordinates);
|
|
8946
|
-
}
|
|
8947
|
-
return { type: "MultiPolygon", coordinates };
|
|
8948
|
-
}
|
|
8949
|
-
function lineStringToGeoJson(data, startIndex = -Infinity, endIndex = Infinity) {
|
|
8950
|
-
const { positions } = data;
|
|
8951
|
-
const pathIndices = data.pathIndices.value.filter((x) => x >= startIndex && x <= endIndex);
|
|
8952
|
-
const multi = pathIndices.length > 2;
|
|
8953
|
-
if (!multi) {
|
|
8954
|
-
const coordinates2 = ringToGeoJson(positions, pathIndices[0], pathIndices[1]);
|
|
8955
|
-
return { type: "LineString", coordinates: coordinates2 };
|
|
8956
|
-
}
|
|
8957
|
-
const coordinates = [];
|
|
8958
|
-
for (let i = 0; i < pathIndices.length - 1; i++) {
|
|
8959
|
-
const ringCoordinates = ringToGeoJson(positions, pathIndices[i], pathIndices[i + 1]);
|
|
8960
|
-
coordinates.push(ringCoordinates);
|
|
8961
|
-
}
|
|
8962
|
-
return { type: "MultiLineString", coordinates };
|
|
8963
|
-
}
|
|
8964
|
-
function pointToGeoJson(data, startIndex, endIndex) {
|
|
8965
|
-
const { positions } = data;
|
|
8966
|
-
const coordinates = ringToGeoJson(positions, startIndex, endIndex);
|
|
8967
|
-
const multi = coordinates.length > 1;
|
|
8968
|
-
if (multi) {
|
|
8969
|
-
return { type: "MultiPoint", coordinates };
|
|
8970
|
-
}
|
|
8971
|
-
return { type: "Point", coordinates: coordinates[0] };
|
|
8972
|
-
}
|
|
8973
|
-
function ringToGeoJson(positions, startIndex, endIndex) {
|
|
8974
|
-
startIndex = startIndex || 0;
|
|
8975
|
-
endIndex = endIndex || positions.value.length / positions.size;
|
|
8976
|
-
const ringCoordinates = [];
|
|
8977
|
-
for (let j = startIndex; j < endIndex; j++) {
|
|
8978
|
-
const coord = Array();
|
|
8979
|
-
for (let k = j * positions.size; k < (j + 1) * positions.size; k++) {
|
|
8980
|
-
coord.push(Number(positions.value[k]));
|
|
8981
|
-
}
|
|
8982
|
-
ringCoordinates.push(coord);
|
|
8983
|
-
}
|
|
8984
|
-
return ringCoordinates;
|
|
8985
|
-
}
|
|
8986
|
-
|
|
8987
|
-
// src/layers/vector-tile-layer.ts
|
|
8988
8912
|
(0, import_core12.registerLoaders)([carto_properties_tile_loader_default, carto_vector_tile_loader_default]);
|
|
8989
8913
|
var defaultProps9 = {
|
|
8990
8914
|
...import_geo_layers6.MVTLayer.defaultProps,
|
|
@@ -9063,15 +8987,10 @@ void main(void) {
|
|
|
9063
8987
|
const subLayer = new import_layers4.GeoJsonLayer(subLayerProps);
|
|
9064
8988
|
return subLayer;
|
|
9065
8989
|
}
|
|
9066
|
-
|
|
9067
|
-
|
|
9068
|
-
|
|
9069
|
-
|
|
9070
|
-
info.object = binaryToGeojson(data, {
|
|
9071
|
-
globalFeatureId: info.index
|
|
9072
|
-
});
|
|
9073
|
-
}
|
|
9074
|
-
return info;
|
|
8990
|
+
_isWGS84() {
|
|
8991
|
+
if (this.state.mvt)
|
|
8992
|
+
return super._isWGS84();
|
|
8993
|
+
return true;
|
|
9075
8994
|
}
|
|
9076
8995
|
};
|
|
9077
8996
|
VectorTileLayer.layerName = "VectorTileLayer";
|
|
@@ -9079,7 +8998,7 @@ void main(void) {
|
|
|
9079
8998
|
|
|
9080
8999
|
// src/api/carto-api-error.ts
|
|
9081
9000
|
var CartoAPIError = class extends Error {
|
|
9082
|
-
constructor(error, errorContext, response) {
|
|
9001
|
+
constructor(error, errorContext, response, responseJson) {
|
|
9083
9002
|
let responseString = "Failed to connect";
|
|
9084
9003
|
if (response) {
|
|
9085
9004
|
responseString = "Server returned: ";
|
|
@@ -9108,6 +9027,7 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
|
|
|
9108
9027
|
super(message);
|
|
9109
9028
|
this.name = "CartoAPIError";
|
|
9110
9029
|
this.response = response;
|
|
9030
|
+
this.responseJson = responseJson;
|
|
9111
9031
|
this.error = error;
|
|
9112
9032
|
this.errorContext = errorContext;
|
|
9113
9033
|
}
|
|
@@ -12627,19 +12547,10 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
|
|
|
12627
12547
|
}
|
|
12628
12548
|
|
|
12629
12549
|
// src/api/common.ts
|
|
12630
|
-
var import_core13 = __toESM(require_core(), 1);
|
|
12631
12550
|
var DEFAULT_API_BASE_URL = "https://gcp-us-east1.api.carto.com";
|
|
12632
12551
|
var DEFAULT_CLIENT = "deck-gl-carto";
|
|
12633
12552
|
var V3_MINOR_VERSION = "3.4";
|
|
12634
12553
|
var MAX_GET_LENGTH = 8192;
|
|
12635
|
-
var DEFAULT_PARAMETERS = {
|
|
12636
|
-
v: V3_MINOR_VERSION,
|
|
12637
|
-
deckglVersion: import_core13.VERSION
|
|
12638
|
-
};
|
|
12639
|
-
var DEFAULT_HEADERS = {
|
|
12640
|
-
Accept: "application/json",
|
|
12641
|
-
"Content-Type": "application/json"
|
|
12642
|
-
};
|
|
12643
12554
|
|
|
12644
12555
|
// src/api/endpoints.ts
|
|
12645
12556
|
function joinPath(...args) {
|
|
@@ -12681,39 +12592,45 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
|
|
|
12681
12592
|
}
|
|
12682
12593
|
|
|
12683
12594
|
// src/api/request-with-parameters.ts
|
|
12684
|
-
|
|
12685
|
-
|
|
12686
|
-
|
|
12687
|
-
|
|
12688
|
-
|
|
12689
|
-
|
|
12595
|
+
var import_core13 = __toESM(require_core(), 1);
|
|
12596
|
+
var DEFAULT_PARAMETERS = {
|
|
12597
|
+
v: V3_MINOR_VERSION,
|
|
12598
|
+
deckglVersion: import_core13.VERSION
|
|
12599
|
+
};
|
|
12600
|
+
var DEFAULT_HEADERS = {
|
|
12601
|
+
Accept: "application/json",
|
|
12602
|
+
"Content-Type": "application/json"
|
|
12603
|
+
};
|
|
12690
12604
|
var REQUEST_CACHE = /* @__PURE__ */ new Map();
|
|
12691
12605
|
async function requestWithParameters({
|
|
12692
12606
|
baseUrl,
|
|
12693
|
-
parameters,
|
|
12694
|
-
headers: customHeaders,
|
|
12607
|
+
parameters = {},
|
|
12608
|
+
headers: customHeaders = {},
|
|
12695
12609
|
errorContext
|
|
12696
12610
|
}) {
|
|
12697
12611
|
parameters = { ...DEFAULT_PARAMETERS, ...parameters };
|
|
12698
|
-
|
|
12612
|
+
baseUrl = excludeURLParameters(baseUrl, Object.keys(parameters));
|
|
12613
|
+
const key = createCacheKey(baseUrl, parameters, customHeaders);
|
|
12699
12614
|
if (REQUEST_CACHE.has(key)) {
|
|
12700
12615
|
return REQUEST_CACHE.get(key);
|
|
12701
12616
|
}
|
|
12702
|
-
const url =
|
|
12617
|
+
const url = createURLWithParameters(baseUrl, parameters);
|
|
12703
12618
|
const headers = { ...DEFAULT_HEADERS, ...customHeaders };
|
|
12704
12619
|
const fetchPromise = url.length > MAX_GET_LENGTH ? fetch(baseUrl, { method: "POST", body: JSON.stringify(parameters), headers }) : fetch(url, { headers });
|
|
12705
12620
|
let response;
|
|
12621
|
+
let responseJson;
|
|
12706
12622
|
const jsonPromise = fetchPromise.then((_response) => {
|
|
12707
12623
|
response = _response;
|
|
12708
12624
|
return response.json();
|
|
12709
12625
|
}).then((json) => {
|
|
12626
|
+
responseJson = json;
|
|
12710
12627
|
if (!response || !response.ok) {
|
|
12711
12628
|
throw new Error(json.error);
|
|
12712
12629
|
}
|
|
12713
12630
|
return json;
|
|
12714
12631
|
}).catch((error) => {
|
|
12715
12632
|
REQUEST_CACHE.delete(key);
|
|
12716
|
-
throw new CartoAPIError(error, errorContext, response);
|
|
12633
|
+
throw new CartoAPIError(error, errorContext, response, responseJson);
|
|
12717
12634
|
});
|
|
12718
12635
|
REQUEST_CACHE.set(key, jsonPromise);
|
|
12719
12636
|
return jsonPromise;
|
|
@@ -12723,11 +12640,25 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
|
|
|
12723
12640
|
const headerEntries = Object.entries(headers).sort(([a], [b]) => a > b ? 1 : -1);
|
|
12724
12641
|
return JSON.stringify({ baseUrl, parameters: parameterEntries, headers: headerEntries });
|
|
12725
12642
|
}
|
|
12726
|
-
function createURLWithParameters(
|
|
12727
|
-
const
|
|
12728
|
-
|
|
12729
|
-
|
|
12730
|
-
|
|
12643
|
+
function createURLWithParameters(baseUrlString, parameters) {
|
|
12644
|
+
const baseUrl = new URL(baseUrlString);
|
|
12645
|
+
for (const [key, value] of Object.entries(parameters)) {
|
|
12646
|
+
if (isPureObject(value) || Array.isArray(value)) {
|
|
12647
|
+
baseUrl.searchParams.set(key, JSON.stringify(value));
|
|
12648
|
+
} else {
|
|
12649
|
+
baseUrl.searchParams.set(key, value.toString());
|
|
12650
|
+
}
|
|
12651
|
+
}
|
|
12652
|
+
return baseUrl.toString();
|
|
12653
|
+
}
|
|
12654
|
+
function excludeURLParameters(baseUrlString, parameters) {
|
|
12655
|
+
const baseUrl = new URL(baseUrlString);
|
|
12656
|
+
for (const param of parameters) {
|
|
12657
|
+
if (baseUrl.searchParams.has(param)) {
|
|
12658
|
+
baseUrl.searchParams.delete(param);
|
|
12659
|
+
}
|
|
12660
|
+
}
|
|
12661
|
+
return baseUrl.toString();
|
|
12731
12662
|
}
|
|
12732
12663
|
|
|
12733
12664
|
// src/sources/base-source.ts
|
|
@@ -12881,8 +12812,11 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
|
|
|
12881
12812
|
|
|
12882
12813
|
// src/sources/raster-source.ts
|
|
12883
12814
|
var rasterSource = async function(options) {
|
|
12884
|
-
const { tableName } = options;
|
|
12815
|
+
const { tableName, filters } = options;
|
|
12885
12816
|
const urlParameters = { name: tableName };
|
|
12817
|
+
if (filters) {
|
|
12818
|
+
urlParameters.filters = filters;
|
|
12819
|
+
}
|
|
12886
12820
|
return baseSource("raster", options, urlParameters);
|
|
12887
12821
|
};
|
|
12888
12822
|
|
|
@@ -14574,9 +14508,9 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
|
|
|
14574
14508
|
// src/index.ts
|
|
14575
14509
|
var CARTO_LAYERS = {
|
|
14576
14510
|
H3TileLayer,
|
|
14511
|
+
HeatmapTileLayer: heatmap_tile_layer_default,
|
|
14577
14512
|
_PointLabelLayer: PointLabelLayer,
|
|
14578
14513
|
QuadbinTileLayer,
|
|
14579
|
-
QuadbinHeatmapTileLayer: quadbin_heatmap_tile_layer_default,
|
|
14580
14514
|
RasterTileLayer,
|
|
14581
14515
|
VectorTileLayer
|
|
14582
14516
|
};
|