当前位置:  开发笔记 > 编程语言 > 正文

在数据库中聚类Lat/Longs

如何解决《在数据库中聚类Lat/Longs》经验,为你挑选了2个好方法。

我试图看看是否有人知道如何使用数据库聚集一些Lat/Long结果,以减少通过线路发送到应用程序的结果数量.

有许多关于如何集群的资源,无论是在客户端还是在服务器(应用程序)端...但不在数据库端:(

这是 SO成员提出的类似问题.解决方案基于服务器端(即后面的C#代码).

有没有人有解决这个问题的运气或经验,但是在数据库中?是否有任何数据库大师在追求hawt和性感数据库挑战?

请帮忙 :)

编辑1:澄清 - 通过聚类,我希望将x一个点的数量分组为一个区域.所以,如果我说集群中的所有东西都在1英里/ 1平方公里,那么'square'中的所有结果都是GROUP'D到一个结果中(比如......正方形的中间).

编辑2:我正在使用MS Sql 2008,但我很乐意听到其他数据库中是否有其他解决方案.



1> Drew Hall..:

我可能会使用修改后的*版本的k -means聚类,使用笛卡尔坐标(例如WGS-84 ECF)坐标.它易于实现和快速融合,无论外观如何,都能适应您的数据.另外,您可以选择k以满足您的带宽要求,并且每个群集将具有相同数量的关联点(mod k).

我创建了一个聚类质心表,并在原始数据表中添加一个字段,以指示它所属的聚类.如果您的数据完全是动态的,您显然希望定期更新群集.我不知道你是否可以用存储过程和触发器做到这一点,但也许.

*"修改"是调整计算质心向量的长度,使它们位于地球表面.否则你最终得到一堆负高度的点(当转换回LLH时).



2> paxdiablo..:

如果您在地理位置上进行聚类,而我无法想象它是什么:-),您可以将"群集ID"与纬度/经度坐标一起存储在数据库中.

我的意思是将世界地图划分为(例如)100x100矩阵(10,000个群集),并将每个坐标分配给其中一个群集.

然后,您可以通过选择相同正方形中的那些坐标来检测非常接近的坐标,并通过选择相邻正方形中的坐标来适度接近坐标.

方块的大小(以及它们的数量)将取决于您需要聚类的准确程度.显然,如果你只有一个2x2矩阵,你可以得到一些相距很远的坐标聚类.

Yo总是会有边缘情况,例如两个点靠近在一起,但在不同的集群中(集群中最北端,其中最南端),但您可以调整集群大小在客户端对结果进行后处理.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有