代码之家  ›  专栏  ›  技术社区  ›  theraccoonbear

谷歌地图覆盖图

  •  7
  • theraccoonbear  · 技术社区  · 16 年前

    我试图找到一些东西,最好是F/OSS,可以从KML和/或KMZ数据生成Google地图覆盖。

    我们有一个活动网站,我们正在努力,去年需要容纳约16000个地点标记,今年可能至少会有这么多。去年,做过这个网站的公司刚刚把KML数据直接输入gMaps API,让它把所有的markers放在客户端。很明显,这变成了性能上的噩梦,并倾向于让旧的浏览器“冻结”(或者至少一次冻结几分钟)。

    理想情况下,此服务器端脚本将采用KML、地图的lat/lon中心和地图缩放级别,并将所有可见的位置标记适当地合并到单个GIF或PNG覆盖中。

    如能就此提供任何指导或建议,我们将不胜感激。

    2008年8月10日更新 -我在这里和其他地方看到的大多数信息似乎都表明,减少地图上的点的数量是可行的(即,当从更高的高度/缩放级别查看时,使用一个标记来表示多个标记)。虽然在某些情况下这可能是个好方法,但在这里行不通。我们在寻找美国地图的视觉冲击力,地图上有上千个标记。我探索过的一种服务是 PushPin ,当fed(可能)KML将在服务器端创建一个覆盖,它将所有可见点(基于中心纬度/经纬度和缩放级别)渲染到一个图像上,因此不在客户端执行数千个DOM操作,我们将所有这些标记合并到一个图像服务器端,并在客户端执行一个DOM操作。图钉服务真的很好,如果没有相关的费用,肯定会起作用。我们真的在找什么东西 我们 可以自己运行服务器端来生成覆盖。

    5 回复  |  直到 16 年前
        1
  •  4
  •   J.J.    16 年前

    你可能想调查一下 Geoserver Mapserver . 他们是谷歌地图的克隆人,还有更多。

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

        2
  •  2
  •   Tim Farley    16 年前

    不确定为什么要转到GIF/PNG覆盖,可以直接在KML中执行此操作。我假设您的大部分性能问题是由用户当前视图之外的点引起的,即用户正在查看纽约,但您在洛杉矶的点由于不可见而浪费了内存。如果你真的有16000个点,这些点对于一个典型的人来说都是同时可见的,那么是的,你需要采取不同的策略。

    如果上述规定适用,程序如下:

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

    它可能无法解决您在这里的确切问题,但对于相关问题,您还可以查看 Google Static Maps API . 这允许您创建一个静态图像文件,上面有placemarkers,可以很快加载,但不会有普通谷歌地图的交互性。但是,由于API的设计方式,它也不能处理16000点附近的任何地方,所以您仍然需要过滤到视图。

        3
  •  1
  •   fijter    16 年前

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

    如果您只想为您的问题找到一个解决方案,请尝试在较低的缩放级别对结果进行分组,可以找到此实现的一个很好的示例 here .

        4
  •  0
  •   Peter Bailey    16 年前

    这很难。你可以用 custom tilesets with Google Maps ,但仍需要某种方法来生成平铺(而不是手动生成)。

    恐怕我只有这些了=/

        5
  •  0
  •   cstevens    16 年前

    OpenLayers 是多个映射服务或您自己的映射服务器的优秀javascript前端。2.7版刚刚发布,它增加了一些非常惊人的功能和控件。