问题:
我有数百万(10+)个标记,每个标记都有不同的字段:
1. lat
2. lng
3. area (double)
4. size (int)
5. tolerance (double)
6. lags (boolean)
7. channel (boolean)
... (more)
现在,我希望每个群集都有以下聚合数据:
1. number of markers
2. min area
3. max area
4. avg area
5. min size
6. max size
7. avg size
8. tolerance distribution (how many where of tolerance < X, other >=X < Y and >=Y <Z where X,Y,Z constants)
... (more)
基于lat,lng标记(距离方式)和基于缩放级别(int)创建聚类。
无问题的部分(**):
计算所有缩放级别的聚类,无论其如何 条件“全押”。这是通过创建树来完成的,并且为用户提取集群是直截了当的。
现在问题:
用户可以根据标记字段进行查询,例如“显示所有标记” 他们的区域&gt; K和lags = true“。仅对于此查询,整体 需要创建新的集群树。如果他改变查询“显示 我所有标记他们的区域&gt; K.0001和lags = true“和新树 必须创建。我不想为这样的树计算 每个用户的查询,而不是将其存储在内存中(不确定是否是 可能的)。
问题:
What approach should be taken ?
given the complexity of calculation X # of markers
(fields inside) X speed factor.
I was thinking that there's some sort of way to use the
"all-in" clusters calculation(**), as it gives me ALL the markers and clusters and from
there to manipulate in some elegant way.
威尔:
- space-filling-curve (hilbert) can help? how?
- DB approach (what DBand why?)
- k-d tree ?
整个想法是预先处理大量数据和计算,这样用户就可以在不需要计算它或服务器端的情况下对其进行操作(因此客户端聚类不是解决方案,融合表为孔)
非常欢迎代码示例
谢谢。
答案 0 :(得分:0)
Hadoop适用于预处理,而不适用于在线(“实时”)操作。
希尔伯特曲线和k-d树比常规网格文件/四叉树更复杂,实际上对你没那么有用。优化树以完全匹配您的可视化缩放级别!然后你可以在没有做任何“聚类”的情况下离开,但只是想象出合适的四叉树细胞。
毕竟,你的空间数据只有2d,所以所有的2d方法都可以正常工作。你知道价值范围非常好,因为地球不会改变大小。这就是为什么谷歌地图这么快:它们使用固定的磁贴,它们可以缓存,有效地提供服务并预生成。
鉴于您可能不需要ACID和事务以及这些高级功能,使用其中一个大肆宣传的NoSQL数据库似乎是合理的。