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

标签 javascript google-maps web

我正在设计一个应用程序,它在 Google map 上显示近 5 万辆汽车,其中包含名称、号码和图片等一些详细信息。

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

我应该限制数据还是有一些变通办法?

谢谢

最佳答案

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

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

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

此外,以 JSON 格式从服务器获取 50K 数据点(你可能会得到一个包含所有数据的大 json)意味着你至少有 50k x 10 x 2 = 1,000,000 字节 =从服务器拉取的每个请求 1MB。 (每个 float 50k 点 x 10 个字节,小数点后 5 位 x 2 个数字,因为你有纬度和经度)。

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

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

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

更新:

还要考虑到随着 DOM 节点数的增加,选择器的运行速度会变慢,因为它们必须搜索许多节点。但是,如果您将标记放在一个层中并且不让选择器接触该层以免浪费时间,则可以避免速度问题。

更新#2:

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

我假设您将在服务器端使用 C++,但有 BSON implementations for many other languages

更新#3:

同时检查 mqtt protocol这是一个轻量级的传输协议(protocol)。这里有一个 Javascript 实现 MQTT.js

更新#4: 在某些情况下,某些点可能在上次更新后一直保持着它们的位置,在这种情况下,您不需要发送它们的位置。

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

关于javascript - 通过 Javascript 在谷歌地图上创建 ~50K 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15500035/

相关文章:

javascript - DataTable 1.10.10 导出到 Excel 下载 zip 文件

javascript - 如何修改 html select 以显示具有匹配数据属性的所有选项?

android - 在Android中获取可见 map 的半径

ios - IOS7如何在NSString中存储当前位置的经纬度

html - 如何在 HTML 和 CSS 中将正常(水平)和旋转的线连接到同一点?

Android 使用 BASE64 编码后使用 HTTPPOST 将数据发送到服务器

javascript - 为函数添加条件,使其仅在特定情况下运行

javascript - 使用 javascript 从 Firebase 添加地点到热图

html - 我怎样才能水平对齐链接

javascript - 使用来自 ajax 调用的数据而不使用异步 : false