【发布时间】:2013-04-24 03:09:40
【问题描述】:
我一直在努力解决 1000 多个标记(应该放在谷歌地图上)的标记聚类问题。我不太热衷于使用所有标记渲染大型 JSON 结构,也不喜欢使用 PostGIS 进行一些复杂的服务器“地理”计算。
我想出的解决方案是将世界地图划分为某种分层空间树,比如说quad tree,我的数据库中的每个点都将在该树中分配有“坐标”。这些坐标是具有on position_x index_of_tile in tier_x 的字符串,例如'031232320012'。字符串的长度取决于将为前端地图启用的缩放级别数。基本上,如果用户移动或缩放地图,我将使用当前缩放级别和视口坐标作为参数启动 Ajax GET 请求。然后在后端我计划构建一个应该指向“给定缩放级别的视口”的字符串,例如'02113',我想在树坐标列中找到所有具有此前缀('02113')的点。
编辑:我还需要快速 GROUP BY,例如SELECT count(*) from points GROUP BY left(coordinates, 5);
我的问题是如何尽可能快地执行这些操作?我的数据库是 PostgreSQL。
【问题讨论】:
-
我会再看看你是否更好地使用 PostgreSQL 的地理支持。您不必全力以赴使用 PostGIS。您可以在最近的版本中对边界框甚至最近邻测试进行索引。如果做不到这一点,下面迈克的回答看起来不错。
标签: postgresql marker hierarchical-clustering quadtree