【问题标题】:MarkerClusterer no error, but does nothingMarkerClusterer 没有错误,但什么也不做
【发布时间】: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


【解决方案1】:

我相信它可能无法正常工作,因为标记是异步获取的。例如,当您运行 loadjsonmarkerstomap() 然后立即初始化集群时,您的标记数组仍然为空。

一定要确保ajax调用成功后初始化集群。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    相关资源
    最近更新 更多