如何将Google Maps Polygon链接到另一个网站?

时间:2018-10-23 17:26:24

标签: javascript google-maps-api-3 javascript-events polygon

我正在用多边形创建地图,以显示城市的不同区域。每个多边形(区域)应可单击另一个网站(包含有关此区域信息的子页面)。我已经添加了add.listener,当我将鼠标悬停在多边形上时,可以看到该多边形后面有一个链接,但该链接不可点击。 到目前为止,这是我对一个多边形的了解:

<body>
<h1>Headline</h1>
<div id="map"></div>
<script>
function initMap() {

var map = new google.maps.Map(document.getElementById('map'), {

      zoom: 12,
      center:{lat:52.516754,lng:13.415202},
      mapTypeId: 'terrain'
    });


//Define the LatLng coordinates for the polygon's path DistrictOne
var DistrictOneCoords = [
    {lat:52.528198300, lng:13.424935300},
    {lat:52.527989500, lng:13.423905300},
    {lat:52.525065200, lng:13.420386300},
    {lat:52.522819700, lng:13.426480300},
    {lat:52.521148500, lng:13.429141000},
    {lat:52.519111700, lng:13.427596100},
    {lat:52.528198300, lng:13.424935300}

];

// Construct the polygon.
    var DistrictOne = new google.maps.Polygon({
      paths: DistrictOneCoords,
      strokeColor: '#FF0000',
      strokeOpacity: 0.8,
      strokeWeight: 2,
      fillColor: '#FF0000',
      fillOpacity: 0.35
    });
    DistrictOne.setMap(map);
  }

// link
  google.maps.event.addListener(DistrictOne, "click", function(event) { window.location.href = "https://www.berlin.de" });
</script>

正如我已经提到的,我无法单击链接。

2 个答案:

答案 0 :(得分:0)

使用已发布的代码,我遇到了一个JavaScript错误:

 Uncaught ReferenceError: google is not defined

您的“点击”侦听器不在initMap函数之外,因此它是在Google Maps Javascript API v3加载之前执行的。

如果在initMap函数中,请移动:

function initMap() {

  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 12,
    center:{lat:52.516754,lng:13.415202},
    mapTypeId: 'terrain'
  });

  //Define the LatLng coordinates for the polygon's path DistrictOne
  var DistrictOneCoords = [
    {lat:52.528198300, lng:13.424935300},
    {lat:52.527989500, lng:13.423905300},
    {lat:52.525065200, lng:13.420386300},
    {lat:52.522819700, lng:13.426480300},
    {lat:52.521148500, lng:13.429141000},
    {lat:52.519111700, lng:13.427596100},
    {lat:52.528198300, lng:13.424935300}
  ];

  // Construct the polygon.
  var DistrictOne = new google.maps.Polygon({
    paths: DistrictOneCoords,
    strokeColor: '#FF0000',
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: '#FF0000',
    fillOpacity: 0.35
  });
  DistrictOne.setMap(map);
  // link
  google.maps.event.addListener(DistrictOne, "click", function(event) {
    window.location.href = "https://www.berlin.de" 
  });
}

proof of concept fiddle

代码段:

#map {
  height: 100%;
}

html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}
<div id="map"></div>
<script>
  function initMap() {

    var map = new google.maps.Map(document.getElementById('map'), {

      zoom: 12,
      center: {
        lat: 52.516754,
        lng: 13.415202
      },
      mapTypeId: 'terrain'
    });


    //Define the LatLng coordinates for the polygon's path DistrictOne
    var DistrictOneCoords = [{
        lat: 52.528198300,
        lng: 13.424935300
      },
      {
        lat: 52.527989500,
        lng: 13.423905300
      },
      {
        lat: 52.525065200,
        lng: 13.420386300
      },
      {
        lat: 52.522819700,
        lng: 13.426480300
      },
      {
        lat: 52.519111700,
        lng: 13.427596100
      },
      {
        lat: 52.521148500,
        lng: 13.429141000
      },
      {
        lat: 52.528198300,
        lng: 13.424935300
      }

    ];

    // Construct the polygon.
    var DistrictOne = new google.maps.Polygon({
      paths: DistrictOneCoords,
      strokeColor: '#FF0000',
      strokeOpacity: 0.8,
      strokeWeight: 2,
      fillColor: '#FF0000',
      fillOpacity: 0.35
    });
    DistrictOne.setMap(map);
    // link
    google.maps.event.addListener(DistrictOne, "click", function(event) {
      console.log('click, set window.location.href = "https://www.berlin.de"');
      // uncomment the line below to make it redirect
      // window.location.href = "https://www.berlin.de"
    });
  }
</script>
<script async defer src="https://maps.googleapis.com/maps/api/js?callback=initMap">
</script>

答案 1 :(得分:0)

根据您提供的代码。我在本地实现了多边形。

<script>
    function initMap() {

        var map = new google.maps.Map(document.getElementById('map'), {
            zoom: 12,
            center:{lat:52.516754,lng:13.415202},
            mapTypeId: 'terrain'
        });


        //Define the LatLng coordinates for the polygon's path DistrictOne
        var DistrictOneCoords = [
            {lat:52.528198300, lng:13.424935300},
            {lat:52.527989500, lng:13.423905300},
            {lat:52.525065200, lng:13.420386300},
            {lat:52.522819700, lng:13.426480300},
            {lat:52.521148500, lng:13.429141000},
            {lat:52.519111700, lng:13.427596100},
            {lat:52.528198300, lng:13.424935300}
        ];

        // Construct the polygon.
        var DistrictOne = new google.maps.Polygon({
          paths: DistrictOneCoords,
          strokeColor: '#FF0000',
          strokeOpacity: 0.8,
          strokeWeight: 2,
          fillColor: '#FF0000',
          fillOpacity: 0.35
        });
    DistrictOne.setMap(map);
    addEventFunction(DistrictOne);
}

// link
function addEventFunction(DistrictOne) {
    google.maps.event.addListener(DistrictOne, "click", function(event) { window.location.href = "https://www.berlin.de" });    
}


initMap();