【问题标题】:Google Maps Overlays谷歌地图叠加层
【发布时间】:2010-09-15 12:42:16
【问题描述】:

我正在尝试寻找可以从 KML 和/或 KMZ 数据生成 Google 地图叠加层的东西,最好是 F/OSS。

我们正在开发一个活动网站,去年需要容纳约 16,000 个地点标记,今年可能至少还会有这么多。去年,完成该网站的公司只是将 KML 数据直接提供给 gMaps API 并让它放置所有标记客户端。显然,这变成了一场性能噩梦,并倾向于使旧版浏览器“冻结”(或至少一次冻结几分钟)。

理想情况下,此服务器端脚本将采用 KML、地图的纬度/经度中心和地图缩放级别,并将所有可见的地点标记适当地合并到单个 GIF 或 PNG 叠加层中。

我们将不胜感激任何有关这方面的指导或建议。

2008 年 10 月 8 日更新 - 我在这里和其他地方遇到的大部分信息似乎表明减少地图上的点数是要走的路(即从更高的高度/缩放级别查看时,使用一个标记代表多个)。虽然在某些情况下这可能是一个好方法,但在这里行不通。我们正在寻找带有数千个标记的美国地图的视觉冲击力。我探索过的一个选项是一个名为PushPin 的服务,当输入(大概)KML 将在服务器端创建一个覆盖层,该覆盖层具有所有可见点(基于中心纬度/经度和缩放级别)呈现到单个图像,因此我们不是在客户端执行数千个 DOM 操作,而是将所有这些标记合并到单个图像服务器端并在客户端执行单个 DOM 操作。 PushPin 服务真的很灵巧,如果没有相关成本,肯定会工作。我们真的在寻找 F/OSS 的东西,我们可以运行服务器端来自己生成覆盖。

【问题讨论】:

    标签: php javascript google-maps overlays


    【解决方案1】:

    您可能想查看GeoserverMapserver 之类的内容。它们是谷歌地图的复制品,还有更多。

    您可以生成您喜欢的叠加层,Geoserver(我认为 mapserver 也可以)可以为您提供 KML、PDF、png 和其他输出来混合您的地图,或者您可以自己生成整个地图,但是这需要时间。

    【讨论】:

    • 这些看起来很有趣,我会看看它们是否适合我们的目的。
    • 我们将坚决地研究 GeoServer 和 GeoWebCache!
    【解决方案2】:

    不确定为什么要转到 GIF/PNG 叠加层,您可以直接在 KML 中执行此操作。我假设您的大部分性能问题是由用户当前视图之外的点引起的,即用户正在查看纽约,但您在洛杉矶有一些点正在浪费内存,因为它们不可见。如果您真的有 16,000 个点对于典型的一次全部可见,那么是的,您需要采用不同的策略。

    如果上述情况适用,则程序如下:

    1. 确定地图的中心和范围
    2. 鉴于您应该能够计算地图左上角和右下角的纬度/经度。
    3. 遍历您的点数据库并对照两个角检查每个位置。经度需要大于(有符号!)左上经度且小于右下经度。纬度需要小于左上纬度(有符号!)并且大于右下纬度。只是简单的比较,这里不需要花哨的计算。
    4. 将匹配点输出到用户的临时 KML。
    5. 您可以输入 KML directly into Google Maps 并让它映射它,或者您可以使用 Javascript maps API 通过 KML 加载点。

    这里可能无法解决您的确切问题,但对于相关问题,您也可以查看Google Static Maps API。这允许您创建一个带有地标的静态图像文件,该文件将非常快速地加载,但不会具有常规 Google 地图的交互性。然而,由于 API 的设计方式,它也无法处理接近 16,000 个点的任何位置,因此您仍然必须过滤到视图。

    【讨论】:

    • 计划是有一个显示完整数据集的国家级视图,所以是的,我们确实需要让所有点同时出现。我们将允许缩放,并且可以使用缩放级别视图半径,以便在用户向下钻取时使用较小的 KML 数据集,但我们需要能够显示所有数据。
    • 我会采用一种策略,即找到事件集群,您可以将其简化为国家地图上的一个图钉,然后超链接到该城市的视图。该方法类似,但您需要使用 Haversine 公式的一个版本来查找“x”英里内的点。
    【解决方案3】:

    我不知道你的项目进展如何,但也许你可以看看GeoDjango?这个修改后的 Django 版本包括各种存储位置的工具;转换坐标和显示地图,简单的方法。当然,你需要一些 Python 经验和运行它的服务器,但是一旦你掌握了 Django 的窍门,它就会运行得又快又好。

    如果您只是想要解决问题的方法,请尝试以较低的缩放级别对结果进行分组,here 是一个很好的实现示例。

    【讨论】:

    • 我不知道 Django/Python 会破坏交易,但我以前从未使用过这两种技术。根据客户的要求,该站点的核心将在 Drupal 中完成,因此 PHP 后端将是一个不错的主意。不过我会检查这个选项。
    【解决方案4】:

    这是一个艰难的过程。您可以使用custom tilesets with Google Maps,但您仍然需要一些方法来生成图块(手动除外)。

    恐怕我只有这些了=/

    【讨论】:

    • 是的,这当然是我对叠加层的想法,但我特别希望的是服务器端能够根据 KML、中心纬度/经度和缩放级别生成叠加层。
    【解决方案5】:

    OpenLayers 是一个很棒的 JavaScript 前端,可以连接多个地图服务或您自己的地图服务器。 2.7 版刚刚发布,增加了一些非常棒的功能和控件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      • 2018-12-08
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多