maps.google.com如何有效地选择和呈现搜索结果标记?

时间:2010-08-19 13:33:16

标签: google-maps

我最近一直在研究在地图上显示大量标记的多种方法,并认为Google必须有一个非常有效的解决方案来解决这个问题(除了拥有庞大的服务器!)。如果您在地图搜索栏中键入“住宿”,地图会显示大约100个左右的点(无论缩放级别如何),当您放大特定区域时会显示更多的点。但是,必须有数百万个点属于“调节”搜索标签,因此正在进行大量的标记选择。

我猜他们必须使用getBounds方法在用户放大/移动时过滤标记,然后可能从这些标记中随机选择。然而,这听起来可能效率低下,因为整个数据库必须被拖网才能只选择落在地图范围内的那些点。它是否只是拥有巨大的计算能力使谷歌地图如此之快(大部分时间......)?或者除了上面详述的方法之外,还有更有效的方法来进行这种类型的数据库查询吗?

我正在构建一个Rails / Google Maps应用程序,我希望能够扩展到超过一百万个点 - 我绝对不想一次显示所有点数,但我想开发一个快速搜索算法,在服务器上不会产生巨大的负担,允许在任何时候在地图上呈现(相对较小的)点数,这与谷歌的做法类似。任何建议都将非常感谢!

3 个答案:

答案 0 :(得分:1)

问题可以分为两部分:
1.如何选择要显示的点 2.如何快速显示所选点。

可以使用多种不同的政策进行选择,例如,对于拥有用户评分的酒店,您可以先选择评分最高的政策。或者谷歌可能会因为优先考虑其他问题而获得报酬。但很可能这不是实时做的!! (只是猜测这个)

通过预制定制瓷砖实现快速显示。小红点不是javascript标记对象,而是自定义图块,如下所示:

http://mt3.google.com/mapslt?lyrs=lmq:1000:hotel|cc:US|h:18b|s:115968771510351694523,m%40130&x=2&y=5&z=4&w=256&h=256&hl=en&style=18,28

这些磁贴定期创建(例如每天一次或每周一次)并保存,因此它们是服务器缓存的并且可以使用。鼠标悬停和点击功能可以通过ajax调用来实现,该调用仅搜索仅包含与已经选择并在图块上绘制的点相对应的记录的小表。每次创建新的tileset时,这些小表都会更新。

答案 1 :(得分:0)

索尼娅,明天,下周或下个月的同样搜索会产生不同的分数。 谷歌用1百万结果做的是随机拉出那个大数字中的1000。 因此,您可以在查询中对点进行“随机抽样”。

答案 2 :(得分:0)

您需要对数据进行空间索引。 SQL Server 2008内置了此功能。如果您的数据库没有,那么您需要从坐标和索引生成“tile number”。例如,对于1平方公里内的每个点,您的图块编号应该是唯一的。您可以使用图块编号搜索视图当前显示的图块,并且您应该进行有效的搜索。