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