apache/superset · error · Error
Position of picked data is required
Error message
Position of picked data is required
What it means
Thrown by the deck.gl cross-filters data-mask builder when a picked (clicked) chart element carries none of position, positions, or positionBounds. Cross-filtering a deck.gl layer works by converting the clicked geometry into filter values over the spatial columns; with no position data on the pick payload there is nothing to filter on and the mask cannot be built.
Source
Thrown at superset-frontend/plugins/preset-chart-deckgl/src/utils/crossFiltersDataMask.ts:108
positions?: [number, number][];
spatialData: SpatialData;
positionBounds?: PositionBounds;
}) => {
const {
lonCol,
latCol,
lonlatCol,
geohashCol,
reverseCheckbox,
type,
delimiter,
} = spatialData;
let values: (string | number | [number, number] | [number, number][])[] = [];
let filters: QueryObjectFilterClause[] = [];
let customColumnLabel;
if (!position && !positions && !positionBounds)
throw new Error('Position of picked data is required');
switch (type) {
case spatialTypes.latlong: {
if (lonCol != null && latCol != null) {
const cols = [lonCol, latCol];
if (positions && positions.length > 0) {
values = positions;
customColumnLabel = cols.join(', ');
filters = [
{
col: lonCol,
op: 'IN',
val: positions.map(pos => pos[0]),
},
{
col: latCol,View on GitHub (pinned to f4587218dd)
Solutions
- Check the layer's data: rows with null/missing coordinates should be filtered (the layers already add IS NOT NULL filters — verify they are applied).
- If developing a custom layer, ensure onClick picks include position (point), positions (paths), or positionBounds (polygons) before invoking the mask builder.
- Disable cross-filter on the chart if the layer type does not carry positional picks.
Example fix
// before
const mask = getCrossFilterDataMask(picked); // picked has no geometry
// after
if (!picked.position && !picked.positions && !picked.positionBounds) {
return; // nothing filterable was picked
}
const mask = getCrossFilterDataMask(picked); Defensive patterns
Strategy: validation
Validate before calling
if (!picked.position && !picked.positions && !picked.positionBounds) {
return; // nothing filterable
}
const mask = getCrossFilterDataMask(picked); Type guard
const hasPickGeometry = (p: unknown): boolean => p != null && Boolean((p as any).position || (p as any).positions || (p as any).positionBounds);
Try / catch
try { applyCrossFilter(getCrossFilterDataMask(picked)); } catch (e) { if (e.message === 'Position of picked data is required') console.warn('non-geometric pick ignored'); else throw e; } Prevention
- Populate position data on picks in custom layers
- Filter null-coordinate rows upstream so picks always carry geometry
When it happens
Trigger: Clicking (cross-filtering) a deck.gl chart object whose picked datum lacks position/positions/positionBounds — e.g. a polygon pick that returned only bounds under a different key, a null island point, or programmatic calls to the mask builder with a synthetic pick object.
Common situations: Cross-filter enabled on layers whose data rows contain null coordinates; plugins/forks adding layer types without populating pick positions; version changes to the pick payload shape.
Related errors
- Start and end spatial configurations are required for Arc ch
- Spatial configuration is required for Scatter charts
- Bad spatial key
- Longitude and latitude columns are required for latlong type
- Longitude/latitude column is required for delimited type
AI-assisted analysis of apache/superset@f4587218dd (2026-08-14).
Data as JSON: /api/errors/a2debd553704c134.
Report an issue: GitHub.