c# - 点聚类算法

标签 c# algorithm dictionary

是否有任何 C# 库可用于计算点簇(云?)?

我得到了一张包含 5-50k 点的 map ,需要根据缩放级别对点进行聚类 - 但我还需要一种方法来在计算聚类之前过滤掉不可见的点。

我的想法是计算 N 缩放级别/ map 比例的所有集群,并将它们拆分成一个网格。然后 map 发送一个 ajax 请求说“我在这个坐标上,这个范围, map 比例为”——服务器查询缓存中与客户端请求匹配的所有网格项目并发送响应。

这是一个可行的想法、矫枉过正,还是只是“与正常做法相去甚远”的想法之一?

最佳答案

您在这里尝试做的似乎是两件事:(1) 在给定缩放级别的情况下从给定点找到相关点,以及 (2) 在给定缩放级别时不包括靠得太近的点。

如果是这种情况,则 (1) 是微不足道的:您计算从观察点到每个点的距离。仅包括阈值距离以下的点。阈值距离是缩放级别的函数。

要执行 (2),您需要避免计算每个点到其他点的距离,因为这需要大量计算。您所做的是对步骤 (1) 中发现的点进行 Delaunay 三角剖分。然后,计算每个三角形的面积。然后,对于每个点,将其作为顶点的三角形的面积相加。按此值(总三角形面积--TTA)对点进行排序。删除所有 TTA 低于缩放级别相关阈值的点。您可以通过实验发现最佳阈值。

关于c# - 点聚类算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13043967/

相关文章:

c# - 三角形存储为数组。每层的高度和长度?

algorithm - 查找重叠集

c# - 从 Dictionary<List<enum>,string> 中查找匹配的 KVP,其中搜索键是 List<enum> 并返回反向部分匹配

swift - 使结构可哈希?

function - Scala Map,元组和函数参数列表之间的歧义

c# - 允许使用多个系统显式转换器,但不允许使用多个用户显式转换器。为什么?

c# - 在 bot 框架中的 c# bot 中查询自动完成

c# - 为属性设置默认值

algorithm - 如何有效匹配多个值

algorithm - 两个栈用一个双端队列,实现它的目的是什么?