-1
页面加载,标记设置和显示,功能工作,等等......一切似乎都很好,但MarkerClusterer不起作用。 我错过了什么? 代码的优化建议,欢迎以及:)MarkerClusterer没有错误,但什么都不做
<script>
var map;
var markers = [];
function loadjsonmarkerstomap()
\t {
\t $.getJSON("json.php", function(json1)
\t \t {
\t \t $.each(json1, function(key, data)
\t \t \t {
\t \t \t var latlng = new google.maps.LatLng(data.lat, data.lng);
\t \t \t var infocontent = "<div style='width: 200px; height: 200px; border: 1px solid grey;'>ID: " + data.id + "<br/>Type: " + data.type + "<br/>Weight: " + data.weight + '<br/><input type="submit" value="Show"/></div>';
\t \t \t var marker = new google.maps.Marker(
\t \t \t \t {
\t \t \t \t position: latlng,
\t \t \t \t map: map,
\t \t \t \t title: data.title
\t \t \t \t });
\t \t \t var infowindow = new google.maps.InfoWindow({ content: infocontent });
\t \t \t marker.addListener('click', function()
\t \t \t \t {
\t \t \t \t infowindow.open(map, marker);
\t \t \t \t });
\t \t \t markers.push(marker);
\t \t \t });
\t \t });
\t
\t }
function clearLocations()
\t {
\t for (var i = 0; i < markers.length; i++)
\t \t {
\t \t markers[i].setMap(null);
\t \t }
\t \t markers.length = 0;
\t }
$('#clear').click(
\t function()
\t \t {
\t \t clearLocations();
\t \t }
\t);
\t
$('#load').click(
\t function()
\t \t {
\t \t loadjsonmarkerstomap();
\t \t }
\t);
function initMap()
\t {
\t map = new google.maps.Map(document.getElementById('map'),
\t \t {
\t \t center: {lat: 46.30499, lng: 25.292647}, //
\t \t zoom: 8 //
\t \t });
\t loadjsonmarkerstomap(); //
\t
\t var markerCluster = new MarkerClusterer(map, markers, {imagePath: 'images/m'});
\t }
\t
</script>
我相信它可能不工作,因为标记被异步提取。例如,当你运行'loadjsonmarkerstomap()',然后立即启动你的集群。你的标记数组仍然是空的。在ajax调用成功之后,您必须确保启动集群 –
您的意思是将var markerCluster放在initMap()函数之外吗? – mee
不是,而是把'var markerCluster = new MarkerClusterer(map,markers,{imagePath:'images/m'}); \t}'在你的ajax调用的回调函数内部。例如直接在你的'$ .each(json1..'循环中) –