【发布时间】:2017-02-13 11:57:11
【问题描述】:
页面加载、标记设置和显示、功能工作等等...... 一切似乎都很好,但 MarkerClusterer 不起作用。 我错过了什么? 也欢迎代码优化建议:)
<script>
var map;
var markers = [];
function loadjsonmarkerstomap()
{
$.getJSON("json.php", function(json1)
{
$.each(json1, function(key, data)
{
var latlng = new google.maps.LatLng(data.lat, data.lng);
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>';
var marker = new google.maps.Marker(
{
position: latlng,
map: map,
title: data.title
});
var infowindow = new google.maps.InfoWindow({ content: infocontent });
marker.addListener('click', function()
{
infowindow.open(map, marker);
});
markers.push(marker);
});
});
}
function clearLocations()
{
for (var i = 0; i < markers.length; i++)
{
markers[i].setMap(null);
}
markers.length = 0;
}
$('#clear').click(
function()
{
clearLocations();
}
);
$('#load').click(
function()
{
loadjsonmarkerstomap();
}
);
function initMap()
{
map = new google.maps.Map(document.getElementById('map'),
{
center: {lat: 46.30499, lng: 25.292647}, //
zoom: 8 //
});
loadjsonmarkerstomap(); //
var markerCluster = new MarkerClusterer(map, markers, {imagePath: 'images/m'});
}
</script>
【问题讨论】:
-
我相信它可能无法正常工作,因为标记是异步获取的。例如,当您运行
loadjsonmarkerstomap()然后立即初始化您的集群时。您的标记数组仍然是空的。 ajax调用成功后一定要确保初始化集群 -
你的意思是把 var markerCluster 放在 initMap() 函数之外吗?
-
不,而是将
var markerCluster = new MarkerClusterer(map, markers, {imagePath: 'images/m'}); }放在 ajax 调用的回调中。例如,直接在您的$.each(json1..循环之后。 -
不幸的是,这没什么区别:| m1.png, m2.png ...图像在一个名为images的文件夹中,但是没有子文件夹m,这有什么关系吗?
-
不,这应该是预期的。你能张贴小提琴或其他东西以获得进一步的帮助吗?没有控制台错误?你加载了多少个标记?
标签: javascript google-maps google-maps-markers markerclusterer