
一、函数概述ST_ClusterKMeans 用于将几何对象集合划分为指定数量k的聚类,使用 K 均值算法返回每个输入几何图形的簇 id 的窗口函数。该算法基于几何中心或边界框中心的距离进行聚类并支持权重和最大半径约束。特别适用于识别空间热点区域、资源分配规划和模式识别等场景。与 DBSCAN 等密度聚类不同K-means 需要预先指定聚类数量但能更均匀地划分空间数据。二、核心参数与语法结构integerST_ClusterKMeans(geometrygeom,-- 输入几何对象integernumber_of_clusters,-- 目标聚类数量(k)floatmax_radius-- 最大聚类半径约束(可选))OVER();参数说明geom输入的几何列支持点、线、面等类型。number_of_clusters目标簇的数量K 值。返回值为每行数据分配一个簇 ID整数表示其所属的聚类。三、算法核心原理1. 基础思想K-means 算法的目标是将数据点划分为K 个簇使得每个簇内数据点到簇中心的欧氏距离平方和最小。具体步骤如下初始化质心随机选择 K 个数据点作为初始簇中心。分配数据点计算每个数据点到 K 个质心的距离将其分配到最近的簇。更新质心重新计算每个簇的质心所有点的均值。迭代收敛重复分配和更新步骤直到质心不再显著变化或达到最大迭代次数。2. 距离计算方式在 PostGIS 中几何对象如点、线、面的距离计算基于其质心坐标2D 几何基于几何质心ST_Centroid的欧氏距离3D 几何基于边界框中心ST_3DCentroid的欧氏距离点数据POINT 类型支持 M 坐标作为权重值3. 最大半径约束max_radius若指定该参数算法可能生成超过 k 个聚类确保每个聚类的半径不超过设定值适用于可达性分析或服务范围约束场景四、参数调优策略1. k 值选择过小可能合并本应分离的聚类过大可能将相似区域分割成多个聚类建议方法经验法根据业务需求或领域知识预估 K 值。例如物流调度中可根据仓库数量确定簇数肘部法绘制簇内平方和WCSS随 K 值变化的曲线拐点处通常为较优的 K 值轮廓系数通过计算轮廓系数Silhouette Score评估聚类效果选择得分最高的 K 值2.最大半径约束需与数据坐标系单位一致如 WGS 84 为度UTM 为米建议先转换为投影坐标系再应用约束3. 坐标系选择平面距离如 UTM适用于局部区域分析球面距离如 SRID 4978适用于全球或大范围分析五、与 DBSCAN 的对比特性K-meansDBSCAN簇形状假设凸形状任意形状需预先指定参数K 值半径 (eps) 和最小点数 (minPts)对噪声敏感性高低空间索引需求高加速距离计算高加速邻域查询适用场景簇数已知、数据分布紧凑簇数未知、存在噪声或任意形状数据六、典型用法示例示例 1城市设施聚类规划-- 将城市划分为 K 个配送区域使每个区域的订单密度均衡-- 将订单点聚为5个簇作为配送区域SELECTorder_id,ST_ClusterKMeans(geom,5)OVER()AScluster_idFROMorders;示例 2带权重的人口聚类分析-- 基于人口密度聚类城市区域WITHpopulation_dataAS(SELECTregion_id,population,ST_SetSRID(ST_MakePoint(longitude,latitude),4326)ASgeomFROMcensus_data)SELECTregion_id,population,ST_ClusterKMeans(ST_AddMeasure(geom,population),-- 使用人口作为权重10)OVER()ASdemographic_clusterFROMpopulation_data;示例 3最大半径约束的应急响应分区-- 生成半径不超过10公里的应急响应区域WITHemergency_stationsAS(SELECTstation_id,geomFROMemergency_facilities)SELECTstation_id,ST_ClusterKMeans(geom,8,10000)OVER()ASresponse_cluster-- 10公里约束FROMemergency_stations;七、应用场景1. 城市规划设施服务区域划分如医院、学校覆盖范围商业区、住宅区等功能区识别2. 物流与配送仓库选址与配送区域优化基于需求点的配送中心聚类3. 环境监测监测站点的最优布局规划污染区域的空间聚类分析4. 公共安全应急响应区域划分犯罪热点区域识别与警力部署八、注意事项1. 算法局限性对初始中心敏感可能导致不同运行结果倾向于生成大小相近的聚类不适合处理密度差异大的数据建议使用ORDER BY确保结果确定性ST_ClusterKMeans(geom,5)OVER(ORDERBYunique_id)2. 性能优化-- 为提高性能建议在聚类字段上创建GIST索引CREATEINDEXidx_geomONyour_tableUSINGGIST(geom);3. 3D 与权重支持3D 聚类需使用含 Z 坐标的几何类型如ST_Force3D权重需通过 M 坐标设置如ST_AddMeasure九、扩展应用多维度聚类分析-- 结合空间位置和属性数据进行多维度聚类WITHmulti_dim_dataAS(SELECTfacility_id,geom,ST_AddMeasure(geom,attribute_value-- 使用属性值作为权重)ASweighted_geomFROMfacility_data)SELECTfacility_id,ST_ClusterKMeans(weighted_geom,8)OVER()ASmulti_dim_clusterFROMmulti_dim_data;通过ST_ClusterKMeans函数可有效实现空间数据的 K-means 聚类分析为地理信息决策提供支持。合理选择聚类数量和约束参数并结合空间索引优化能显著提升聚类效果和性能满足从城市规划到环境监测等多种领域的空间分析需求。