kepler.gl 3.1.0 → 3.1.1
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/README.md +27 -132
- package/dist/src/common-utils/src/data-type.d.ts +9 -1
- package/dist/src/components/src/common/data-table/header-cell.d.ts +1 -0
- package/dist/src/components/src/common/data-table/index.d.ts +1 -0
- package/dist/src/components/src/common/file-uploader/file-drop.d.ts +1 -32
- package/dist/src/components/src/common/item-selector/dropdown-list.d.ts +2 -2
- package/dist/src/components/src/common/item-selector/item-selector.d.ts +1 -1
- package/dist/src/components/src/common/item-selector/typeahead.d.ts +1 -1
- package/dist/src/components/src/geocoder/geocoder.d.ts +7 -0
- package/dist/src/components/src/geocoder-panel.d.ts +2 -2
- package/dist/src/components/src/hooks/use-fetch-vector-tile-metadata.d.ts +4 -3
- package/dist/src/constants/src/default-settings.d.ts +14 -1
- package/dist/src/deckgl-arrow-layers/src/constants.d.ts +0 -12
- package/dist/src/deckgl-arrow-layers/src/index.d.ts +0 -1
- package/dist/src/deckgl-arrow-layers/src/utils/utils.d.ts +12 -1
- package/dist/src/duckdb/src/components/preview-data-panel.d.ts +7 -2
- package/dist/src/duckdb/src/components/schema-panel.d.ts +12 -3
- package/dist/src/duckdb/src/processors/data-processor.d.ts +1 -0
- package/dist/src/duckdb/src/table/duckdb-table-utils.d.ts +106 -0
- package/dist/src/duckdb/src/table/duckdb-table.d.ts +5 -3
- package/dist/src/processors/src/data-processor.d.ts +15 -1
- package/dist/src/reducers/src/provider-state-updaters.d.ts +1 -0
- package/dist/src/reducers/src/vis-state-updaters.d.ts +1 -1
- package/dist/src/table/src/dataset-utils.d.ts +1 -1
- package/dist/src/table/src/tileset/vector-tile-utils.d.ts +17 -1
- package/dist/src/utils/src/application-config.d.ts +4 -3
- package/dist/src/utils/src/data-utils.d.ts +9 -3
- package/dist/src/utils/src/indexed-data-container.d.ts +2 -2
- package/dist/src/utils/src/map-style-utils/mapbox-utils.d.ts +1 -1
- package/dist/src/utils/src/map-utils.d.ts +1 -1
- package/dist/src/utils/src/plot.d.ts +2 -2
- package/package.json +5 -5
- package/src/actions/package.json +8 -8
- package/src/ai-assistant/dist/components/ai-assistant-component.js +2 -1
- package/src/ai-assistant/package.json +7 -7
- package/src/ai-assistant/src/components/ai-assistant-component.tsx +1 -0
- package/src/cloud-providers/package.json +2 -2
- package/src/common-utils/dist/data-type.d.ts +9 -1
- package/src/common-utils/dist/data-type.js +50 -1
- package/src/common-utils/package.json +3 -3
- package/src/common-utils/src/data-type.ts +49 -1
- package/src/components/dist/common/data-table/header-cell.d.ts +1 -0
- package/src/components/dist/common/data-table/header-cell.js +2 -2
- package/src/components/dist/common/data-table/index.d.ts +1 -0
- package/src/components/dist/common/data-table/index.js +5 -1
- package/src/components/dist/common/file-uploader/file-drop.d.ts +1 -32
- package/src/components/dist/common/file-uploader/file-drop.js +152 -167
- package/src/components/dist/common/item-selector/dropdown-list.d.ts +2 -2
- package/src/components/dist/common/item-selector/dropdown-list.js +2 -3
- package/src/components/dist/common/item-selector/item-selector.d.ts +1 -1
- package/src/components/dist/common/item-selector/typeahead.d.ts +1 -1
- package/src/components/dist/common/range-brush.js +3 -3
- package/src/components/dist/geocoder/geocoder.d.ts +7 -0
- package/src/components/dist/geocoder/geocoder.js +19 -11
- package/src/components/dist/geocoder-panel.d.ts +2 -2
- package/src/components/dist/geocoder-panel.js +64 -91
- package/src/components/dist/hooks/use-fetch-vector-tile-metadata.d.ts +4 -3
- package/src/components/dist/hooks/use-fetch-vector-tile-metadata.js +35 -26
- package/src/components/dist/hooks/use-legend-position.js +8 -4
- package/src/components/dist/map/map-legend-panel.js +2 -3
- package/src/components/dist/modal-container.js +8 -8
- package/src/components/dist/modals/tilesets-modals/tileset-vector-form.js +31 -12
- package/src/components/dist/side-panel/layer-panel/color-palette-preset.js +2 -2
- package/src/components/dist/side-panel/layer-panel/color-range-selector.js +10 -11
- package/src/components/dist/side-panel/layer-panel/color-selector.js +3 -3
- package/src/components/dist/side-panel/layer-panel/custom-palette.js +1 -2
- package/src/components/dist/side-panel/layer-panel/layer-configurator.js +6 -8
- package/src/components/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +1 -2
- package/src/components/package.json +16 -16
- package/src/components/src/common/data-table/header-cell.tsx +2 -1
- package/src/components/src/common/data-table/index.tsx +4 -0
- package/src/components/src/common/file-uploader/file-drop.tsx +186 -161
- package/src/components/src/common/item-selector/dropdown-list.tsx +1 -6
- package/src/components/src/common/range-brush.tsx +2 -2
- package/src/components/src/geocoder/geocoder.tsx +16 -8
- package/src/components/src/geocoder-panel.tsx +95 -85
- package/src/components/src/hooks/use-fetch-vector-tile-metadata.ts +27 -25
- package/src/components/src/hooks/use-legend-position.ts +5 -2
- package/src/components/src/map/map-legend-panel.tsx +1 -2
- package/src/components/src/modal-container.tsx +7 -7
- package/src/components/src/modals/tilesets-modals/tileset-vector-form.tsx +12 -3
- package/src/components/src/side-panel/layer-panel/color-palette-preset.tsx +1 -1
- package/src/components/src/side-panel/layer-panel/color-range-selector.tsx +6 -11
- package/src/components/src/side-panel/layer-panel/color-selector.tsx +2 -2
- package/src/components/src/side-panel/layer-panel/custom-palette.tsx +0 -1
- package/src/components/src/side-panel/layer-panel/layer-configurator.tsx +23 -33
- package/src/components/src/side-panel/layer-panel/vector-tile-layer-configurator.tsx +0 -1
- package/src/constants/dist/default-settings.d.ts +14 -1
- package/src/constants/dist/default-settings.js +20 -5
- package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/91/4f/6c65f3a1eba584ffd2d892cabc25ab5804d4a9ef53694c98707372a83e56343a274bec04f15927a6fe7602615f0f23f73ccf599f524ef97ad6c77c8832ea +1 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/a6/b2/5424aa4477192fb44cc90fd80892efdc96731f2ff0f48e8f28abf64243cc +2 -0
- package/src/constants/package.json +2 -2
- package/src/constants/src/default-settings.ts +16 -1
- package/src/constants/umd/keplergl.min.js +2 -2
- package/src/deckgl-arrow-layers/dist/constants.d.ts +0 -12
- package/src/deckgl-arrow-layers/dist/constants.js +4 -15
- package/src/deckgl-arrow-layers/dist/index.d.ts +0 -1
- package/src/deckgl-arrow-layers/dist/index.js +1 -8
- package/src/deckgl-arrow-layers/dist/layers/geo-arrow-scatterplot-layer.js +4 -4
- package/src/deckgl-arrow-layers/dist/layers/geo-arrow-text-layer.js +5 -5
- package/src/deckgl-arrow-layers/dist/utils/utils.d.ts +12 -1
- package/src/deckgl-arrow-layers/dist/utils/utils.js +7 -5
- package/src/deckgl-arrow-layers/package.json +2 -1
- package/src/deckgl-arrow-layers/src/constants.ts +0 -13
- package/src/deckgl-arrow-layers/src/index.ts +0 -2
- package/src/deckgl-arrow-layers/src/layers/geo-arrow-scatterplot-layer.ts +5 -3
- package/src/deckgl-arrow-layers/src/layers/geo-arrow-text-layer.ts +8 -4
- package/src/deckgl-arrow-layers/src/utils/utils.ts +7 -5
- package/src/deckgl-layers/dist/deckgl-extensions/filter-arrow-layer.d.ts +1 -1
- package/src/deckgl-layers/dist/deckgl-extensions/filter-shader-module.d.ts +1 -1
- package/src/deckgl-layers/dist/deckgl-extensions/filter-shader-module.js +3 -3
- package/src/deckgl-layers/package.json +5 -5
- package/src/deckgl-layers/src/deckgl-extensions/filter-shader-module.ts +4 -3
- package/src/duckdb/dist/components/monaco-editor.js +4 -5
- package/src/duckdb/dist/components/preview-data-panel.d.ts +7 -2
- package/src/duckdb/dist/components/preview-data-panel.js +7 -8
- package/src/duckdb/dist/components/schema-panel.d.ts +12 -3
- package/src/duckdb/dist/components/schema-panel.js +41 -24
- package/src/duckdb/dist/components/sql-panel.js +245 -56
- package/src/duckdb/dist/init.js +20 -14
- package/src/duckdb/dist/processors/data-processor.d.ts +1 -0
- package/src/duckdb/dist/processors/data-processor.js +4 -4
- package/src/duckdb/dist/table/duckdb-table-utils.d.ts +106 -0
- package/src/duckdb/dist/table/duckdb-table-utils.js +493 -2
- package/src/duckdb/dist/table/duckdb-table.d.ts +5 -3
- package/src/duckdb/dist/table/duckdb-table.js +153 -261
- package/src/duckdb/package.json +6 -6
- package/src/duckdb/src/components/monaco-editor.tsx +3 -3
- package/src/duckdb/src/components/preview-data-panel.tsx +15 -8
- package/src/duckdb/src/components/schema-panel.tsx +92 -21
- package/src/duckdb/src/components/sql-panel.tsx +160 -22
- package/src/duckdb/src/init.ts +4 -1
- package/src/duckdb/src/processors/data-processor.ts +2 -2
- package/src/duckdb/src/table/duckdb-table-utils.ts +407 -1
- package/src/duckdb/src/table/duckdb-table.ts +61 -92
- package/src/effects/package.json +5 -5
- package/src/layers/dist/arc-layer/arc-layer.d.ts +1 -1
- package/src/layers/dist/arc-layer/arc-layer.js +2 -3
- package/src/layers/dist/base-layer.d.ts +7 -6
- package/src/layers/dist/base-layer.js +36 -19
- package/src/layers/dist/geojson-layer/geojson-layer.js +4 -2
- package/src/layers/dist/geojson-layer/geojson-utils.js +10 -3
- package/src/layers/dist/heatmap-layer/heatmap-layer.d.ts +2 -0
- package/src/layers/dist/heatmap-layer/heatmap-layer.js +16 -9
- package/src/layers/dist/icon-layer/icon-layer.d.ts +6 -3
- package/src/layers/dist/icon-layer/icon-layer.js +19 -11
- package/src/layers/dist/index.d.ts +1 -1
- package/src/layers/dist/index.js +1 -1
- package/src/layers/dist/layer-text-label.d.ts +9 -0
- package/src/layers/dist/layer-text-label.js +51 -6
- package/src/layers/dist/layer-utils.d.ts +39 -30
- package/src/layers/dist/layer-utils.js +69 -9
- package/src/layers/dist/line-layer/line-layer.d.ts +1 -1
- package/src/layers/dist/line-layer/line-layer.js +2 -3
- package/src/layers/dist/point-layer/point-layer.d.ts +10 -7
- package/src/layers/dist/point-layer/point-layer.js +16 -8
- package/src/layers/dist/trip-layer/trip-layer.d.ts +2 -2
- package/src/layers/dist/trip-layer/trip-layer.js +4 -2
- package/src/layers/dist/vector-tile/abstract-tile-layer.d.ts +3 -7
- package/src/layers/dist/vector-tile/abstract-tile-layer.js +7 -6
- package/src/layers/dist/vector-tile/vector-tile-layer.d.ts +5 -7
- package/src/layers/dist/vector-tile/vector-tile-layer.js +23 -2
- package/src/layers/package.json +11 -10
- package/src/layers/src/arc-layer/arc-layer.ts +1 -1
- package/src/layers/src/base-layer.ts +50 -9
- package/src/layers/src/geojson-layer/geojson-layer.ts +3 -1
- package/src/layers/src/geojson-layer/geojson-utils.ts +4 -1
- package/src/layers/src/heatmap-layer/heatmap-layer.ts +17 -12
- package/src/layers/src/icon-layer/icon-layer.ts +7 -3
- package/src/layers/src/index.ts +1 -2
- package/src/layers/src/layer-text-label.ts +53 -4
- package/src/layers/src/layer-utils.ts +88 -9
- package/src/layers/src/line-layer/line-layer.ts +1 -1
- package/src/layers/src/point-layer/point-layer.ts +15 -11
- package/src/layers/src/trip-layer/trip-layer.ts +4 -2
- package/src/layers/src/vector-tile/abstract-tile-layer.ts +11 -5
- package/src/layers/src/vector-tile/vector-tile-layer.ts +33 -4
- package/src/localization/package.json +1 -1
- package/src/processors/dist/data-processor.d.ts +15 -1
- package/src/processors/dist/data-processor.js +104 -11
- package/src/processors/package.json +8 -7
- package/src/processors/src/data-processor.ts +116 -13
- package/src/reducers/dist/export-utils.js +2 -2
- package/src/reducers/dist/layer-utils.js +1 -1
- package/src/reducers/dist/provider-state-updaters.d.ts +1 -0
- package/src/reducers/dist/provider-state-updaters.js +5 -2
- package/src/reducers/dist/vis-state-updaters.d.ts +1 -1
- package/src/reducers/dist/vis-state-updaters.js +23 -12
- package/src/reducers/package.json +16 -16
- package/src/reducers/src/export-utils.ts +1 -1
- package/src/reducers/src/layer-utils.ts +2 -1
- package/src/reducers/src/provider-state-updaters.ts +4 -1
- package/src/reducers/src/vis-state-updaters.ts +45 -10
- package/src/schemas/dist/dataset-schema.js +35 -6
- package/src/schemas/package.json +7 -7
- package/src/schemas/src/dataset-schema.ts +36 -8
- package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a3/a9/7f26bbc52905b0e21e9366a30ef0ba98f4ccf9aa8dd8326d90ba90191ba2e305323f505bf134c825356156c793bf9386ed2cef2aeb48eb327c26d106f69a +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/7e/51/b8756555a0e2e696d944445ac23f7febf769006013fbc8419f39a701649d +2 -0
- package/src/styles/package.json +2 -2
- package/src/styles/umd/keplergl.min.js +2 -2
- package/src/table/dist/dataset-utils.js +23 -14
- package/src/table/dist/src/table/src/dataset-utils.d.ts +1 -1
- package/src/table/dist/src/table/src/tileset/vector-tile-utils.d.ts +17 -1
- package/src/table/dist/tileset/vector-tile-utils.js +122 -2
- package/src/table/package.json +5 -5
- package/src/table/src/dataset-utils.ts +16 -6
- package/src/table/src/tileset/vector-tile-utils.ts +131 -8
- package/src/tasks/package.json +2 -2
- package/src/types/actions.d.ts +1 -0
- package/src/types/layers.d.ts +1 -0
- package/src/types/package.json +1 -1
- package/src/types/types.d.ts +17 -0
- package/src/utils/dist/application-config.d.ts +4 -3
- package/src/utils/dist/application-config.js +3 -2
- package/src/utils/dist/data-scale-utils.js +4 -4
- package/src/utils/dist/data-utils.d.ts +9 -3
- package/src/utils/dist/data-utils.js +40 -7
- package/src/utils/dist/dataset-utils.js +23 -8
- package/src/utils/dist/indexed-data-container.d.ts +2 -2
- package/src/utils/dist/indexed-data-container.js +1 -1
- package/src/utils/dist/map-style-utils/mapbox-utils.d.ts +1 -1
- package/src/utils/dist/map-style-utils/mapbox-utils.js +3 -3
- package/src/utils/dist/plot.d.ts +2 -2
- package/src/utils/dist/plot.js +6 -6
- package/src/utils/map-utils.spec.js +1 -2
- package/src/utils/package.json +5 -4
- package/src/utils/src/application-config.ts +11 -8
- package/src/utils/src/data-scale-utils.ts +3 -3
- package/src/utils/src/data-utils.ts +36 -7
- package/src/utils/src/dataset-utils.ts +41 -9
- package/src/utils/src/indexed-data-container.ts +1 -1
- package/src/utils/src/map-style-utils/mapbox-utils.ts +2 -2
- package/src/utils/src/plot.ts +5 -5
- package/umd/keplergl.min.js +1279 -1295
package/src/layers/src/index.ts
CHANGED
|
@@ -69,7 +69,9 @@ export const formatTextLabelData = ({
|
|
|
69
69
|
|
|
70
70
|
const getTextAccessor: (d: {index: number}) => string = textLabelAccessor(tl)(dataContainer);
|
|
71
71
|
let characterSet;
|
|
72
|
+
let getText: typeof getTextAccessor | arrow.Vector = getTextAccessor;
|
|
72
73
|
|
|
74
|
+
let rebuildArrowTextVector = true;
|
|
73
75
|
if (
|
|
74
76
|
!triggerChanged?.[`getLabelCharacterSet-${i}`] &&
|
|
75
77
|
oldLayerData &&
|
|
@@ -77,6 +79,8 @@ export const formatTextLabelData = ({
|
|
|
77
79
|
oldLayerData.textLabels[i]
|
|
78
80
|
) {
|
|
79
81
|
characterSet = oldLayerData.textLabels[i].characterSet;
|
|
82
|
+
getText = oldLayerData.textLabels[i].getText;
|
|
83
|
+
rebuildArrowTextVector = false;
|
|
80
84
|
} else {
|
|
81
85
|
if (data instanceof arrow.Table) {
|
|
82
86
|
// we don't filter out arrow tables,
|
|
@@ -100,13 +104,20 @@ export const formatTextLabelData = ({
|
|
|
100
104
|
}
|
|
101
105
|
}
|
|
102
106
|
|
|
103
|
-
let getText: typeof getTextAccessor | arrow.Vector = getTextAccessor;
|
|
104
107
|
// For Arrow Layers getText has to be an arrow vector.
|
|
105
108
|
// For now check here for ArrowTable, not ArrowDataContainer.
|
|
106
|
-
if (
|
|
107
|
-
|
|
108
|
-
|
|
109
|
+
if (
|
|
110
|
+
rebuildArrowTextVector &&
|
|
111
|
+
data instanceof arrow.Table &&
|
|
112
|
+
dataContainer instanceof ArrowDataContainer
|
|
113
|
+
) {
|
|
109
114
|
getText = dataContainer.getColumn(tl.field.fieldIdx);
|
|
115
|
+
try {
|
|
116
|
+
getText = getArrowTextVector(getText as arrow.Vector, getTextAccessor);
|
|
117
|
+
} catch (error) {
|
|
118
|
+
// empty text labels
|
|
119
|
+
getText = getArrowTextVector(getText, () => ' ');
|
|
120
|
+
}
|
|
110
121
|
}
|
|
111
122
|
|
|
112
123
|
return {
|
|
@@ -115,3 +126,41 @@ export const formatTextLabelData = ({
|
|
|
115
126
|
};
|
|
116
127
|
});
|
|
117
128
|
};
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Get an arrow vector suitable to render text labels with arrow layers.
|
|
132
|
+
* @param getText A candidate arrow vector to use for text labels.
|
|
133
|
+
* @param getTextAccessor Text label accessor.
|
|
134
|
+
*/
|
|
135
|
+
export const getArrowTextVector = (
|
|
136
|
+
candidateTextVector: arrow.Vector,
|
|
137
|
+
getTextAccessor: ({index}: {index: number}) => string
|
|
138
|
+
): arrow.Vector => {
|
|
139
|
+
// if the passed vector is suitable for text labels
|
|
140
|
+
if (arrow.DataType.isUtf8(candidateTextVector?.type)) {
|
|
141
|
+
return candidateTextVector;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// create utf8 vector from source vector with the same number of batches.
|
|
145
|
+
// @ts-expect-error
|
|
146
|
+
const offsets = candidateTextVector._offsets;
|
|
147
|
+
const numOffsets = offsets.length;
|
|
148
|
+
const batchVectors: arrow.Vector[] = [];
|
|
149
|
+
const datum = {index: 0};
|
|
150
|
+
for (let batchIndex = 0; batchIndex < numOffsets - 1; batchIndex++) {
|
|
151
|
+
const batchStart = offsets[batchIndex];
|
|
152
|
+
const batchEnd = offsets[batchIndex + 1];
|
|
153
|
+
|
|
154
|
+
const batchLabels: string[] = [];
|
|
155
|
+
for (let rowIndex = batchStart; rowIndex < batchEnd; ++rowIndex) {
|
|
156
|
+
datum.index = rowIndex;
|
|
157
|
+
batchLabels.push(getTextAccessor(datum));
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
batchVectors.push(arrow.vectorFromArray(batchLabels, new arrow.Utf8()));
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const input = batchVectors.flatMap(x => x.data).flat(Number.POSITIVE_INFINITY);
|
|
164
|
+
|
|
165
|
+
return new arrow.Vector(input);
|
|
166
|
+
};
|
|
@@ -5,12 +5,16 @@ import * as arrow from 'apache-arrow';
|
|
|
5
5
|
import {Feature, BBox} from 'geojson';
|
|
6
6
|
import {getGeoMetadata} from '@loaders.gl/gis';
|
|
7
7
|
|
|
8
|
+
import {GEOARROW_EXTENSIONS, GEOARROW_METADATA_KEY} from '@kepler.gl/constants';
|
|
9
|
+
import {KeplerTable} from '@kepler.gl/table';
|
|
8
10
|
import {
|
|
9
11
|
Field,
|
|
10
12
|
ProtoDatasetField,
|
|
11
13
|
FieldPair,
|
|
12
14
|
SupportedColumnMode,
|
|
13
|
-
LayerColumn
|
|
15
|
+
LayerColumn,
|
|
16
|
+
LayerColumns,
|
|
17
|
+
RGBColor
|
|
14
18
|
} from '@kepler.gl/types';
|
|
15
19
|
import {DataContainerInterface, ArrowDataContainer} from '@kepler.gl/utils';
|
|
16
20
|
import {
|
|
@@ -19,7 +23,6 @@ import {
|
|
|
19
23
|
BinaryGeometriesFromArrowOptions,
|
|
20
24
|
updateBoundsFromGeoArrowSamples
|
|
21
25
|
} from '@loaders.gl/arrow';
|
|
22
|
-
import {EXTENSION_NAME} from '@kepler.gl/deckgl-arrow-layers';
|
|
23
26
|
|
|
24
27
|
import {WKBLoader} from '@loaders.gl/wkt';
|
|
25
28
|
import {geojsonToBinary} from '@loaders.gl/gis';
|
|
@@ -33,7 +36,26 @@ import {
|
|
|
33
36
|
|
|
34
37
|
import {DeckGlGeoTypes, GeojsonDataMaps} from './geojson-layer/geojson-utils';
|
|
35
38
|
|
|
36
|
-
export
|
|
39
|
+
export type FindDefaultLayerProps = {
|
|
40
|
+
label: string;
|
|
41
|
+
color?: RGBColor;
|
|
42
|
+
isVisible?: boolean;
|
|
43
|
+
columns?: Record<string, LayerColumn>;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export type FindDefaultLayerPropsReturnValue = {
|
|
47
|
+
/** Layer props to create layers by default when a dataset is added */
|
|
48
|
+
props: FindDefaultLayerProps[];
|
|
49
|
+
/** layer props of possible alternative layer configurations, not created by default */
|
|
50
|
+
altProps?: FindDefaultLayerProps[];
|
|
51
|
+
/** Already found layer configurations */
|
|
52
|
+
foundLayers?: (FindDefaultLayerProps & {type: string})[];
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export function assignPointPairToLayerColumn(
|
|
56
|
+
pair: FieldPair,
|
|
57
|
+
hasAlt: boolean
|
|
58
|
+
): Record<string, LayerColumn> {
|
|
37
59
|
const {lat, lng, altitude} = pair.pair;
|
|
38
60
|
if (!hasAlt) {
|
|
39
61
|
return {lat, lng};
|
|
@@ -149,7 +171,6 @@ function getBinaryGeometriesFromWKBArrow(
|
|
|
149
171
|
}
|
|
150
172
|
|
|
151
173
|
export function getGeojsonLayerMetaFromArrow({
|
|
152
|
-
dataContainer,
|
|
153
174
|
geoColumn,
|
|
154
175
|
geoField,
|
|
155
176
|
chunkIndex
|
|
@@ -159,7 +180,7 @@ export function getGeojsonLayerMetaFromArrow({
|
|
|
159
180
|
geoField: ProtoDatasetField;
|
|
160
181
|
chunkIndex?: number;
|
|
161
182
|
}): GeojsonLayerMetaProps {
|
|
162
|
-
const encoding = geoField?.metadata?.get(
|
|
183
|
+
const encoding = geoField?.metadata?.get(GEOARROW_METADATA_KEY);
|
|
163
184
|
const options: BinaryGeometriesFromArrowOptions = {
|
|
164
185
|
...(chunkIndex !== undefined && chunkIndex >= 0
|
|
165
186
|
? {
|
|
@@ -172,7 +193,7 @@ export function getGeojsonLayerMetaFromArrow({
|
|
|
172
193
|
};
|
|
173
194
|
|
|
174
195
|
// getBinaryGeometriesFromArrow doesn't support geoarrow.wkb
|
|
175
|
-
if (encoding ===
|
|
196
|
+
if (encoding === GEOARROW_EXTENSIONS.WKB) {
|
|
176
197
|
return getBinaryGeometriesFromWKBArrow(geoColumn, options);
|
|
177
198
|
}
|
|
178
199
|
|
|
@@ -220,7 +241,7 @@ export function getHoveredObjectFromArrow(
|
|
|
220
241
|
const rawGeometry = col?.get(objectInfo.index);
|
|
221
242
|
|
|
222
243
|
const field = fieldAccessor(dataContainer);
|
|
223
|
-
const encoding = field?.metadata?.get(
|
|
244
|
+
const encoding = field?.metadata?.get(GEOARROW_METADATA_KEY);
|
|
224
245
|
|
|
225
246
|
const hoveredFeature = parseGeometryFromArrow(rawGeometry, encoding);
|
|
226
247
|
|
|
@@ -265,7 +286,7 @@ export function getGeoArrowPointFields(fields: Field[]): Field[] {
|
|
|
265
286
|
return fields.filter(field => {
|
|
266
287
|
return (
|
|
267
288
|
field.type === 'geoarrow' &&
|
|
268
|
-
field.metadata?.get(
|
|
289
|
+
field.metadata?.get(GEOARROW_METADATA_KEY) === GEOARROW_EXTENSIONS.POINT
|
|
269
290
|
);
|
|
270
291
|
});
|
|
271
292
|
}
|
|
@@ -291,7 +312,7 @@ export function createGeoArrowPointVector(
|
|
|
291
312
|
const precision = 2;
|
|
292
313
|
|
|
293
314
|
const metadata = new Map();
|
|
294
|
-
metadata.set(
|
|
315
|
+
metadata.set(GEOARROW_METADATA_KEY, GEOARROW_EXTENSIONS.POINT);
|
|
295
316
|
|
|
296
317
|
const childField = new arrow.Field('xyz', new arrow.Float(precision), false, metadata);
|
|
297
318
|
const fixedSizeList = new arrow.FixedSizeList(numCoords, childField);
|
|
@@ -411,3 +432,61 @@ export function getBoundsFromArrowMetadata(
|
|
|
411
432
|
|
|
412
433
|
return false;
|
|
413
434
|
}
|
|
435
|
+
|
|
436
|
+
/**
|
|
437
|
+
* Finds and returns the first satisfied column mode based on the provided columns and fields.
|
|
438
|
+
* @param supportedColumnModes - An array of supported column modes to check.
|
|
439
|
+
* @param columns - The available columns.
|
|
440
|
+
* @param fields - Optional table fields to be used for extra verification.
|
|
441
|
+
* @returns The first column mode that satisfies the required conditions, or undefined if none match.
|
|
442
|
+
*/
|
|
443
|
+
export function getSatisfiedColumnMode(
|
|
444
|
+
columnModes: SupportedColumnMode[] | null,
|
|
445
|
+
columns: LayerColumns | undefined,
|
|
446
|
+
fields?: KeplerTable['fields']
|
|
447
|
+
): SupportedColumnMode | undefined {
|
|
448
|
+
return columnModes?.find(mode => {
|
|
449
|
+
return mode.requiredColumns?.every(requriedCol => {
|
|
450
|
+
const column = columns?.[requriedCol];
|
|
451
|
+
if (column?.value) {
|
|
452
|
+
if (mode.verifyField && fields?.[column.fieldIdx]) {
|
|
453
|
+
const field = fields[column.fieldIdx];
|
|
454
|
+
return mode.verifyField(field);
|
|
455
|
+
}
|
|
456
|
+
return true;
|
|
457
|
+
}
|
|
458
|
+
return false;
|
|
459
|
+
});
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
/**
|
|
464
|
+
* Returns true if the field is of geoarrow point format.
|
|
465
|
+
* @param field A field.
|
|
466
|
+
* @returns Returns true if the field is of geoarrow point format.
|
|
467
|
+
*/
|
|
468
|
+
export function isGeoArrowPointField(field: Field) {
|
|
469
|
+
return (
|
|
470
|
+
field.type === 'geoarrow' &&
|
|
471
|
+
field.metadata?.get(GEOARROW_METADATA_KEY) === GEOARROW_EXTENSIONS.POINT
|
|
472
|
+
);
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
/**
|
|
476
|
+
* Create default geoarrow column props based on the dataset.
|
|
477
|
+
* @param dataset A dataset to create layer props from.
|
|
478
|
+
* @returns geoarrow column props.
|
|
479
|
+
*/
|
|
480
|
+
export function getGeoArrowPointLayerProps(dataset: KeplerTable) {
|
|
481
|
+
const {label} = dataset;
|
|
482
|
+
const altProps: FindDefaultLayerProps[] = [];
|
|
483
|
+
dataset.fields.forEach(field => {
|
|
484
|
+
if (isGeoArrowPointField(field)) {
|
|
485
|
+
altProps.push({
|
|
486
|
+
label: (typeof label === 'string' && label.replace(/\.[^/.]+$/, '')) || field.name,
|
|
487
|
+
columns: {geoarrow: {value: field.name, fieldIdx: field.fieldIdx}}
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
});
|
|
491
|
+
return altProps;
|
|
492
|
+
}
|
|
@@ -231,7 +231,7 @@ export default class LineLayer extends ArcLayer {
|
|
|
231
231
|
};
|
|
232
232
|
}
|
|
233
233
|
|
|
234
|
-
static findDefaultLayerProps({
|
|
234
|
+
static findDefaultLayerProps({fieldPairs = []}: KeplerTable): {
|
|
235
235
|
props: {color?: RGBColor; columns: LineLayerColumnsConfig; label: string}[];
|
|
236
236
|
} {
|
|
237
237
|
if (fieldPairs.length < 2) {
|
|
@@ -36,9 +36,12 @@ import {
|
|
|
36
36
|
assignPointPairToLayerColumn,
|
|
37
37
|
isLayerHoveredFromArrow,
|
|
38
38
|
getBoundsFromArrowMetadata,
|
|
39
|
+
getGeoArrowPointLayerProps,
|
|
40
|
+
isGeoArrowPointField,
|
|
39
41
|
createGeoArrowPointVector,
|
|
40
42
|
getFilteredIndex,
|
|
41
|
-
getNeighbors
|
|
43
|
+
getNeighbors,
|
|
44
|
+
FindDefaultLayerProps
|
|
42
45
|
} from '../layer-utils';
|
|
43
46
|
import {getGeojsonPointDataMaps, GeojsonPointDataMaps} from '../geojson-layer/geojson-utils';
|
|
44
47
|
import {
|
|
@@ -150,12 +153,14 @@ const SUPPORTED_COLUMN_MODES = [
|
|
|
150
153
|
{
|
|
151
154
|
key: COLUMN_MODE_GEOJSON,
|
|
152
155
|
label: 'GeoJSON Feature',
|
|
153
|
-
requiredColumns: geojsonRequiredColumns
|
|
156
|
+
requiredColumns: geojsonRequiredColumns,
|
|
157
|
+
verifyField: f => !isGeoArrowPointField(f)
|
|
154
158
|
},
|
|
155
159
|
{
|
|
156
160
|
key: COLUMN_MODE_GEOARROW,
|
|
157
161
|
label: 'Geoarrow Points',
|
|
158
|
-
requiredColumns: geoarrowRequiredColumns
|
|
162
|
+
requiredColumns: geoarrowRequiredColumns,
|
|
163
|
+
verifyField: f => isGeoArrowPointField(f)
|
|
159
164
|
}
|
|
160
165
|
];
|
|
161
166
|
const DEFAULT_COLUMN_MODE = COLUMN_MODE_POINTS;
|
|
@@ -322,13 +327,10 @@ export default class PointLayer extends Layer {
|
|
|
322
327
|
return this;
|
|
323
328
|
}
|
|
324
329
|
|
|
325
|
-
static findDefaultLayerProps(
|
|
326
|
-
const
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
isVisible?: boolean;
|
|
330
|
-
columns?: PointLayerColumnsConfig;
|
|
331
|
-
}[] = [];
|
|
330
|
+
static findDefaultLayerProps(dataset: KeplerTable) {
|
|
331
|
+
const {fieldPairs = [], type} = dataset;
|
|
332
|
+
|
|
333
|
+
const props: FindDefaultLayerProps[] = [];
|
|
332
334
|
|
|
333
335
|
if (type === DatasetType.VECTOR_TILE) {
|
|
334
336
|
return {props};
|
|
@@ -362,7 +364,9 @@ export default class PointLayer extends Layer {
|
|
|
362
364
|
props.push(prop);
|
|
363
365
|
});
|
|
364
366
|
|
|
365
|
-
|
|
367
|
+
const altProps = getGeoArrowPointLayerProps(dataset);
|
|
368
|
+
|
|
369
|
+
return {props, altProps};
|
|
366
370
|
}
|
|
367
371
|
|
|
368
372
|
getDefaultLayerConfig(props: LayerBaseConfigPartial) {
|
|
@@ -244,7 +244,7 @@ export default class TripLayer extends Layer {
|
|
|
244
244
|
|
|
245
245
|
static findDefaultLayerProps(
|
|
246
246
|
{label, fields = [], dataContainer, id}: KeplerTable,
|
|
247
|
-
foundLayers
|
|
247
|
+
foundLayers?: any[]
|
|
248
248
|
) {
|
|
249
249
|
const geojsonColumns = fields.filter(f => f.type === 'geojson').map(f => f.name);
|
|
250
250
|
|
|
@@ -268,7 +268,7 @@ export default class TripLayer extends Layer {
|
|
|
268
268
|
})),
|
|
269
269
|
|
|
270
270
|
// if a geojson layer is created from this column, delete it
|
|
271
|
-
foundLayers: foundLayers
|
|
271
|
+
foundLayers: foundLayers?.filter(
|
|
272
272
|
prop =>
|
|
273
273
|
prop.type !== 'geojson' ||
|
|
274
274
|
prop.dataId !== id ||
|
|
@@ -407,6 +407,8 @@ export default class TripLayer extends Layer {
|
|
|
407
407
|
...columnConfig,
|
|
408
408
|
columnMode: COLUMN_MODE_TABLE
|
|
409
409
|
});
|
|
410
|
+
} else {
|
|
411
|
+
return this;
|
|
410
412
|
}
|
|
411
413
|
}
|
|
412
414
|
|
|
@@ -40,6 +40,7 @@ import {
|
|
|
40
40
|
} from '../base-layer';
|
|
41
41
|
import TileDataset from './common-tile/tile-dataset';
|
|
42
42
|
import {isIndexedField, isDomainQuantiles} from './common-tile/tile-utils';
|
|
43
|
+
import {FindDefaultLayerPropsReturnValue} from '../layer-utils';
|
|
43
44
|
|
|
44
45
|
const DEFAULT_ELEVATION = 500;
|
|
45
46
|
export const DEFAULT_RADIUS = 1;
|
|
@@ -64,6 +65,7 @@ export type AbstractTileLayerVisConfigSettings = {
|
|
|
64
65
|
export type LayerData = {
|
|
65
66
|
minZoom?: number;
|
|
66
67
|
maxZoom?: number;
|
|
68
|
+
bounds?: number[];
|
|
67
69
|
getPointRadius?: () => number;
|
|
68
70
|
};
|
|
69
71
|
|
|
@@ -163,9 +165,7 @@ export default abstract class AbstractTileLayer<
|
|
|
163
165
|
|
|
164
166
|
protected abstract initTileDataset(): TileDataset<T, I>;
|
|
165
167
|
|
|
166
|
-
static findDefaultLayerProps(dataset: KeplerDataset): {
|
|
167
|
-
props: {dataId: string; label?: string; isVisible: boolean}[];
|
|
168
|
-
} {
|
|
168
|
+
static findDefaultLayerProps(dataset: KeplerDataset): FindDefaultLayerPropsReturnValue {
|
|
169
169
|
if (!isTileDataset(dataset)) {
|
|
170
170
|
return {props: []};
|
|
171
171
|
}
|
|
@@ -409,10 +409,16 @@ export default abstract class AbstractTileLayer<
|
|
|
409
409
|
});
|
|
410
410
|
|
|
411
411
|
const metadata = dataset?.metadata as LayerData | undefined;
|
|
412
|
+
const metadataToData = metadata
|
|
413
|
+
? {
|
|
414
|
+
minZoom: metadata.minZoom,
|
|
415
|
+
maxZoom: metadata.maxZoom,
|
|
416
|
+
bounds: metadata.bounds
|
|
417
|
+
}
|
|
418
|
+
: {};
|
|
412
419
|
|
|
413
420
|
return {
|
|
414
|
-
...
|
|
415
|
-
...(metadata ? {maxZoom: metadata.maxZoom} : {}),
|
|
421
|
+
...metadataToData,
|
|
416
422
|
...accessors
|
|
417
423
|
};
|
|
418
424
|
}
|
|
@@ -5,7 +5,7 @@ import {FeatureCollection, Feature} from 'geojson';
|
|
|
5
5
|
|
|
6
6
|
import {Layer as DeckLayer} from '@deck.gl/core/typed';
|
|
7
7
|
import {_Tile2DHeader as Tile2DHeader} from '@deck.gl/geo-layers/typed';
|
|
8
|
-
import {GeoJsonLayer} from '@deck.gl/layers/typed';
|
|
8
|
+
import {GeoJsonLayer, PathLayer} from '@deck.gl/layers/typed';
|
|
9
9
|
import {MVTSource, MVTTileSource} from '@loaders.gl/mvt';
|
|
10
10
|
import {PMTilesSource, PMTilesTileSource} from '@loaders.gl/pmtiles';
|
|
11
11
|
import GL from '@luma.gl/constants';
|
|
@@ -53,6 +53,7 @@ import {
|
|
|
53
53
|
VisualChannelDomain,
|
|
54
54
|
VisualChannelField
|
|
55
55
|
} from '../base-layer';
|
|
56
|
+
import {FindDefaultLayerPropsReturnValue} from '../layer-utils';
|
|
56
57
|
|
|
57
58
|
import AbstractTileLayer, {
|
|
58
59
|
LayerData as CommonLayerData,
|
|
@@ -174,6 +175,35 @@ export type VectorTileLayerVisConfigSettings = Merge<
|
|
|
174
175
|
}
|
|
175
176
|
>;
|
|
176
177
|
|
|
178
|
+
export function tileLayerBoundsLayer(id: string, props: {bounds?: number[]}): DeckLayer[] {
|
|
179
|
+
const {bounds} = props;
|
|
180
|
+
if (bounds?.length !== 4) return [];
|
|
181
|
+
|
|
182
|
+
const data = [
|
|
183
|
+
{
|
|
184
|
+
path: [
|
|
185
|
+
[bounds[0], bounds[1]],
|
|
186
|
+
[bounds[2], bounds[1]],
|
|
187
|
+
[bounds[2], bounds[3]],
|
|
188
|
+
[bounds[0], bounds[3]],
|
|
189
|
+
[bounds[0], bounds[1]]
|
|
190
|
+
]
|
|
191
|
+
}
|
|
192
|
+
];
|
|
193
|
+
|
|
194
|
+
const layer = new PathLayer({
|
|
195
|
+
id: `${id}-vector-tile-bounds`,
|
|
196
|
+
data,
|
|
197
|
+
getPath: d => d.path,
|
|
198
|
+
getColor: [128, 128, 128, 255],
|
|
199
|
+
getWidth: 1,
|
|
200
|
+
widthUnits: 'pixels',
|
|
201
|
+
pickable: false
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
return [layer];
|
|
205
|
+
}
|
|
206
|
+
|
|
177
207
|
export default class VectorTileLayer extends AbstractTileLayer<VectorTile, Feature[]> {
|
|
178
208
|
declare config: VectorTileLayerConfig;
|
|
179
209
|
declare visConfigSettings: VectorTileLayerVisConfigSettings;
|
|
@@ -186,9 +216,7 @@ export default class VectorTileLayer extends AbstractTileLayer<VectorTile, Featu
|
|
|
186
216
|
|
|
187
217
|
meta = {};
|
|
188
218
|
|
|
189
|
-
static findDefaultLayerProps(dataset: KeplerDataset): {
|
|
190
|
-
props: {dataId: string; label?: string; isVisible: boolean}[];
|
|
191
|
-
} {
|
|
219
|
+
static findDefaultLayerProps(dataset: KeplerDataset): FindDefaultLayerPropsReturnValue {
|
|
192
220
|
if (dataset.type !== DatasetType.VECTOR_TILE) {
|
|
193
221
|
return {props: []};
|
|
194
222
|
}
|
|
@@ -626,6 +654,7 @@ export default class VectorTileLayer extends AbstractTileLayer<VectorTile, Featu
|
|
|
626
654
|
})
|
|
627
655
|
]
|
|
628
656
|
: [])
|
|
657
|
+
// ...tileLayerBoundsLayer(defaultLayerProps.id, data),
|
|
629
658
|
];
|
|
630
659
|
|
|
631
660
|
return layers;
|
|
@@ -166,7 +166,21 @@ export declare function processKeplerglDataset(rawData: object | object[], schem
|
|
|
166
166
|
* @returns dataset containing `fields` and `rows` or null
|
|
167
167
|
*/
|
|
168
168
|
export declare function processArrowTable(arrowTable: ArrowTable): ProcessorResult | null;
|
|
169
|
-
|
|
169
|
+
/**
|
|
170
|
+
* Extracts GeoArrow metadata from an Apache Arrow table schema.
|
|
171
|
+
* For geoparquet files geoarrow metadata isn't present in fields, so extract extra info from schema.
|
|
172
|
+
* @param table The Apache Arrow table to extract metadata from.
|
|
173
|
+
* @returns An object mapping column names to their GeoArrow encoding type.
|
|
174
|
+
* @throws Logs an error message if parsing of metadata fails.
|
|
175
|
+
*/
|
|
176
|
+
export declare function getGeoArrowMetadataFromSchema(table: arrow.Table): Record<string, string>;
|
|
177
|
+
/**
|
|
178
|
+
* Converts an Apache Arrow table schema into an array of Kepler.gl field objects.
|
|
179
|
+
* @param table The Apache Arrow table whose schema needs to be converted.
|
|
180
|
+
* @param fieldTypeSuggestions Optional mapping of field names to suggested field types.
|
|
181
|
+
* @returns An array of field objects suitable for Kepler.gl.
|
|
182
|
+
*/
|
|
183
|
+
export declare function arrowSchemaToFields(table: arrow.Table, fieldTypeSuggestions?: Record<string, string>): Field[];
|
|
170
184
|
/**
|
|
171
185
|
* Parse arrow batches returned from parseInBatches()
|
|
172
186
|
*
|