通过Javascript在谷歌地图上创建~50K对象

时间:2013-03-19 12:51:28

标签: javascript google-maps web

我正在设计一个应用程序,该应用程序几乎在谷歌地图上显示 50K汽车,其中包含名称,数量和图片等详细信息。

我想知道这样做的最佳做法是什么。有些人建议制作原生移动应用或桌面应用,但我需要一个可以在网络浏览器上运行的 Web App 。数据将以 JSON 格式直接从服务器提取。

我应该限制数据还是有一些解决方法?

由于

3 个答案:

答案 0 :(得分:3)

正如评论中所建议的那样,最好制作想要显示的50K数据点的聚类。

即使在24英寸1920x1080显示屏上看到50K数据点,也意味着每个显示器大约有41个像素,这意味着每个都有6x6像素的正方形,它们会填满你的所有屏幕。

很明显,你会有很多重叠。

此外,从JSON中的服务器获取50K数据点(并且你可能会得到一个包含所有这些数据的大json)将意味着你至少有50k x 10 x 2 = 1,000,000字节=每个请求从服务器提取1MB。 (50k点x每个浮点数10个字节,5个小数×2个数字,因为你有lat和long)。

因此,如果您希望这是实时的,您可能需要每2秒左右发出一次这些请求。

此外,并非所有这些都适合视口,因此您必须排除那些不在视口中的视频,因为它们无论如何都不会显示。所以服务器应该知道客户端使用什么样的显示(分辨率)。

我认为最好的方法是在服务器端编写一些集群逻辑,让客户端处理更少的数据点。 (我在这里聚类的意思是,多个点得到grouped together,当放大时,它们start unfolding成为不同的组)

<强>更新

另外请注意,随着DOM节点数量的增加,选择器将运行得更慢,因为它们必须搜索许多节点。但是如果你将标记放在一个图层中并且不让选择器接触那个图层,那么你可以避免速度问题。所以它们不会浪费时间。

更新#2

要有效地发送数据,您可以使用BSON然后zip对其进行编码,然后将其传递到客户端,您可以使用zlib.js解压缩并使用{{3}阅读它。

我假设您将在服务器端使用C ++,但也有BSON

更新#3

同时检查BSON implementations for many other languages这是一种轻量级传输协议。它在这里有一个Javascript实现mqtt protocol

更新#4 : 在某些情况下,自上次更新以来,某些点可能保持其位置,在这种情况下,您不需要发送其位置。

同样,根据点的速度和缩放级别,可能会有一些点 看起来好像他们根本没有移动(如果你是从很远的地方查看它们),所以你可能不想每次都发送这些点的位置。 所以只发送会改变客户端显示位置的那些 会有意义(因为其他的看起来是静态的,虽然它们不是)。

答案 1 :(得分:0)

恕我直言,如此大量的对象的最佳方式是使用光栅的服务器端渲染。

答案 2 :(得分:0)

一次获取所有数据,但只绘制视口或视口附近的标记。 ;)