Google maps API v3 - 多个标记,每个标记都带有自定义网址链接+自定义图标

时间:2013-12-11 16:05:10

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

第一次尝试使用Google的地图API构建地图并遇到障碍。

我正在尝试制作一张自定义地图:

  • 多个位置标记

  • 标记的自定义图标

  • 每个标记的自定义网址链接,以便每当有人点击标记时,都会转到网址链接

该地图适用于在伦敦Soho拥有几个办事处的客户。我一直在谷歌的操场上测试各种代码+使用w3学校代码测试器。我一直在寻找如何设置我的地图的各种元素的例子,这些元素在逐一进行时都可以正常工作。

然而,似乎我想要结合地图的所有功能,代码需要以不同的方式设置。

这是我到目前为止所拥有的:

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>Google Maps Multiple Markers</title>
<script src="http://maps.google.com/maps/api/js?sensor=false"></script>
</head>
<body>
<div id="map" style="width: 100%; height: 300px;"></div>

<script type="text/javascript">
var locations = [
  ['56-58 Broadwick Street', 51.5053, -0.1481, 5],
  ['79 Wardour Street', 51.512370, -0.133300, 3],
];

var map = new google.maps.Map(document.getElementById('map'), {
  zoom: 14,
  center: new google.maps.LatLng(51.5132695,-0.1356768),
  mapTypeId: google.maps.MapTypeId.ROADMAP
});

var infowindow = new google.maps.InfoWindow();

var marker, i;
var markers = new Array();

for (i = 0; i < locations.length; i++) {
  marker = new google.maps.Marker({
    position: new google.maps.LatLng(locations[i][1], locations[i][2]),
    map: map
  });

  markers.push(marker);

  google.maps.event.addListener(marker, 'click', (function(marker, i) {
    return function() {
      infowindow.setContent(locations[i][0]);
      infowindow.open(map, marker);
    }
  })(marker, i));
}

function AutoCenter() {
  //  Create a new viewpoint bound
  var bounds = new google.maps.LatLngBounds();
  //  Go through each...
  $.each(markers, function (index, marker) {
  bounds.extend(marker.position);
  });
  //  Fit these bounds to the map
  map.fitBounds(bounds);
}
AutoCenter();

</script>
</body>

我们的想法是var位置将是我的客户拥有的各个办公地点。这些办公地点标记中的每一个都将链接到相关的办公室页面。

很抱歉不得不问你们,但是有人能引导我朝着正确的方向前进吗?我想我可以将所有代码拼凑在一起,但似乎我想要将所有3个功能组合在一起,代码设置不同。

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

对于初学者而言,不要将JS放在文档正文中,而是将其移到头部。

为窗口加载时添加一个事件监听器,以调用创建映射的初始化函数:

google.maps.event.addDomListener(window, 'load', initialize);

将所有当前不在任何函数中的JS移动到该初始化函数中。

我不确定您的AutoCenter功能的重点。如果只是为了使地图展开以适应标记的边界,也可以将其放入初始化函数中。

此外,这可能仅仅是某些数据的示例,而不是您实际执行的操作,但在最后一项之后使用尾随逗号会导致此数组在IE中出错:

var locations = [
  ['56-58 Broadwick Street', 51.5053, -0.1481, 5],
  ['79 Wardour Street', 51.512370, -0.133300, 3],
];