聚类
本文档涵盖 Turf.js 中的聚类功能,它提供空间聚类算法,用于根据邻近度和密度对地理点进行分组。聚类系统包括 K-means 和 DBSCAN 算法的实现,以及通用聚类工具。
有关网格生成和空间镶嵌的信息,请参阅 Grid Generation。有关最近邻分析等统计函数,请参阅 Statistical Analysis。
概述
Turf.js 中的聚类系统由三个主要包组成,它们协同工作以提供全面的空间聚类能力:
聚类架构概述
核心聚类模块
聚类功能被组织成三个专用包,每个包服务于不同的目的:
|| 包 | 用途 | 关键依赖 | 算法类型 | || --- | --- | --- | --- | || @turf/clusters | 通用聚类工具和基础功能 | @turf/helpers, @turf/meta | 工具函数 | || @turf/clusters-kmeans | K-means 聚类实现 | skmeans, @turf/clone, @turf/invariant | 分区 | || @turf/clusters-dbscan | 基于密度的聚类 | rbush, @turf/distance | 基于密度 |
核心聚类模块依赖
K-means 聚类实现
@turf/clusters-kmeans 包使用外部 skmeans 库实现 K-means 聚类算法。该算法通过最小化簇内平方和将点划分为 k 个簇。
K-means 聚类数据流
关键依赖
- skmeans:K-means 算法的外部 JavaScript 实现
- @turf/clone:通过在修改前克隆输入要素确保不可变性
- @turf/invariant:提供输入验证和类型检查
- @turf/meta:用于迭代 GeoJSON 要素和坐标
DBSCAN 聚类实现
@turf/clusters-dbscan 包实现 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)算法,该算法基于密度对点进行分组,并可以将异常值识别为噪声。
DBSCAN 聚类算法流程
关键依赖
- rbush:R-tree 空间索引,用于密度计算期间的高效邻域查询
- @turf/distance:用于确定点邻近度的大圆距离计算
- @turf/clone:不可变操作的要素克隆
- @turf/meta:GeoJSON 要素迭代工具
通用聚类工具
@turf/clusters 包提供基础功能和工具函数,支持聚类算法。该包作为通用聚类操作的基础。
通用聚类工具架构
依赖
基础聚类包具有最小的依赖,专注于核心 Turf.js 工具:
|| 依赖 | 用途 | || --- | --- | || @turf/helpers | GeoJSON 创建和属性操作 | || @turf/meta | 要素和坐标迭代 | || @types/geojson | TypeScript 类型定义 |
外部库集成
聚类系统与专门的外部库集成,以提供稳健的算法实现:
外部库集成模式
库版本和使用
|| 库 | 版本 | 包 | 用途 | || --- | --- | --- | --- | || skmeans | 0.9.7 | @turf/clusters-kmeans | K-means 算法实现 | || rbush | ^3.0.1 | @turf/clusters-dbscan | 邻域查询的空间索引 |
两个库都由 Turf.js 模块包装,以处理 GeoJSON 坐标提取和结果格式化,确保整个聚类系统的输入/输出模式一致。