@carto/kepler.gl 0.0.65-alpha.labels.2 → 0.0.65-alpha.labels.4
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/CHANGELOG.md +899 -0
- package/dist/components/map-container.js +1 -2
- package/dist/constants/default-settings.js +1 -1
- package/dist/deckgl-layers/point-label-layer/point-label-layer.js +16 -13
- package/dist/layers/base-layer.js +14 -51
- package/package.json +1 -1
- package/src/components/map-container.js +0 -1
- package/src/deckgl-layers/point-label-layer/.point-label-layer.js.swp +0 -0
- package/src/deckgl-layers/point-label-layer/point-label-layer.js +14 -9
- package/src/layers/.base-layer.js.swp +0 -0
- package/src/layers/base-layer.js +20 -43
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@carto/kepler.gl",
|
|
3
3
|
"author": "CARTO",
|
|
4
4
|
"homepage": "https://github.com/CartoDB/carto-kepler#readme",
|
|
5
|
-
"version": "0.0.65-alpha.labels.
|
|
5
|
+
"version": "0.0.65-alpha.labels.4",
|
|
6
6
|
"description": "kepler.gl is a webgl based application to visualize large scale location data in the browser",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"main": "dist/index.js",
|
|
@@ -303,7 +303,6 @@ export default function MapContainerFactory(MapPopover, MapControl, Editor) {
|
|
|
303
303
|
return;
|
|
304
304
|
}
|
|
305
305
|
|
|
306
|
-
throw error;
|
|
307
306
|
const errorMessage = `An error in deck.gl: ${error?.message} in ${layer?.id}`;
|
|
308
307
|
const notificationId = `${layer?.id}-${error?.message}`;
|
|
309
308
|
|
|
Binary file
|
|
@@ -16,8 +16,8 @@ class EnhancedTextLayer extends TextLayer {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
// TODO
|
|
20
|
-
TextLayer.defaultProps.fontSettings = {type: 'object', value: {}, optional: true, compare:
|
|
19
|
+
// TODO remove once https://github.com/visgl/deck.gl/pull/7757 out
|
|
20
|
+
TextLayer.defaultProps.fontSettings = {type: 'object', value: {}, optional: true, compare: 1};
|
|
21
21
|
|
|
22
22
|
const defaultProps = {
|
|
23
23
|
...TextLayer.defaultProps,
|
|
@@ -41,9 +41,13 @@ export class PointLabelLayer extends CompositeLayer {
|
|
|
41
41
|
|
|
42
42
|
// Place secondary label under main label (spacing 1 / 3 main label font size)
|
|
43
43
|
const yOffset = secondary ? (1 + 1 / 3) * sizeScale : 0;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const
|
|
44
|
+
|
|
45
|
+
// Padding based on font size (font size / 4)
|
|
46
|
+
const xPadding = sizeScale / 4;
|
|
47
|
+
const yPadding = sizeScale + 1 / 4;
|
|
48
|
+
|
|
49
|
+
// Padding based on point radius (radius/ 4)
|
|
50
|
+
const radiusPadding = 1 + 1 / 4;
|
|
47
51
|
|
|
48
52
|
return typeof getRadius === 'function'
|
|
49
53
|
? d => {
|
|
@@ -57,8 +61,7 @@ export class PointLabelLayer extends CompositeLayer {
|
|
|
57
61
|
}
|
|
58
62
|
|
|
59
63
|
calculateBackgroundPadding(getPixelOffset) {
|
|
60
|
-
|
|
61
|
-
const {alignment, anchor, sizeScale} = this.props;
|
|
64
|
+
const {getTextAnchor: anchor, getAlignmentBaseline: alignment, sizeScale} = this.props;
|
|
62
65
|
|
|
63
66
|
// Heuristics to avoid label overlap (should we base this on the text length?)
|
|
64
67
|
const paddingX = 12 * sizeScale;
|
|
@@ -146,9 +149,10 @@ export class PointLabelLayer extends CompositeLayer {
|
|
|
146
149
|
getSecondaryColor,
|
|
147
150
|
getSecondaryText,
|
|
148
151
|
secondaryOutlineColor,
|
|
149
|
-
secondarySizeScale
|
|
152
|
+
secondarySizeScale,
|
|
153
|
+
updateTriggers
|
|
150
154
|
} = this.props;
|
|
151
|
-
const getPixelOffset = this.calculatePixelOffset();
|
|
155
|
+
const getPixelOffset = this.calculatePixelOffset(false);
|
|
152
156
|
const backgroundPadding = this.calculateBackgroundPadding(getPixelOffset);
|
|
153
157
|
const out = [
|
|
154
158
|
this.renderTextLayer('primary', {
|
|
@@ -161,6 +165,7 @@ export class PointLabelLayer extends CompositeLayer {
|
|
|
161
165
|
this.renderTextLayer('secondary', {
|
|
162
166
|
getText: getSecondaryText,
|
|
163
167
|
getPixelOffset: this.calculatePixelOffset(true),
|
|
168
|
+
updateTriggers: {getText: updateTriggers.getSecondaryText},
|
|
164
169
|
|
|
165
170
|
// Optional overrides
|
|
166
171
|
...(getSecondaryColor && {getColor: getSecondaryColor}),
|
|
Binary file
|
package/src/layers/base-layer.js
CHANGED
|
@@ -23,37 +23,6 @@ import keymirror from 'keymirror';
|
|
|
23
23
|
import {CollisionFilterExtension, DataFilterExtension} from '@deck.gl/extensions';
|
|
24
24
|
import {COORDINATE_SYSTEM, Layer as DeckLayer} from '@deck.gl/core';
|
|
25
25
|
import {PointLabelLayer} from '../deckgl-layers/point-label-layer/point-label-layer';
|
|
26
|
-
|
|
27
|
-
// Workaround until https://github.com/visgl/deck.gl/pull/7513 is released
|
|
28
|
-
DeckLayer.defaultProps.getFilterValue = {type: 'accessor', value: 0};
|
|
29
|
-
|
|
30
|
-
// Workaround until https://github.com/visgl/deck.gl/pull/7507 is released
|
|
31
|
-
function deepEqual(a, b) {
|
|
32
|
-
if (a === b) {
|
|
33
|
-
return true;
|
|
34
|
-
}
|
|
35
|
-
if (!a || !b) {
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
for (const key in a) {
|
|
39
|
-
const aValue = a[key];
|
|
40
|
-
const bValue = b[key];
|
|
41
|
-
const equals = aValue === bValue || deepEqual(aValue, bValue);
|
|
42
|
-
if (!equals) {
|
|
43
|
-
return false;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
DeckLayer.defaultProps.loadOptions = {
|
|
50
|
-
type: 'object',
|
|
51
|
-
value: {},
|
|
52
|
-
optional: true,
|
|
53
|
-
compare: true,
|
|
54
|
-
equal: deepEqual
|
|
55
|
-
};
|
|
56
|
-
|
|
57
26
|
import DefaultLayerIcon from './default-layer-icon';
|
|
58
27
|
import {diffUpdateTriggers} from './layer-update';
|
|
59
28
|
|
|
@@ -1348,20 +1317,24 @@ class Layer {
|
|
|
1348
1317
|
) {
|
|
1349
1318
|
const {data, mapState} = renderOpts;
|
|
1350
1319
|
const {textLabel, visibilityByZoom} = this.config;
|
|
1351
|
-
// const extensions = [...sharedProps.extensions];
|
|
1352
1320
|
const extensions = [...sharedProps.extensions, collisionFilterExtension];
|
|
1353
1321
|
|
|
1354
1322
|
if (!data || !data.textLabels || !data.textLabels[0] || !data.textLabels[0].getText) {
|
|
1355
|
-
return
|
|
1323
|
+
return [];
|
|
1356
1324
|
}
|
|
1357
1325
|
|
|
1358
|
-
// TODO other labels
|
|
1359
|
-
const i = 0;
|
|
1360
|
-
|
|
1361
1326
|
const [mainLabel, secondaryLabel] = textLabel;
|
|
1362
|
-
const {
|
|
1327
|
+
const {
|
|
1328
|
+
alignment,
|
|
1329
|
+
anchor,
|
|
1330
|
+
color: getColor,
|
|
1331
|
+
field: mainField,
|
|
1332
|
+
outlineColor,
|
|
1333
|
+
size: sizeScale
|
|
1334
|
+
} = mainLabel;
|
|
1363
1335
|
const {
|
|
1364
1336
|
color: getSecondaryColor,
|
|
1337
|
+
field: secondaryField,
|
|
1365
1338
|
outlineColor: secondaryOutlineColor,
|
|
1366
1339
|
size: secondarySizeScale
|
|
1367
1340
|
} = secondaryLabel || {};
|
|
@@ -1369,12 +1342,15 @@ class Layer {
|
|
|
1369
1342
|
return [
|
|
1370
1343
|
new PointLabelLayer({
|
|
1371
1344
|
...sharedProps,
|
|
1372
|
-
|
|
1345
|
+
|
|
1346
|
+
// Recreate layer when labels change otherwise rendering breaks
|
|
1347
|
+
// TODO could be more efficient with updateTriggers?
|
|
1348
|
+
id: `${this.id}-${mainField?.name}-${secondaryField?.name}-label`,
|
|
1373
1349
|
data: data.data,
|
|
1374
1350
|
visibilityByZoom,
|
|
1375
|
-
characterSet: 'auto',
|
|
1376
|
-
|
|
1377
1351
|
extensions,
|
|
1352
|
+
|
|
1353
|
+
characterSet: 'auto',
|
|
1378
1354
|
collisionEnabled: true,
|
|
1379
1355
|
collisionGroup: `${this.id}-labels`,
|
|
1380
1356
|
|
|
@@ -1383,7 +1359,7 @@ class Layer {
|
|
|
1383
1359
|
sizeScale,
|
|
1384
1360
|
outlineColor,
|
|
1385
1361
|
|
|
1386
|
-
...(
|
|
1362
|
+
...(secondaryField && {
|
|
1387
1363
|
getSecondaryText: data.textLabels[1].getText,
|
|
1388
1364
|
getSecondaryColor,
|
|
1389
1365
|
secondarySizeScale,
|
|
@@ -1410,7 +1386,8 @@ class Layer {
|
|
|
1410
1386
|
getFilterValue: data.getFilterValue,
|
|
1411
1387
|
updateTriggers: {
|
|
1412
1388
|
...updateTriggers,
|
|
1413
|
-
getText:
|
|
1389
|
+
getText: mainField?.name,
|
|
1390
|
+
getColor: mainField?.color,
|
|
1414
1391
|
getPixelOffset: {
|
|
1415
1392
|
...updateTriggers.getPixelOffset,
|
|
1416
1393
|
...updateTriggers.getRadius,
|
|
@@ -1419,7 +1396,7 @@ class Layer {
|
|
|
1419
1396
|
},
|
|
1420
1397
|
getTextAnchor: mainLabel.anchor,
|
|
1421
1398
|
getAlignmentBaseline: mainLabel.alignment,
|
|
1422
|
-
|
|
1399
|
+
getSecondaryText: secondaryField?.name
|
|
1423
1400
|
}
|
|
1424
1401
|
})
|
|
1425
1402
|
];
|