位置数据存储(点,按距离分组等) - 最佳实践和推荐的解决方案

时间:2012-02-06 20:43:46

标签: sql database google-maps gis geospatial

我遇到过一个我以前从未解决的问题,但我发现它经常在各种应用程序中实现,所以我想问一下是否有一种常用的解决方法。我有一组分析数据,每个数据代表一些记录操作(即信息,警告等)。这些项目中的每一个都具有位置和类型(即动作)。每个区域可能有数百万这些项目(取决于区域大小或地图缩放)。

我正在寻找在我的数据库中存储这组数据的最佳方法。我对SQL Server非常满意,但是不介意我必须使用什么数据库,只要它能够处理可扩展性要求。如果Amazon WS提供此类产品或其他云解决方案,那么更好地导致我们计划如何托管此应用程序。谷歌地图将用于可视化数据。

一些要求:

  1. 能够绘制给定地图矩形的所有数据(常见的谷歌 带有表示日志记录操作的标记的map接口)
  2. 能够放大/缩小并获取新地图矩形的相关数据
  3. 如果数据非常接近,则能够在一个较大的标记中“分组”标记。例如,如果A点距离B点1公里,我看到的是半径10公里的地图,那么我应该看到两个独立点A和B.但是如果我缩小到500公里半径,那么A点和B点都是太靠近了,所以我想把它们分成一个标记。希望这是可能的。
  4. 如果SQL Server不是一个好的解决方案,那么应该推荐免费的,非常便宜的或基于云的存储解决方案(不能让我买不起Oracle)。
  5. 上面的所有查询都应该能够在几毫秒内恢复或以某种方式缓存。查询将是那种类型:通过缩放给定的矩形纬度/经度,获取给定地图窗口的所有分析数据。

    谢谢, 雅尼斯

1 个答案:

答案 0 :(得分:1)

如果我认真对待,你的问题有两个方面:

1-数据库系统,支持存储和查找空间数据。许多免费/开源RDBMS都具有空间扩展:MySQL和Postgres(PostGIS)。空间数据与任何其他数据一样存储,并添加了空间几何属性,该属性描述了数据实例的形状(点,矩形,多边形,椭圆......)。您可以使用空间过滤器查询空间数据实体。当然,空间查询支持关节和联合以及几乎所有类型的SQL结构。

2-客户端/服务器api,支持渲染空间数据(具有常规功能,如放大,缩小,平移等),缓存和向下钻取。据我所知,没有一个api可以一起支持所有这些功能。但是您可能需要调查一些有趣的apis

希望这有帮助。