【问题标题】:Is there no way to embed a Google Map into an HTML email?有没有办法将谷歌地图嵌入到 HTML 电子邮件中?
【发布时间】:2014-08-12 20:22:24
【问题描述】:

我已经完成了大量的research 并找到了几个“解决方案”,例如static maps API,并且只需发送一个指向 Gmap 的链接。但是,真的没有办法向某人发送 Google 地图吗?

【问题讨论】:

  • 您是指javascript地图还是地图图像?您无法在电子邮件中使用 JavaScript 地图。
  • 静态地图 API 将为我提供要嵌入的地图图像。那会很好用。但是,我说的是 HTML 电子邮件中嵌入的、真正的 iframe 地图。
  • 从服务器你可以保存地图的图像stackoverflow.com/questions/9358684/…

标签: html google-maps iframe html-email


【解决方案1】:

您自己的研究表明,大多数邮件客户端不使用 iFrame,那么您认为可以做什么?

顺便说一句,这是故意的。 iFrames 和 JavaScript 是邮件服务不想处理的安全风险。

最好的办法是获取地图的静态图像,并将其作为 HTML 电子邮件中的图像embed。在其上放置一个超链接,指向 Google 地图上的“完整”地图。

在 Gmail 中手动执行此操作:

  1. 转至http://staticmapmaker.com/google/ 或类似地址
  2. 输入位置
  3. 将地图图像复制到剪贴板并粘贴到电子邮件中
  4. 复制“带有 Google 地图链接的地图”部分中锚点的 href
  5. 选择整个图像(将光标放在图像的右侧,然后按shift + 向左箭头
  6. ctrl+k链接图片
  7. 将步骤 4 中的 url 粘贴到 Web 地址字段中

【讨论】:

  • 感谢您的回答。绝对是把这个问题带到社区的反对票……说真的。
  • 我在查找相同内容时发现了这个。我希望 Google Maps 提供此功能 - 例如:根据查询数据(lng/lat/width/height)输出静态图像。我很惊讶他们没有。
  • @hellodaniel 我相信他们确实提供了静态地图 api,它可以做类似于你描述的事情。
  • @hellodaniel: maps.googleapis.com/maps/api/…(%20 是空间的 url 编码,因此位置是“Damrak 10, Amsterdam, NL, at zoomlevel 13”)
【解决方案2】:

您可以创建静态图像映射并通过电子邮件发送,在 Perl 中进行:https://metacpan.org/pod/Geo::Google::StaticMaps::V2

或直接由 Google: https://developers.google.com/maps/documentation/static-maps/

在电子邮件的 HTML 部分应该是这样的:

<img src="http://maps.googleapis.com/maps/api/staticmap?size=800x600&maptype=hybrid&scale=2&format=png8&sensor=false&path=geodesic%3Atrue%7C-6.9325%2C+37.3916666666667%7C-6.9325%2C+37.3933333333333%7C-6.93388888888889%2C+37.3933333333333%7C-6.93388888888889%2C+37.3916666666667%7C-6.9325%2C+37.3916666666667&zoom=10" width="800" height="600"/>

我刚刚试了一下,效果很好。

示例代码:

#!/usr/bin/perl 
use strict;
use warnings;
use feature ':5.10';
use utf8;
use Geo::Converter::dms2dd qw { dms2dd };
use Geo::Google::StaticMaps::V2;
my $map = Geo::Google::StaticMaps::V2->new(
width    => 800,
height   => 600,
sensor   => 0,
scale    => 2,
zoom     => 16,
format   => "png8",
type     => "hybrid"
);

binmode(STDOUT, ":encoding(UTF-8)");
binmode(STDIN, ":encoding(UTF-8)");
$| = 1;

my %c;

$c{1} = [ '-6 55 57.00', '37 23 30.00' ];
$c{2} = [ '-6 55 57.00', '37 23 36.00' ];
$c{3} = [ '-6 56 02.00', '37 23 36.00' ];
$c{4} = [ '-6 56 02.00', '37 23 30.00' ];
$c{5} = [ '-6 55 57.00', '37 23 30.00' ];

my @location;

foreach my $key (sort keys %c) {
$c{$key}[0]  = dms2dd ({value => $c{$key}[0], is_lat => 1});
$c{$key}[1]  = dms2dd ({value => $c{$key}[1], is_lon => 1});
push(@location, "$c{$key}[0], $c{$key}[1]");
}


my $path = $map->path(locations=>[ @location ], geodesic=>1);
print $map->url;
$map->image;
$map->save("/home/data1/protected/map.png");

【讨论】:

  • @Mr. Rosario Maddox,我们可以在 Openstreat 地图中实现相同的目标吗?任何想法..?
  • 我不知道,我自己需要openstreet地图解决方案。
  • 我需要在 openstreet map 和 c#/javascript 中这样做!上面示例中介绍的这个 Google Api 不是免费的,是吗?
  • 我认为来自 Google 的静态图片是免费的,只要您显示其版权,但您可以为所欲为。
【解决方案3】:

您可以通过电子邮件将包含地图参数(Lat、Lgt.. 等)的链接发送到服务器上的 HTML 页面,该页面接受带有 REST api 的地图参数并在浏览器中显示完整地图。否则唯一的选择是使用静态地图概念。或者两者都可以使用,发送静态地图图像并在其下方发送一个指向 HTML 页面的链接,该页面接受参数,准备地图并根据用户喜好显示真实地图。

【讨论】:

    【解决方案4】:

    是的,有一种使用 php 和 javascript 的方法,您可以传递静态地图 url 并通过表单提交传递它并在电子邮件中使用

    通过javascript获取当前位置/坐标

    var latlon = position.coords.latitude + "," + position.coords.longitude; var img_url = "https://maps.googleapis.com/maps/api/staticmap?center="+latlon+"&zoom=17&size=500x250&sensor=false&key=API_KEY&maptype=roadmap&markers=icon:http://maps.google.com/mapfiles/ms/icons/red-dot.png|"+latlon;
    

    这里将值传递给输入字段

    document.getElementById("map_image").value = img_url;
    

    在表单内部输入 id=map_image 并输入 hidden 而不是提交表单并在下一页处理 post 请求

    比提交表单后的处理方式

    $map_image_url = $_POST['map_image'];
    

    您可以在电子邮件模板中将其用作 img

    $EMAILTEMPLATE .= '<img src="'.$map_image_url.'"/>';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-20
      • 2021-12-24
      • 2010-10-09
      • 2013-05-04
      • 1970-01-01
      • 2012-04-09
      • 2012-07-29
      • 1970-01-01
      相关资源
      最近更新 更多