ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Kepler.gl 数据容器升级指南:从 `allData` 二维数组迁移到 `DataContainerInterface`

Kepler.gl 数据容器升级指南:从 `allData` 二维数组迁移到 `DataContainerInterface` 数据可视化数据分析【免费下载链接】kepler.glKepler.gl is a powerful open source geospatial analysis tool for large-scale data sets.项目地址https://gitcode.com/gh_mirrors/ke/kepler.gl点击查看免费下载Kepler.gl 在数据层架构上完成了一次重要演进KeplerTable不再直接持有allData: any[][]二维数组而是通过统一的DataContainerInterface数据容器接口来存取数据从而在保持既有图层、过滤与交互能力的同时为 Arrow、DuckDB 等列式数据源铺平了道路。本文以仓库内 src/table/UPGRADE-data-container.md 为骨架结合 kepler-table.ts、data-container-interface.ts 等源码逐文件说明升级点、接口语义与典型迁移写法帮助使用自定义图层、处理器或访问器的开发者平滑完成迁移。一、升级背景为什么要引入 Data Container本次升级的核心变更只有一句话KeplerTable.allData: any[][]被替换为KeplerTable.dataContainer: DataContainerInterface。在旧架构中KeplerTable内部维护一个二维数组allData所有图层、过滤器和数据处理器都直接按row[fieldIdx]方式读取单元格。在新架构中行数据不再以“数组拷贝”的形式暴露而是通过数据容器按需读取。从源码结构看这一变更的直接证据位于 kepler-table.tsKeplerTable类声明了dataContainer: DataContainerInterface字段并通过get length()返回this.dataContainer.numRows()行数、取值、索引等所有数据访问都转交给容器完成。KeplerTable的importData/updateSchema方法也统一通过createDataContainer(data, {fields, arrowTable, inputDataFormat})构造容器见 kepler-table.ts。数据容器体系由>// 旧写法示意accessor config row row[fieldIdx]新式访问器采用柯里化结构先接收数据容器dc再接收包含行索引的对象dconst pointPosAccessor config dc d { // d 形如 {index: number}通过容器按需取值 return dc.valueAt(d.index, fieldIdx); };注意这里d不是行数组而是{index}对象。访问器内部应通过dc.valueAt(d.index, fieldIdx)或封装好的Field.valueAccessor({index})取值。这一设计保证了访问器不依赖具体存储布局行式 / 列式也便于在mapIndex这类只传索引的遍历中复用。4.2Field.valueAccessor与getValue在 kepler-table.ts 中getFieldValueAccessor(f, i, dc)为每个字段绑定数据容器返回的访问器接收{index: number} | any[]参数// kepler-table.ts 中访问器的生成逻辑节选 return readFieldValue.bind(null, i, dc); // readFieldValue: Array.isArray(d) ? d[fieldIdx] : dc.valueAt(d.index, fieldIdx)也就是说Field.valueAccessor现在同时兼容{index}对象与物化行数组后者用于 trip 图层等需要悬停物化信息的场景。相应地KeplerTable.getValue(columnName, rowIdx)内部通过field.valueAccessor({index: rowIdx})取值见 kepler-table.ts。如果你的自定义代码直接调用field.valueAccessor(row)请改为field.valueAccessor({index: rowIndex})。4.3 过滤器管道getFilterFunction与filterDataByFilterTypes过滤逻辑集中在 filter-utils.ts。升级后getFilterFunction(field, dataId, filter, layers, dataContainer)新增第 5 个参数dataContainer且返回的谓词函数第 1 个参数变为{index}对象filterDataByFilterTypes({dynamicDomainFilters, cpuFilters, filterFuncs}, dataContainer)的第 2 个参数为DataContainerInterface域计算函数getNumericFieldDomain(dataContainer, valueAccessor)、getTimestampFieldDomain(dataContainer, valueAccessor)以及>// dc (getIndex, getData) d {...} const gpuFilterProps getGpuFilterProps(filters, dataId, fields, prevGpuFilter); // 之后gpuFilterProps.filterValueAccessor(dc)(getIndex, getData)(d, {index})KeplerTable中的GpuFilter类型kepler-table.ts完整描述了这一签名filterValueAccessor: (dc) (getIndex?, getData?) (d, objectInfo?) (number | number[])[]。GPU 过滤通过把过滤范围与取值访问器下发到 GPU 侧完成大规模数据的快速过滤升级后访问器必须能从dc读取值。4.5 地理数据工具mapbox-utils.ts 的geoJsonFromData()不再接收allDatagetGeometry、getProperties两个回调的参数改为{index}对象内部通过数据容器取值geojson-utils.ts 的getGeojsonDataMaps(dataContainer, ...)第 1 个参数为容器trip-utils.ts 的isTripGeoJsonField(dataContainer, field)第 1 个参数为容器h3 相关isHexField/getHexFields也按清单新增容器参数。4.6 数据与交互工具kepler-table.ts 中maybeToDate(isTime, fieldIdx, format, dc, d)新增第 4 个参数DataContainerInterface用于在过滤 / 排序时将时间字符串按格式转换为 Unix 毫秒interaction-utils中getTooltipDisplayValue/getTooltipDisplayDeltaValue的参数类型改为DataRow即悬停信息的数据载体从“数组”变为“行对象”需要改用row.valueAt(columnIndex)或row.values()读取见>赞分享数据可视化数据分析【免费下载链接】kepler.glKepler.gl is a powerful open source geospatial analysis tool for large-scale data sets.项目地址https://gitcode.com/gh_mirrors/ke/kepler.gl点击查看免费下载相关推荐CANN/ops-tensor Block Epilogue 基础框架Block Epilogue 基础框架 公共接口说明 概述 Block 层后处理组件用于矩阵乘计算后的额外处理。不同实现Empty、StreamK提供不同算子库人工智能高性能计算CANNAscendOpenProject 运维迁移指南从打包安装到 Docker Compose、PostgreSQL 升级与旧数据迁移实战OpenProject 运维迁移指南从打包安装到 Docker Compose、PostgreSQL 升级与旧数据迁移实战 OpenProject 作为开源项后端前端项目管理企业应用协同办公Meetily升级指南从v0.0.4到v0.0.5数据迁移教程Meetily升级指南从v0.0.4到v0.0.5数据迁移教程 前言为什么这次升级至关重要 你是否曾因软件升级导致重要会议记录丢失根据Meetily用户人工智能AI 应用语音本地部署桌面应用上一篇推荐项目Django-HTMX - 为你的Django应用注入现代Web魔力下一篇auto-save.nvim完全配置教程从基础设置到高级自定义打造你的专属自动保存体验创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表