-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>

+1

我相信它可能不工作,因为标记被异步提取。例如,当你运行'loadjsonmarkerstomap()',然后立即启动你的集群。你的标记数组仍然是空的。在ajax调用成功之后,您必须确保启动集群 –

+0

您的意思是将var markerCluster放在initMap()函数之外吗? – mee

+2

不是,而是把'var markerCluster = new MarkerClusterer(map,markers,{imagePath:'images/m'}); \t}'在你的ajax调用的回调函数内部。例如直接在你的'$ .each(json1..'循环中) –

回答

1

我相信它可能无法正常工作,由于标记是获取异步。例如,当你运行你的loadjsonmarkerstomap(),然后马上启动你的集群,你的标记数组仍然是空的。

您必须确保在ajax调用成功后启动集群。

var markerCluster = new MarkerClusterer(map, markers, {imagePath: 'images/m'}); } 

应该进入你的ajax调用的回调。例如,直接在你$.each(json1.. loop