1

问题:动态聚合聚类?在平面上的点

我有几百万(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)创建的。

非问题的一部分(**):

计算所有缩放级别集群,无论 条件“全”的。这是通过创建树来完成的,并且为用户提取集群非常简单。

现在的问题:

用户可以根据标记字段查询,e.g“显示我的所有标记 其面积> K和滞后=真”。仅针对此查询,需要创建一个整体 新群集树。如果他更改查询“显示 我所有标记,他们的区域> K.0001和滞后=真”,并且新树 将不得不被创建。我不想为每个用户的查询计算这样的树 ,而不是将它存储在内存中(不知道它是否可能是 )。

问:

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

我认为很难在Hadoop MapReduce中管理所有你想要的东西。因此,对于您的数据库方法,请阅读以下内容:http://www.directionsmag.com/articles/nosql-databases-what-geospatial-users-need-to-know/164635 – 2012-07-31 09:55:01

回答

0

Hadoop适用于预处理,不适用于在线(“实时”)操作。

对于你来说,希尔伯特曲线和k-d-tree比常规网格文件/四叉树更复杂,对你来说实际上用处不大。优化树以与您的可视化缩放级别完全匹配!然后,您可能完全没有做任何“聚类”,而只是将合适的四叉树单元格可视化。

毕竟,你的空间数据只有2d,所以2d方法都能正常工作。而且你知道值的范围非常好,因为地球不会改变大小。这就是为什么Google地图速度如此之快:他们使用可以缓存的固定图块,有效地提供服务并预生成。

鉴于您可能不需要ACID和事务以及这些高级功能,使用其中一种炒作NoSQL数据库似乎是合理的。

+0

感谢您的输入,但这并未解决我的问题。原因是,我需要了解优化解决方案的混合/或明确度算法。你写了“匹配你的可视化缩放级别”,你是什么意思?请注意,我的查询是动态的(多范围+布尔值),并且每个用户每次都计算一次集群(坏)。我试图找到一种方法来使用表面填充曲线(HILBERT)的“所有结果”,并从它得到每个用户查询..或类似的东西。 – user1271518 2012-08-07 09:49:46

+0

谷歌地图查询也是动态的,但显示屏使用*预先计算的图块*。你可以随时剪辑它们。预先计算适当网格的结果,然后精确查询。比用希尔伯特曲线搞乱要快得多(这并不能真正为你节省精炼)。 – 2012-08-08 06:23:44

+0

这是不可行的,原因是:比方说,我有6个不同的范围字段(几个与unsigned int,几个浮点数)和30个来自所有EACH用户可以选择的布尔值。您的解决方案是预先计算所有可能的组合。因此,如果用户搜索区域> = 100.321和区域<= 238.4的所有结果,并且通道设置为true。对于1棵树来说,这是1个组合,对于所有组合,我会有这么大的数字,这是不可行的。 SFC只能帮助进行映射。 – user1271518 2012-08-08 08:48:21