我试图看看是否有人知道如何使用数据库聚集一些Lat/Long结果,以减少通过线路发送到应用程序的结果数量.
有许多关于如何集群的资源,无论是在客户端还是在服务器(应用程序)端...但不在数据库端:(
这是 SO成员提出的类似问题.解决方案基于服务器端(即后面的C#代码).
有没有人有解决这个问题的运气或经验,但是在数据库中?是否有任何数据库大师在追求hawt和性感数据库挑战?
请帮忙 :)
编辑1:澄清 - 通过聚类,我希望将x
一个点的数量分组为一个区域.所以,如果我说集群中的所有东西都在1英里/ 1平方公里,那么'square'中的所有结果都是GROUP'D到一个结果中(比如......正方形的中间).
编辑2:我正在使用MS Sql 2008,但我很乐意听到其他数据库中是否有其他解决方案.
我可能会使用修改后的*版本的k -means聚类,使用笛卡尔坐标(例如WGS-84 ECF)坐标.它易于实现和快速融合,无论外观如何,都能适应您的数据.另外,您可以选择k以满足您的带宽要求,并且每个群集将具有相同数量的关联点(mod k).
我创建了一个聚类质心表,并在原始数据表中添加一个字段,以指示它所属的聚类.如果您的数据完全是动态的,您显然希望定期更新群集.我不知道你是否可以用存储过程和触发器做到这一点,但也许.
*"修改"是调整计算质心向量的长度,使它们位于地球表面.否则你最终得到一堆负高度的点(当转换回LLH时).
如果您在地理位置上进行聚类,而我无法想象它是什么:-),您可以将"群集ID"与纬度/经度坐标一起存储在数据库中.
我的意思是将世界地图划分为(例如)100x100矩阵(10,000个群集),并将每个坐标分配给其中一个群集.
然后,您可以通过选择相同正方形中的那些坐标来检测非常接近的坐标,并通过选择相邻正方形中的坐标来适度接近坐标.
方块的大小(以及它们的数量)将取决于您需要聚类的准确程度.显然,如果你只有一个2x2矩阵,你可以得到一些相距很远的坐标聚类.
Yo总是会有边缘情况,例如两个点靠近在一起,但在不同的集群中(集群中最北端,其中最南端),但您可以调整集群大小或在客户端对结果进行后处理.