-3

我必须在谷歌地图上将用户显示为大头针。我从数据库中获取了用户记录,现在大约有 20,000 条。我现在正在做的是做一个 ajax 请求以从数据库中获取所有用户,一旦加载了文档并创建了地图。但问题是,当我用大约 20,000 条记录的 json 结果响应 ajax 调用时,我的浏览器卡住了。有时需要 20 分钟才能加载结果并将它们显示为谷歌地图上的图钉。我确信这是错误的方法。

谁能指导我将数据库结果加载为谷歌地图上的图钉的最佳方法。请记住,每个请求的结果集可能不同(基于登录用户的城市 - 想法是显示附近的用户)。

提前谢谢了。

4

3 回答 3

2

有这么大的数据量,尝试绘制 20,000 个图钉会很慢。

看看类似集群的东西 - http://gmaps-utility-library-dev.googlecode.com/svn/tags/markerclusterer/1.0/examples/advanced_example.html

或者,如果你只显示附近的用户,你真的有 20,000 个附近的用户吗?根据用户的当前位置缩小返回的用户列表。

于 2012-11-27T08:33:30.110 回答
1

我真的很想把它保持在 100 个引脚以下 - 对于处理能力低的设备来说,20,000 个引脚太多了。

如果您确定需要渲染所有引脚,那么您需要仔细考虑如何将信息提供给用户。您是要在页面加载时预加载所有信息,以便可以重复使用信息,还是希望在信息发生更改时重新加载信息。

无论如何,如果您以 XML 格式输出结果以供 Javascript 读取,则较小的 XML 文件会提供更快的加载时间。如果您使用的是 XML,则可以将其从...减少

<records>
    <record id="1">
        <name>blah</name>
        <longatude>blah</longatude>
        <latitude>blah</latitude>
    </record>
        <record id="2">
        <name>blah</name>
        <longatude>blah</longatude>
        <latitude>blah</latitude>
    </record>
</records>

至:

<records>
    <record id="1" n="blah" lat="bah" lon="blah" />
    <record id="2" n="blah" lat="bah" lon="blah" />
    <record id="3" n="blah" lat="bah" lon="blah" />
</records>

如果您确定所有标记都是必需的,我会使用此处提到的 Google Maps Clustering,这将减少任何时候在页面上呈现的数量。

于 2012-11-27T08:49:03.237 回答
0

我认为您可能必须避免使用客户端。我还没有尝试过,但 Fusion Table Layers 似乎是您所追求的,它将处理保留在 googles 服务器上,您可以使用类似 sql 的查询。每个表和 5 个表限制为 100,000 行。

我不确定表格的设置,但它可能是一个有趣的替代方案。

https://developers.google.com/maps/documentation/javascript/layers#FusionTables

于 2012-11-27T11:59:10.623 回答