最近应老板需求,对面状要素(polygon)根据其距离的远近进行分组/聚类,然后分析比较组间区别以及组内特征。
通过查看网上的介绍,发现对面状要素进行分组/聚类的文章或算法不太多(好吧,我承认我懒,看到比较复杂的算法脑壳就疼),但是对点要素进行聚类的算法相当成熟(K近邻、DBCSAN等等)
emm…于是,我就想能否把面状要素转为点,然后面积作为点的一个属性/权值对其进行聚类呢?
这样做肯定不精确,因为面状要素形状不规则,不同边界到其他面状要素的距离也不同。我这么做一是为了将面积加入到聚类算法中,二是为了简单起见,并不需要特别正确的对面状要素进行分组。
使用ArcGIS的Feature To Point先将面要素转为点,然后给点要素一个权重属性weight,使用字段计算器将面要素的面积赋值给相应的点,最后使用算法对其进行分组。
一开始通过ArcGIS自带的分组分析Grouping Analysis工具进行分类,使用的K近邻聚类方法,这种方法有两个不足:
1、需要指定分组数目,但是这个组的个数我们没法确定
2、当分组数目超过15组时,该工具无法对每类分组进行评估,以找到最合适的分组(虽然可以改工具的代码,调整最大分组数据,但是给我的感觉是没有理论支撑[其实是我调整了最大分组数后脚步运行有问题,懒得调代码了],先作为一个备选方式吧)
后来通过咨询同学,结合网上说的方法,决定使用DBSCAN算法(Density-Based Spatial Clustering