单击按钮后在GoogleMaps上显示一个点

时间:2018-11-10 13:11:20

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

我有很多标记的Google地图。 这是我的代码:

<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6 padding_all_2">
<a href ="#" class="obj-1" id="obj-1"><div class="apartament_atrakcje">Atrakcja 1 pl</div></a>
</div>
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6 padding_all_2">
<a href ="#" class="obj-2" id="obj-2"><div class="apartament_atrakcje">Atrakcja 2 PL</div></a>
</div>




<div id="map_canvas"></div>

<script>
  window.onload = function () {
      var styles = [{"featureType":"all"}];
      var bounds = new google.maps.LatLngBounds();
      var options = {
          mapTypeControlOptions: {
              mapTypeIds: ['Styled']
          },
          center: new google.maps.LatLng(11, 22),
          zoom: 15,
          disableDefaultUI: true,
          mapTypeId: 'Styled'
      };
      marker = new google.maps.Marker({
          map:map,
      });
      var div = document.getElementById('map_canvas');
      var map = new google.maps.Map(div, options);
      var styledMapType = new google.maps.StyledMapType(styles, { name: 'Styled' });


      var markers = [
   ['Atrakcja 1 pl', 51.73925413, 19.51309225, 'Atrakcja 1 pl', '#', 'poi.png'],
   ['Atrakcja 2 PL', 53.41475000, 14.60220358, 'Atrakcja 2 PL', '#', 'poi.png'],
   ['Biskupia', 51.93780943, 15.52505514, 'Biskupia', '#', 'poi2.png']
      ];
      var infoWindow= new google.maps.InfoWindow({maxWidth:600}),
          marker, i,
          image = 'http://localhost/apartamenty/assets/poi.png';

      for( i = 0; i < markers.length; i++ ) {
          var beach = markers[i];
          var position = new google.maps.LatLng(beach[1], beach[2]);
          bounds.extend(position);
          marker = new google.maps.Marker({
              position: position,
              map: map,
              icon: 'http://localhost/apartamenty/assets/' + beach[5],
              title: beach[0],
              myurl: beach[4]
          });

          google.maps.event.addListener(marker, 'click', (function(marker, i) {
              return function() {
 infoWindow.setContent('<a href="'+marker['myurl']+'">'+marker['title']+'</a>');
 infoWindow.open(map, marker);
              }
          })(marker, i));
          map.fitBounds(bounds);
          map.mapTypes.set('Styled', styledMapType);

      }
  }
               </script>

我有一张地图及其上的标记。没关系!

在单击链接obj-1或obj-2之后,我要:

- center the map on this one, selected marker 
- display the marker of this marker

如果用户单击链接“ Atrakcja 1 pl”,则地图将以标题为Atrakcja 1 pll的标记居中,并且其提示将可见。

有人知道如何在我的代码中做到这一点吗?

1 个答案:

答案 0 :(得分:0)

一种选择是将对标记的引用保留在数组中,并将DOM单击侦听器添加到“链接”以打开标记的信息窗口,并将地图置于该标记的中心。

  1. 创建一个标记数组:
var gmarkers=[];

for (i = 0; i < markers.length; i++) {
  var beach = markers[i];
  var position = new google.maps.LatLng(beach[1], beach[2]);
  bounds.extend(position);
  marker = new google.maps.Marker({
    position: position,
    map: map,
    // icon: 'http://localhost/apartamenty/assets/' + beach[5],
    title: beach[0],
    myurl: beach[4]
  });
  gmarkers.push(marker);
  // ...
  1. 将点击侦听器添加到您的“链接”,以打开该标记的InfoWindow并将地图居中放置其位置:
  if (document.getElementById('obj-'+(i+1))) {
     // relies on the naming convention in your posted code
     google.maps.event.addDomListener(document.getElementById('obj-'+(i+1)), 'click', function(i) {
     return function() {
        google.maps.event.trigger(gmarkers[i], 'click');
        map.setCenter(gmarkers[i].getPosition());
     }}(i))
  }

proof of concept fiddle

代码段:

html,
body,
#map_canvas {
  height: 90%;
  width: 100%;
  padding: 0px;
  margin: 0px;
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6 padding_all_2">
  <a href="#" class="obj-1" id="obj-1">
    <div class="apartament_atrakcje">Atrakcja 1 pl</div>
  </a>
</div>
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6 padding_all_2">
  <a href="#" class="obj-2" id="obj-2">
    <div class="apartament_atrakcje">Atrakcja 2 PL</div>
  </a>
</div>
<div id="map_canvas"></div>
<script>
  window.onload = function() {
    var styles = [{
      "featureType": "all"
    }];
    var gmarkers = [];
    var bounds = new google.maps.LatLngBounds();
    var options = {
      mapTypeControlOptions: {
        mapTypeIds: ['Styled']
      },
      center: new google.maps.LatLng(11, 22),
      zoom: 15,
      disableDefaultUI: true,
      mapTypeId: 'Styled'
    };
    marker = new google.maps.Marker({
      map: map,
    });
    var div = document.getElementById('map_canvas');
    var map = new google.maps.Map(div, options);
    var styledMapType = new google.maps.StyledMapType(styles, {
      name: 'Styled'
    });

    var markers = [
      ['Atrakcja 1 pl', 51.73925413, 19.51309225, 'Atrakcja 1 pl', '#', 'poi.png'],
      ['Atrakcja 2 PL', 53.41475000, 14.60220358, 'Atrakcja 2 PL', '#', 'poi.png'],
      ['Biskupia', 51.93780943, 15.52505514, 'Biskupia', '#', 'poi2.png']
    ];
    var infoWindow = new google.maps.InfoWindow({
        maxWidth: 600
      }),
      marker, i,
      image = 'http://localhost/apartamenty/assets/poi.png';

    for (i = 0; i < markers.length; i++) {
      var beach = markers[i];
      var position = new google.maps.LatLng(beach[1], beach[2]);
      bounds.extend(position);
      marker = new google.maps.Marker({
        position: position,
        map: map,
        // icon: 'http://localhost/apartamenty/assets/' + beach[5],
        title: beach[0],
        myurl: beach[4]
      });
      gmarkers.push(marker);

      google.maps.event.addListener(marker, 'click', (function(marker, i) {
        return function() {
          infoWindow.setContent('<a href="' + marker['myurl'] + '">' + marker['title'] + '</a>');
          infoWindow.open(map, marker);
        }
      })(marker, i));
      map.fitBounds(bounds);
      map.mapTypes.set('Styled', styledMapType);
      if (document.getElementById('obj-' + (i + 1))) {
        // relies on the naming convention in your posted code
        google.maps.event.addDomListener(document.getElementById('obj-' + (i + 1)), 'click', function(i) {
          return function() {
            google.maps.event.trigger(gmarkers[i], 'click');
            map.setCenter(gmarkers[i].getPosition());
          }
        }(i))
      }
    }
  }
</script>