【问题标题】:Recreating Standard Google Map embed with Google Maps API重新创建嵌入 Google Maps API 的标准 Google Map
【发布时间】:2012-06-08 09:04:34
【问题描述】:

因此,最近对常规谷歌地图“嵌入”(iframe)代码缺乏可定制性感到有些失望;我已经开始修补 Google Maps API v3。真的,我只想在地图上显示一个商家的标记,这样您就可以点击它并前往 mapsgoogle.com 上的那个“地方”。

差不多了,我只想重新创建下面 iframe 代码的功能。我花了大约一个小时阅读文档,但仅将标记与“地点”关联起来似乎非常复杂

地点

https://maps.google.com/maps?cid=1311411133662139490

标准嵌入

<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://maps.google.com/maps?cid=1311411133662139490&amp;ie=UTF8&amp;hq=&amp;hnear=&amp;t=m&amp;iwloc=A&amp;ll=41.097905,-73.405006&amp;spn=0.006295,0.006295&amp;output=embed"></iframe><br /><small><a href="https://maps.google.com/maps?cid=1311411133662139490&amp;ie=UTF8&amp;hq=&amp;hnear=&amp;t=m&amp;iwloc=A&amp;ll=41.097905,-73.405006&amp;spn=0.006295,0.006295&amp;source=embed" style="color:#0000FF;text-align:left">View Larger Map</a></small>

似乎 api 中没有使用 cid 的功能。

稍微阐述一下

一般来说,我只会将它用于小型企业网站。我对常规的 iframe 嵌入和缺乏可定制性感到沮丧。本质上,我想要一个起点,我可以从中玩东西并大量自定义外观/感觉,但无法在与“地点”数据相关联的标记中放置 - 允许小弹出窗口,等等。

老实说,在提出这个问题之前,我并没有真正做足够的研究 - 并且产生了一些误解。 我认为,我可能错了,API 仍然是我最终想要使用的,但如果我知道 Rick 的回答中的功能,我可能会解决这个问题并拖延更长时间关于学习 gmaps API。

【问题讨论】:

  • 您能否详细说明您的网络应用程序的功能应该是什么?根据我的理解,我假设你想要一张上面有标记的地图,其中包括一个 infoWindow,它的信息与 iframe 中的类似。我猜你是否点击了你希望应用程序打开的标题该位置的实际谷歌地图服务?
  • 我明白了,这确实可以通过 Google Maps API 实现。您可能必须使用谷歌地图中的其他服务,例如地理编码器服务。但这就是你必须尝试的所有东西,就像你说的,玩弄。我将把一些东西放在一个 jsFiddle 中,并给你一些资源来参考——今天的某个时候。您会发现它非常可定制,并且 API 中始终有一个选项/功能可以满足您的需求。同时,我认为这将是一个很好的起点:developers.google.com/maps/documentation/javascript/…

标签: google-maps google-maps-api-3 google-maps-markers


【解决方案1】:

请允许我解释实现目标的一种选择。我使用 Google Maps API v3 提供的标记和 infoWindow 对象,您可以在我在链接中附加的文档中找到它们。随时关注我创建的 jsFiddle:http://jsfiddle.net/bgvYH/

首先,你想用它的选项来启动你的地图——我假设你知道下面代码 sn-p 中的不同变量代表什么:

var myLatlng = new google.maps.LatLng(41.097905,-73.405006);
  var myOptions = {
  zoom: 16,
  center: myLatlng,
  mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

如果您想根据自己的喜好自定义地图,请查看您可以在 API 参考中设置的不同选项,您将在 myOptions 对象 (https://developers.google.com/maps/documentation/javascript/reference#MapOptions) 中设置这些选项。 注意:我将地图的中心设置为餐厅的纬度/经度坐标 - 我取自您在 iframe 中提供的 URL ll=41.097905,-73.405006

现在您要做的就是确定要在 infoWindow 中显示的内容,因此餐厅信息:

var contentString = "<div id='content'>";
    contentString += "<div id='title'>Mr. Frosty's Deli and Grill</div>";
    contentString += "<div id='info'><p>10 1st Street</p><p>Norwalk, CT 06855</p><p>(203) 956-5767</p><p><a href='http://thebeachburger.com/'>thebeachburger.com‎</a></p></div></div>";

未来,您甚至可能最终从数据库或 JSON 对象中提取此信息,具体取决于您对该项目的深入程度(目前我将其作为静态 HTML)。

接下来我们初始化 infoWindow 对象并将 contentString 设置为 infoWindow 的 content 选项。您可以在此处自定义其他选项(就像地图选项一样,再次查看 InfoWindowOptions 的参考:https://developers.google.com/maps/documentation/javascript/reference#InfoWindowOptions

var infowindow = new google.maps.InfoWindow({
    content: contentString
});

设置好 infoWindow 对象后,初始化标记对象 - 这会将气泡放置在地图上。再一次,您在初始化时设置标记的选项,就像您对地图对象和 infoWindow 对象所做的那样 - 您可以通过查看参考进一步根据自己的喜好自定义它(我认为那里甚至还有一个选项用于您可以在其中使用自定义图标的标记 - 您可以在这里获得非常有创意的地方)。

var marker = new google.maps.Marker({
  position: myLatlng,
  map: map,
  title:"Mr. Frosty's Deli and Grill"
});

最后,您需要将 Marker 和 infoWindow 绑定在一起 - 这样当用户单击标记时,信息就会弹出。这是通过使用事件侦听器来实现的,您可以在标记变量上侦听“单击”操作。阅读此文档以获取有关谷歌地图https://developers.google.com/maps/documentation/javascript/events 上的事件的信息。同样,请查看 API 参考,了解您可以在对象上侦听的不同事件。

google.maps.event.addListener(marker, 'click', function() {
  infowindow.open(map,marker);
});

应该这样做,您应该有一个替代您包含的 iframe 的工作 - 除了现在您可以自定义地图以及您在其上执行的操作,无论您想要什么。在 jsFiddle 中,我还添加了一些样式,只是为了让 infoWindow 中的内容看起来不错。


现在,我想让您知道 - 我相信您正在寻找另一种选择 - 但我还没有尝试过这个 API。它是您必须注册的 Google Places API。但是从我阅读的文件来看,我认为您可能能够实现您想要做的事情。看看它 (https://developers.google.com/maps/documentation/places/),看看有什么好处。

【讨论】:

  • 哇,这是一个很棒而彻底的答案!我想我什至没有时间完全完成它,直到周末。不过谢谢!
  • 这确实很奇怪,好像地图被初始化了两次。你是如何加载你的 js 脚本的?通过使用 chrome 的开发工具查看代码,我认为您使用模块 - 如果我错了,请纠正我?但是我看到您使用 HYBRID 的 MapTypeId 初始化地图的位置(这是带有街道标签的卫星图像)。但我还在文档就绪 jquery 函数中看到了对初始化函数的回调。我的猜测是摆脱该回调,而是将您的初始化函数包含在准备好的文档中。
  • 如果你不给我任何 js 来解决问题,但是通过开发工具查看 - 这是我最好的猜测。如果没有帮助,我提前道歉。
  • 啊,谢谢,非常有帮助 - 我认为当我尝试并放弃它时,有一些旧代码在浮动。很抱歉浪费您的时间
  • 不用担心,如果您在整理代码后遇到任何障碍,请随时在此处发布您的查询。
【解决方案2】:

看起来这是通过“我的地点”创建并公开的。如果您不想弄乱 API,那么这是您最好的选择。

访问 maps.google.com,点击“我的地点”和“创建地图”。自定义并获取嵌入代码。

【讨论】:

  • 哇——我不知道它的存在。这大概就是我想要的。我必须修改一下,但除非有人真的让我赞叹,否则你可能会得到他们的分数!
【解决方案3】:

如果地图不需要交互(除了点击操作),请使用a static map。它只是一个图像,因此您可以将其包裹在一个锚点中,该锚点正好指向您想要的位置。

【讨论】:

  • 感谢乍得的回复。我真的希望在地图上有红色标记的地方获得功能,用户可以点击它以显示带有电话地址和“更多信息”链接的气泡。
  • 那么信息气泡会排除静态地图。
猜你喜欢
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
  • 2011-09-05
相关资源
最近更新 更多