Google地图叠加层

时间:2008-10-06 14:33:19

标签: php javascript google-maps overlays

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

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

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

对此有任何指导或建议将不胜感激。

UPDATE 10/8/2008 - 我在这里和其他地方遇到的大部分信息似乎表明减少地图上的点数是要走的路(即从较高的高度/缩放级别观看时使用一个标记来表示几个)。虽然在某些情况下这可能是一个很好的方法,但它在这里不起作用。我们正在寻找具有数千个标记的美国地图的视觉效果。我探索过的一个选项是名为PushPin的服务,当被提供(大概)时,KML将在服务器端创建一个覆盖图,其中包含所有可见点(基于中心纬度/经度和缩放级别)因此,我们不是在客户端执行数千个DOM操作,而是将所有这些标记合并到单个图像服务器端,并在客户端执行单个DOM操作。 PushPin服务非常灵活,如果没有相关成本,肯定会有效。我们真的在寻找一些我们可以运行服务器端的F / OSS来自己生成覆盖。

5 个答案:

答案 0 :(得分:4)

您可能希望查看GeoserverMapserver之类的内容。它们是谷歌地图克隆,还有更多。

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

答案 1 :(得分:2)

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

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

  1. 确定中心和地图范围
  2. 鉴于您应该能够计算地图左上角和右下角的纬度/经度。
  3. 遍历您的积分数据库,并针对两个角检查每个位置。经度需要比左上经度更大(签名!)并且小于右下经度。纬度需要小于左上纬度(有符号!)并且大于右下纬度。只是简单的比较,这里不需要花哨的计算。
  4. 将匹配点输出到用户的临时KML。
  5. 您可以提供KML directly into Google Maps并让它进行映射,也可以使用Javascript maps API通过KML加载点数。
  6. 这可能无法解决您的确切问题,但对于相关问题,您也可以查看Google Static Maps API。这允许您创建一个带有放置标记的静态图像文件,该文件将非常快速地加载,但不具有常规Google地图的交互性。但是,由于API的设计方式,它无法处理任何接近16,000点的位置,因此您仍然需要过滤到视图。

答案 2 :(得分:1)

我不知道你的项目有多好,但也许你可以看看GeoDjango?这个修改过的Django版本包括各种存储位置的工具;转换坐标和显示地图,简单方法。当然,你需要一些Python经验和服务器来运行它,但是一旦你掌握了Django,它就能快速而且很好。

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

答案 3 :(得分:0)

这是一个艰难的。您可以使用custom tilesets with Google Maps,但仍需要某种方法来生成切片(手动除外)。

我担心这就是我所拥有的全部= /

答案 4 :(得分:0)

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