【问题标题】:Google Maps image?谷歌地图图片?
【发布时间】:2009-07-17 11:58:08
【问题描述】:

有什么方法可以捕捉 Google 地图的图像吗? 我不能使用静态地图,因为我在地图中有自己的折线,我希望它们出现在“屏幕截图”中。

基本上,我希望用户导航地图,添加一些折线,当他单击“保存”时,我正在保存线、坐标、缩放,但我还希望在列表中以缩略图的形式显示图像。

Tks 提前。

【问题讨论】:

  • 我刚发现静态地图也可以画线。积分通过 URL 发送。例如。 maps.google.com/… 这仍然不是一个解决方案,因为如果我有 50 个点要画成线,我会得到一个不被接受的巨大 URL。还有其他想法吗?
  • 静态地图上的 50 个点并不是很多。你有 8K 在那个 URL 上玩,所以发疯!

标签: image google-maps


【解决方案1】:

Masashi Katsumata 提出了一个Snapshot Control,它可以拍摄一张带有路径的 Google 地图的快照,并从中创建一张图像。

【讨论】:

  • 我认为这是解决问题的“官方”解决方案。
  • 虽然它可以让他轻松导出多边形,但它仍然使用静态地图api。如果你想要绘制时的地图,保存画布也是一种有效的方法(见我的回答)
【解决方案2】:

在服务之外使用 Google 地图内容违反了 Google 地图 API 使用条款,因此尽管存在用于创建快照的技术,但 Google 并未授予您这样做的权限。

为了合法地实现您的预​​期功能,您需要使用静态地图(可能会减少内容,特别是如果用户使用最大 URL 长度非常小的 MSIE)或小型真实 Google 地图。

我似乎还没有权限在问题中添加或编辑 cmets,因此我将在此提及,至少在某些与地图兼容的 MSIE 版本中,URL 限制为 2083 个字符,而不是 8k大多数其他浏览器。

【讨论】:

  • 如果用户首先使用真正的谷歌地图来生成屏幕截图,这并不是问题。
  • 如果 URL 超过 2048 个字符的 URL 大小限制,您将从 Google 服务器收到 400 错误。您使用哪种浏览器并不重要。
【解决方案3】:

如果您想保存超过 google maps 静态 API 允许的内容(例如在其上绘制的自定义叠加层过于复杂/太大而无法通过查询字符串),您可以使用 html2Canvas 之类的东西将地图容器导出到画布(@987654321 @),然后将其转换为数据 URL 并根据需要进行处理。

function saveMapToDataUrl() {

    var element = $("#mapDiv");

    html2canvas(element, {
        useCORS: true,
        onrendered: function(canvas) {
            var dataUrl= canvas.toDataURL("image/png");

            // DO SOMETHING WITH THE DATAURL
            // Eg. write it to the page
            document.write('<img src="' + dataUrl + '"/>');
        }
    });
}

我认为您需要将 useCORS 选项设置为 true 以允许该功能从 google 下载图像。

这种方法的缺点是它可能会在您的页面上留下大约 1 兆字节的数据。

我尝试使用这种方法将地图导出到要下载的图像,但在如何将这张图像提供给漂亮庄园的人时遇到了问题。您可以使用将其 href 属性设置为您创建的 dataUrl 的超链接,但除非您使用像 download="filename.png" 这样的 HTML 属性,否则无法设置文件名,这对我来说在不同的浏览器上一直存在问题。另一种方法是将 dataUrl 发布到服务器,然后服务器按照需要发送出去,但是上传大图像只是为了再次下载它似乎是一种奇怪的处理方式。

【讨论】:

  • 感谢 useCORS 选项,正在使用相同的 html2canvas 库,但地图图像无法正常显示,使用 useCORS 选项可以正常显示
【解决方案4】:

您可以使用 ThinkGeo 地图套件。它们支持从 Google、Yahoo 或 MS 地图服务渲染图像,而您可以在该地图上绘制折线等...

使用他们的 Map Suite V3 是小菜一碟

【讨论】:

  • 去看看。 Tks 给小费。
【解决方案5】:

Google 的 API 不提供此功能。但是,有一些脚本可以从页面中抓取这些信息。以下站点有一个 PHP 脚本可以执行此操作:

http://groups.google.co.uk/group/Google-Maps-API/browse_frm/thread/e9696444518ac079?hl=en

请参阅最后的帖子。

【讨论】:

    【解决方案6】:

    如上所述,地图 API 无法做到这一点,但 Yahoo 提供了一个,而且使用起来非常轻松。

    Yahoo: Map Image API

    【讨论】:

    • 服务已于 2011 年 9 月 13 日移除
    猜你喜欢
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多