使用Google Maps API重新构建标准Google地图

Zac*_*bey 2 google-maps google-maps-api-3 google-maps-markers

因此,最近对于常规谷歌地图"嵌入"(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>
Run Code Online (Sandbox Code Playgroud)

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

详细说明一下

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

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

Suv*_*jah 6

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

首先,您要使用其选项启动地图 - 我将假设您知道以下代码段中的不同变量代表什么:

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);
Run Code Online (Sandbox Code Playgroud)

如果您想根据自己的喜好自定义地图,请查看可在API参考中设置的不同选项,您可以在myOptions对象中设置这些选项(https://developers.google.com/maps/documentation/javascript/reference#MapOptions).注意:我将地图的中心设置为餐厅的纬度/经度坐标 - 我从您在iframe中提供的网址中获取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>";
Run Code Online (Sandbox Code Playgroud)

您甚至可能会在将来从数据库或JSON对象中提取此信息,具体取决于您进入此项目的深度(现在我将其作为静态HTML).

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

var infowindow = new google.maps.InfoWindow({
    content: contentString
});
Run Code Online (Sandbox Code Playgroud)

设置infoWindow对象后,初始化标记对象 - 这会将气泡放置在地图上.再一次,你在初始化时设置了标记的选项,就像你使用map对象和infoWindow对象一样 - 你可以通过查看引用进一步自定义它(我认为那里甚至有一个选项)您可以使用自定义图标的标记 - 您可以在这里获得相当的创意.

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

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

google.maps.event.addListener(marker, 'click', function() {
  infowindow.open(map,marker);
});
Run Code Online (Sandbox Code Playgroud)

应该这样做,你应该有一个替代你包含的iframe的替代方案 - 除了现在你可以根据需要自定义地图和你对它执行的操作.在jsFiddle中我还包括一些样式,只是为了让在infoWindow中看起来很漂亮.


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