Skip to content

Commit bbb7e16

Browse files
committed
Update additional layers to support struct coordinate arrow table
1 parent ff98172 commit bbb7e16

9 files changed

+60
-13
lines changed

src/layers/arc-layer.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { ArcLayer } from "@deck.gl/layers";
1515
import type { ArcLayerProps } from "@deck.gl/layers";
1616
import * as arrow from "apache-arrow";
1717
import * as ga from "@geoarrow/geoarrow-js";
18-
import { assignAccessor, extractAccessorsFromProps } from "../utils/utils";
18+
import { assignAccessor, convertStructToFixedSizeList, extractAccessorsFromProps, isGeomSeparate } from "../utils/utils";
1919
import { child } from "@geoarrow/geoarrow-js";
2020
import {
2121
GeoArrowExtraPickingProps,
@@ -157,9 +157,15 @@ export class GeoArrowArcLayer<
157157
recordBatchIdx < table.batches.length;
158158
recordBatchIdx++
159159
) {
160-
const sourceData = sourcePosition.data[recordBatchIdx];
160+
let sourceData = sourcePosition.data[recordBatchIdx];
161+
if (isGeomSeparate(sourceData)) {
162+
sourceData = convertStructToFixedSizeList(sourceData);
163+
}
161164
const sourceValues = child.getPointChild(sourceData).values;
162-
const targetData = targetPosition.data[recordBatchIdx];
165+
let targetData = targetPosition.data[recordBatchIdx];
166+
if (isGeomSeparate(targetData)) {
167+
targetData = convertStructToFixedSizeList(targetData);
168+
}
163169
const targetValues = child.getPointChild(targetData).values;
164170

165171
const props: ArcLayerProps = {

src/layers/column-layer.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@ import type { ColumnLayerProps } from "@deck.gl/layers";
1616
import * as arrow from "apache-arrow";
1717
import {
1818
assignAccessor,
19+
convertStructToFixedSizeList,
1920
extractAccessorsFromProps,
2021
getGeometryVector,
22+
isGeomSeparate,
2123
} from "../utils/utils";
2224
import * as ga from "@geoarrow/geoarrow-js";
2325
import { ColorAccessor, FloatAccessor, GeoArrowPickingInfo } from "../types";
@@ -161,7 +163,10 @@ export class GeoArrowColumnLayer<
161163
recordBatchIdx < table.batches.length;
162164
recordBatchIdx++
163165
) {
164-
const geometryData = geometryColumn.data[recordBatchIdx];
166+
let geometryData = geometryColumn.data[recordBatchIdx];
167+
if (isGeomSeparate(geometryData)) {
168+
geometryData = convertStructToFixedSizeList(geometryData);
169+
}
165170
const flatCoordsData = ga.child.getPointChild(geometryData);
166171
const flatCoordinateArray = flatCoordsData.values;
167172

src/layers/heatmap-layer.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@ import * as arrow from "apache-arrow";
1616
import * as ga from "@geoarrow/geoarrow-js";
1717
import {
1818
assignAccessor,
19+
convertStructToFixedSizeList,
1920
extractAccessorsFromProps,
2021
getGeometryVector,
22+
isGeomSeparate,
2123
} from "../utils/utils";
2224
import { FloatAccessor } from "../types";
2325
import { EXTENSION_NAME } from "../constants";
@@ -128,7 +130,10 @@ export class GeoArrowHeatmapLayer<
128130
recordBatchIdx < table.batches.length;
129131
recordBatchIdx++
130132
) {
131-
const geometryData = geometryColumn.data[recordBatchIdx];
133+
let geometryData = geometryColumn.data[recordBatchIdx];
134+
if (isGeomSeparate(geometryData)) {
135+
geometryData = convertStructToFixedSizeList(geometryData);
136+
}
132137
const flatCoordsData = ga.child.getPointChild(geometryData);
133138
const flatCoordinateArray = flatCoordsData.values;
134139

src/layers/path-layer.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ import {
1919
assignAccessor,
2020
extractAccessorsFromProps,
2121
getGeometryVector,
22+
getInterleavedLineString,
2223
getMultiLineStringResolvedOffsets,
2324
invertOffsets,
25+
isGeomSeparate,
2426
} from "../utils/utils";
2527
import {
2628
GeoArrowExtraPickingProps,
@@ -172,7 +174,10 @@ export class GeoArrowPathLayer<
172174
recordBatchIdx < table.batches.length;
173175
recordBatchIdx++
174176
) {
175-
const lineStringData = geometryColumn.data[recordBatchIdx];
177+
let lineStringData = geometryColumn.data[recordBatchIdx];
178+
if (isGeomSeparate(lineStringData)) {
179+
lineStringData = getInterleavedLineString(lineStringData);
180+
}
176181
const geomOffsets = lineStringData.valueOffsets;
177182
const pointData = ga.child.getLineStringChild(lineStringData);
178183
const nDim = pointData.type.listSize;
@@ -243,8 +248,11 @@ export class GeoArrowPathLayer<
243248
recordBatchIdx++
244249
) {
245250
const multiLineStringData = geometryColumn.data[recordBatchIdx];
246-
const lineStringData =
251+
let lineStringData =
247252
ga.child.getMultiLineStringChild(multiLineStringData);
253+
if (isGeomSeparate(lineStringData)) {
254+
lineStringData = getInterleavedLineString(lineStringData);
255+
}
248256
const pointData = ga.child.getLineStringChild(lineStringData);
249257
const coordData = ga.child.getPointChild(pointData);
250258

src/layers/point-cloud-layer.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ import * as arrow from "apache-arrow";
1919
import * as ga from "@geoarrow/geoarrow-js";
2020
import {
2121
assignAccessor,
22+
convertStructToFixedSizeList,
2223
extractAccessorsFromProps,
2324
getGeometryVector,
25+
isGeomSeparate,
2426
} from "../utils/utils";
2527
import {
2628
GeoArrowExtraPickingProps,
@@ -156,7 +158,10 @@ export class GeoArrowPointCloudLayer<
156158
recordBatchIdx < table.batches.length;
157159
recordBatchIdx++
158160
) {
159-
const geometryData = geometryColumn.data[recordBatchIdx];
161+
let geometryData = geometryColumn.data[recordBatchIdx];
162+
if (isGeomSeparate(geometryData)) {
163+
geometryData = convertStructToFixedSizeList(geometryData);
164+
}
160165
const flatCoordsData = ga.child.getPointChild(geometryData);
161166
const flatCoordinateArray = flatCoordsData.values;
162167

src/layers/scatterplot-layer.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@ import * as arrow from "apache-arrow";
1717
import * as ga from "@geoarrow/geoarrow-js";
1818
import {
1919
assignAccessor,
20+
convertStructToFixedSizeList,
2021
extractAccessorsFromProps,
2122
getGeometryVector,
2223
invertOffsets,
24+
isGeomSeparate,
2325
} from "../utils/utils";
2426
import {
2527
GeoArrowExtraPickingProps,
@@ -169,7 +171,10 @@ export class GeoArrowScatterplotLayer<
169171
recordBatchIdx < table.batches.length;
170172
recordBatchIdx++
171173
) {
172-
const geometryData = geometryColumn.data[recordBatchIdx];
174+
let geometryData = geometryColumn.data[recordBatchIdx];
175+
if (isGeomSeparate(geometryData)) {
176+
geometryData = convertStructToFixedSizeList(geometryData);
177+
}
173178
const flatCoordsData = ga.child.getPointChild(geometryData);
174179
const flatCoordinateArray = flatCoordsData.values;
175180

@@ -238,7 +243,10 @@ export class GeoArrowScatterplotLayer<
238243
recordBatchIdx++
239244
) {
240245
const multiPointData = geometryColumn.data[recordBatchIdx];
241-
const pointData = ga.child.getMultiPointChild(multiPointData);
246+
let pointData = ga.child.getMultiPointChild(multiPointData);
247+
if (isGeomSeparate(pointData)) {
248+
pointData = convertStructToFixedSizeList(pointData);
249+
}
242250
const geomOffsets = multiPointData.valueOffsets;
243251
const flatCoordsData = ga.child.getPointChild(pointData);
244252
const flatCoordinateArray = flatCoordsData.values;

src/layers/text-layer.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@ import * as arrow from "apache-arrow";
1717
import * as ga from "@geoarrow/geoarrow-js";
1818
import {
1919
assignAccessor,
20+
convertStructToFixedSizeList,
2021
expandArrayToCoords,
2122
extractAccessorsFromProps,
2223
getGeometryVector,
24+
isGeomSeparate,
2325
} from "../utils/utils";
2426
import {
2527
GeoArrowExtraPickingProps,
@@ -207,7 +209,10 @@ export class GeoArrowTextLayer<
207209
recordBatchIdx < table.batches.length;
208210
recordBatchIdx++
209211
) {
210-
const geometryData = geometryColumn.data[recordBatchIdx];
212+
let geometryData = geometryColumn.data[recordBatchIdx];
213+
if (isGeomSeparate(geometryData)) {
214+
geometryData = convertStructToFixedSizeList(geometryData);
215+
}
211216
const flatCoordsData = ga.child.getPointChild(geometryData);
212217
const flatCoordinateArray = flatCoordsData.values;
213218
const textData = this.props.getText.data[recordBatchIdx];

src/layers/trips-layer.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import {
1717
assignAccessor,
1818
extractAccessorsFromProps,
1919
getGeometryVector,
20+
getInterleavedLineString,
21+
isGeomSeparate,
2022
} from "../utils/utils";
2123
import { TimestampAccessor, ColorAccessor, FloatAccessor } from "../types";
2224
import {
@@ -146,7 +148,10 @@ export class GeoArrowTripsLayer<
146148
recordBatchIdx < table.batches.length;
147149
recordBatchIdx++
148150
) {
149-
const lineStringData = geometryColumn.data[recordBatchIdx];
151+
let lineStringData = geometryColumn.data[recordBatchIdx];
152+
if (isGeomSeparate(lineStringData)) {
153+
lineStringData = getInterleavedLineString(lineStringData);
154+
}
150155
const geomOffsets = lineStringData.valueOffsets;
151156
const pointData = ga.child.getLineStringChild(lineStringData);
152157
const nDim = pointData.type.listSize;

src/utils/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ export function isGeomSeparate(data: arrow.Data): boolean {
108108
* The GeoArrow spec allows for either separated or interleaved coords, but at
109109
* this time deck.gl only supports interleaved.
110110
*/
111-
function convertStructToFixedSizeList(
111+
export function convertStructToFixedSizeList(
112112
coords:
113113
| ga.data.PointData
114114
| arrow.Data<arrow.FixedSizeList<arrow.Float64>>

0 commit comments

Comments
 (0)