Google Maps API - 点击圈子时打开信息窗口?

时间:2015-03-17 12:54:05

标签: javascript google-maps-api-3 geometry infowindow

我绝望地试图获得一个带有圆圈的谷歌地图,可以点击它来打开一个信息窗口。它看起来似乎并不是一个复杂的问题,但在线搜索它似乎是不可能的,但我想知道这些帖子是否已经过时,现在可能了。

我想做什么 我试图在不同的位置设置一个谷歌地图(我可以在SharePoint上托管的HTML代码),并且圈子位于不同的位置(到目前为止,此位很好),我可以点击该圈打开一个信息窗口,其中包含该位置的人员列表。

到目前为止我做了什么 我一直在查看google地图javascript API页面,并使用此示例https://developers.google.com/maps/documentation/javascript/examples/circle-simple

成功制作了一个带圆圈的地图

我还尝试在地图中心放置一个标记,其信息不太理想,但仍然可以接受,但这并不起作用。我只是削减了javascript的一部分,它做了一个标记,页面无法加载。

我的背景很遗憾我不了解Javascript。我对HTML有一点了解,但我当然不是来自技术背景,我只想要一张看起来不错且有效的地图。我可以将其作为一个字符,但是我不知道javascript的意思。



<!DOCTYPE html>
<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
  <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <title>Newsletter Map</title>
    <style>
      html, body, #map-canvas {
        height: 100%;
        margin: 0px;
        padding: 0px
      }
    </style>
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
    <script>
// This example creates circles on the map, representing
// populations in North America.

// First, create an object containing LatLng and population for each city.
var citymap = {};
citymap['Mumbai'] = {
  center: new google.maps.LatLng(19.075787,72.8774882),
  population: 14000
};
citymap['Cardiff'] = {
  center: new google.maps.LatLng(51.4887969,-3.1826222),
  population: 1000
};
citymap['Pune'] = {
  center: new google.maps.LatLng(18.5212252,73.8556156),
  population: 14000
};
citymap['Beeston'] = {
  center: new google.maps.LatLng(52.9547839,-1.1581733),
  population: 3000
};
citymap['Birmingham'] = {
  center: new google.maps.LatLng(52.4677785,-1.7230922),
  population: 4000
};
citymap['Bristol'] = {
  center: new google.maps.LatLng(51.5434779,-2.573748),
  population: 2000
};
citymap['Brussels'] = {
  center: new google.maps.LatLng(50.8891268,4.4592719),
  population: 1000
};
citymap['Crewe'] = {
  center: new google.maps.LatLng(53.0888925,-2.4357559),
  population: 2000
};
citymap['Dundee'] = {
  center: new google.maps.LatLng(56.4563534,-2.9752489),
  population: 1000
};
citymap['Durham'] = {
  center: new google.maps.LatLng(54.5468172,-1.5703596),
  population: 1000
};
citymap['Glasgow'] = {
  center: new google.maps.LatLng(55.8601948,-4.256542),
  population: 2000
};
citymap['Liverpool'] = {
  center: new google.maps.LatLng(53.4114691,-2.9954281),
  population: 5000
};
citymap['Livingston'] = {
  center: new google.maps.LatLng(55.8889266,-3.5575676),
  population: 12000
};
citymap['Moray'] = {
  center: new google.maps.LatLng(57.6153854,-3.5727702),
  population: 1000
};
citymap['Newcastle'] = {
  center: new google.maps.LatLng(55.0114826,-1.6218245),
  population: 1000
};
citymap['Runcorn'] = {
  center: new google.maps.LatLng(53.3416269,-2.7312661),
  population: 6000
};
citymap['Winnersh'] = {
  center: new google.maps.LatLng(51.43674,-0.89131),
  population: 5000
};
citymap['Wolverhampton'] = {
  center: new google.maps.LatLng(52.6375302,-2.1184067),
  population: 1000
};
citymap['Plymouth'] = {
  center: new google.maps.LatLng(50.3752499,-4.1425974),
  population: 1000
};
citymap['Swinton Manch'] = {
  center: new google.maps.LatLng(53.5108841,-2.3468262),
  population: 1000
};
citymap['Cleveleys'] = {
  center: new google.maps.LatLng(53.8758639,-3.0423774),
  population: 1000
};
citymap['Peterborough'] = {
  center: new google.maps.LatLng(52.5694182,-0.2415024),
  population: 1000
};
citymap['Saffron Walden'] = {
  center: new google.maps.LatLng(52.0224437,0.2393275),
  population: 1000
};
citymap['Gloucester'] = {
  center: new google.maps.LatLng(51.864033,-2.2382369),
  population: 1000
};
citymap['LTQ'] = {
  center: new google.maps.LatLng(51.5250213,-0.141524),
  population: 18000
};
citymap['Enfield'] = {
  center: new google.maps.LatLng(51.651765,-0.0835785),
  population: 1000
};

var cityCircle;

function initialize() {
  // Create the map.
  var mapOptions = {
    zoom: 7,
    center: new google.maps.LatLng(53.3789721,-1.4693043),
    mapTypeId: google.maps.MapTypeId.TERRAIN
  };

  var map = new google.maps.Map(document.getElementById('map-canvas'),
      mapOptions);

  // Construct the circle for each value in citymap.
  // Note: We scale the area of the circle based on the population.
  for (var city in citymap) {
    var populationOptions = {
      strokeColor: '#FF0000',
      strokeOpacity: 0.8,
      strokeWeight: 2,
      fillColor: '#FF0000',
      fillOpacity: 0.35,
      map: map,
      center: citymap[city].center,
      radius: Math.sqrt(citymap[city].population) * 100
    };
    // Add the circle for this city to the map.
    cityCircle = new google.maps.Circle(populationOptions);
  }
}


 

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

    </script>
  
<!--[if gte mso 9]><xml>
<mso:CustomDocumentProperties>
<mso:_dlc_DocId msdt:dt="string">FQNCM6NFZFN7-2543-7</mso:_dlc_DocId>
<mso:_dlc_DocIdItemGuid msdt:dt="string">a9ec8002-9354-4aef-9bbe-aac4a1d8f794</mso:_dlc_DocIdItemGuid>
<mso:_dlc_DocIdUrl msdt:dt="string">https://sp.myatos.net/ms/uki/bs/bo/_layouts/DocIdRedir.aspx?ID=FQNCM6NFZFN7-2543-7, FQNCM6NFZFN7-2543-7</mso:_dlc_DocIdUrl>
</mso:CustomDocumentProperties>
</xml><![endif]-->
</head>
  <body>
    <div id="map-canvas"></div>
  </body>
</html>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

  1. 创建一个信息窗:var infowindow = new google.maps.InfoWindow();
  2. 设置其内容,位置并点击一下打开:

    google.maps.event.addListener(cityCircle, 'click', function(e) {
      infowindow.setContent(this.getCenter().toUrlValue(6) + "<br>" + this.getRadius());
      infowindow.setPosition(this.getCenter());
      infowindow.open(map);
    });
    
  3. 工作代码段:

    &#13;
    &#13;
    // This example creates circles on the map, representing
    // populations in North America.
    
    // First, create an object containing LatLng and population for each city.
    var citymap = {};
    citymap['Mumbai'] = {
      center: new google.maps.LatLng(19.075787, 72.8774882),
      population: 14000
    };
    citymap['Cardiff'] = {
      center: new google.maps.LatLng(51.4887969, -3.1826222),
      population: 1000
    };
    citymap['Pune'] = {
      center: new google.maps.LatLng(18.5212252, 73.8556156),
      population: 14000
    };
    citymap['Beeston'] = {
      center: new google.maps.LatLng(52.9547839, -1.1581733),
      population: 3000
    };
    citymap['Birmingham'] = {
      center: new google.maps.LatLng(52.4677785, -1.7230922),
      population: 4000
    };
    citymap['Bristol'] = {
      center: new google.maps.LatLng(51.5434779, -2.573748),
      population: 2000
    };
    citymap['Brussels'] = {
      center: new google.maps.LatLng(50.8891268, 4.4592719),
      population: 1000
    };
    citymap['Crewe'] = {
      center: new google.maps.LatLng(53.0888925, -2.4357559),
      population: 2000
    };
    citymap['Dundee'] = {
      center: new google.maps.LatLng(56.4563534, -2.9752489),
      population: 1000
    };
    citymap['Durham'] = {
      center: new google.maps.LatLng(54.5468172, -1.5703596),
      population: 1000
    };
    citymap['Glasgow'] = {
      center: new google.maps.LatLng(55.8601948, -4.256542),
      population: 2000
    };
    citymap['Liverpool'] = {
      center: new google.maps.LatLng(53.4114691, -2.9954281),
      population: 5000
    };
    citymap['Livingston'] = {
      center: new google.maps.LatLng(55.8889266, -3.5575676),
      population: 12000
    };
    citymap['Moray'] = {
      center: new google.maps.LatLng(57.6153854, -3.5727702),
      population: 1000
    };
    citymap['Newcastle'] = {
      center: new google.maps.LatLng(55.0114826, -1.6218245),
      population: 1000
    };
    citymap['Runcorn'] = {
      center: new google.maps.LatLng(53.3416269, -2.7312661),
      population: 6000
    };
    citymap['Winnersh'] = {
      center: new google.maps.LatLng(51.43674, -0.89131),
      population: 5000
    };
    citymap['Wolverhampton'] = {
      center: new google.maps.LatLng(52.6375302, -2.1184067),
      population: 1000
    };
    citymap['Plymouth'] = {
      center: new google.maps.LatLng(50.3752499, -4.1425974),
      population: 1000
    };
    citymap['Swinton Manch'] = {
      center: new google.maps.LatLng(53.5108841, -2.3468262),
      population: 1000
    };
    citymap['Cleveleys'] = {
      center: new google.maps.LatLng(53.8758639, -3.0423774),
      population: 1000
    };
    citymap['Peterborough'] = {
      center: new google.maps.LatLng(52.5694182, -0.2415024),
      population: 1000
    };
    citymap['Saffron Walden'] = {
      center: new google.maps.LatLng(52.0224437, 0.2393275),
      population: 1000
    };
    citymap['Gloucester'] = {
      center: new google.maps.LatLng(51.864033, -2.2382369),
      population: 1000
    };
    citymap['LTQ'] = {
      center: new google.maps.LatLng(51.5250213, -0.141524),
      population: 18000
    };
    citymap['Enfield'] = {
      center: new google.maps.LatLng(51.651765, -0.0835785),
      population: 1000
    };
    
    var cityCircle;
    var infowindow = new google.maps.InfoWindow();
    
    function initialize() {
      // Create the map.
      var mapOptions = {
        zoom: 7,
        center: new google.maps.LatLng(53.3789721, -1.4693043),
        mapTypeId: google.maps.MapTypeId.TERRAIN
      };
    
      var map = new google.maps.Map(document.getElementById('map-canvas'),
        mapOptions);
      
      // Construct the circle for each value in citymap.
      // Note: We scale the area of the circle based on the population.
      for (var city in citymap) {
        var populationOptions = {
          strokeColor: '#FF0000',
          strokeOpacity: 0.8,
          strokeWeight: 2,
          fillColor: '#FF0000',
          fillOpacity: 0.35,
          map: map,
          center: citymap[city].center,
          radius: Math.sqrt(citymap[city].population) * 100
        };
        // Add the circle for this city to the map.
        cityCircle = new google.maps.Circle(populationOptions);
        google.maps.event.addListener(cityCircle, 'click', function(e) {
          infowindow.setContent(this.getCenter().toUrlValue(6) + "<br>" + this.getRadius());
          infowindow.setPosition(this.getCenter());
          infowindow.open(map);
        });
      }
    }
    
    google.maps.event.addDomListener(window, 'load', initialize);
    &#13;
    html,
    body,
    #map-canvas {
      height: 100%;
      margin: 0px;
      padding: 0px
    }
    &#13;
    <script src="https://maps.googleapis.com/maps/api/js"></script>
    <div id="map-canvas"></div>
    &#13;
    &#13;
    &#13;