/** * ctx.dataInViewport() — spec: "Viewport Filtering & Statistics" (#6), * scoped pragmatically for Phase 4: a per-feature bbox test against * `viewport.getBounds()`, using the layer's own compiled `getPosition` * accessor for point layers or each GeoJSON feature's own geometry * coordinates — no spatial index (kdbush/flatbush) yet, no per-layer * `featureBounds` registry descriptor. Correct for reasonable dataset * sizes; the optimization is deferred, not the correctness. */ import type { MapViewport } from "./basemap"; import type { Shape, ColumnarData } from "./ir"; export declare function filterInViewport(rows: readonly unknown[], shape: Shape, viewport: MapViewport | undefined, getPosition?: (d: unknown) => number[] | undefined): unknown[]; /** * The columnar counterpart (spec: "Columnar / GeoArrow Ingestion"). A * columnar layer's compiled `getPosition` reads `info.data.columns[...] * [info.index]`, never a row object — so filtering must run over INDICES. * The (memoized) row view is taken here, not passed in, so its index * alignment with `data` is true by construction; `rowFilter` (the * declarative filter, applied to the materialized flat row) rides the same * loop so a pre-pass can never break that alignment either. */ export declare function filterColumnarInViewport(data: ColumnarData, viewport: MapViewport | undefined, getPosition: ((d: unknown, info: { index: number; data: ColumnarData; }) => unknown) | undefined, rowFilter?: (row: unknown) => boolean): unknown[];