Google maps api 3 MarkerClusterer的jquery ui映射问题

Google maps api 3 MarkerClusterer的jquery ui映射问题,google-maps-api-3,markerclusterer,Google Maps Api 3,Markerclusterer,我在另一个网站上使用了类似的代码,但由于某种原因,这次集群方面的事情不想起作用。示例代码(精简以删除不相关的代码) 这很好,并且显示了地图上所有的标记(只是没有聚集) 但是,当涉及到这部分代码时: $('#map-inner').gmap('set', 'MarkerClusterer', new MarkerClusterer($('#map-inner').gmap('get', 'map'), $('#map-inner').gmap('get', 'markers'))); 这给了我一

我在另一个网站上使用了类似的代码,但由于某种原因,这次集群方面的事情不想起作用。示例代码(精简以删除不相关的代码)

这很好,并且显示了地图上所有的标记(只是没有聚集)

但是,当涉及到这部分代码时:

$('#map-inner').gmap('set', 'MarkerClusterer', new MarkerClusterer($('#map-inner').gmap('get', 'map'), $('#map-inner').gmap('get', 'markers')));
这给了我一个错误:

TypeError: marker is undefined
http://www.site.com/mob_app/js/ui/markerclusterer.js
Line 1222
…当然,根本不添加群集(只保留现有标记)

我已经检查了,并且再次检查了代码是否正确,但似乎无法让它正常工作


有人能看到一个嘘声吗?我使用的是
jquery2.0.3
,带有
bootstrap3.0.2
(我试过对此进行注释,但没有任何区别)。我还使用了
jqueryui-map 3.0-rc
(最新版本)和
MarkerClustererPlus 2.0.16
Ok-这确实不理想,但我发现另一个集群插件似乎工作正常:

我不得不对我的代码做一些调整(因为你需要
将标记推入数组,而不是正常地添加它们-然后使用1行代码将其放入集群)

基本上,您只需创建一个新阵列:

var markers = [];
然后将它们“推”到阵列中:

var marker = new google.maps.Marker({
    position: new google.maps.LatLng(marker.latitude, marker.longitude)
});
markers.push(marker);
…最后(添加所有标记后),您需要将它们处理到地图中:

var markerCluster = new MarkerClusterer(the_map, markers);

不太理想(我宁愿保留旧插件,但即使是在一个非常简单的测试页面上,它也不起作用)

好的-所以我尝试了另一个集群插件,但确实不喜欢它(不够灵活)

我回到绘图板上,决定重新审视这个问题。我终于找到了一个解决办法(不管是什么奇怪的办法)

实际的bug与我传递的“id”参数有关。出于某种原因,marker clusterer代码正在执行以下操作:

MarkerClusterer.prototype.addMarkers = function (markers, opt_nodraw) {
  var i;
  for (i = 0; i < markers.length; i++) {
      this.pushMarkerTo_(markers[i]);
  }
  if (!opt_nodraw) {
    this.redraw_();
  }
};
当您不将其作为ID数组传递时,这没关系。为每个标记指定ID时,它会更改其保存的格式。“修复”是使用标记的
title
属性,因此:

jQuery('#map_inner').gmap('addMarker', { 
    'position': new google.maps.LatLng(marker.latitude, marker.longitude), 
    //'bounds': false,
    'icon': './img/marker.png',
    'title' : marker.linkid 
}).click(function() {
    // do stuff
});
然后,如果需要获取标记的ID,可以像这样使用
attr()

$(this).attr('title')
这当然不理想,但似乎有效。使用自定义ID存储标记显然存在固有问题


希望这至少能让一些人从我的头痛中解脱出来

对我来说很好,你能提供一个演示或者至少是JSON吗?JSON还可以(它添加了标记)。这个问题似乎与某些事情有冲突,但我一辈子都搞不清楚到底是什么在做这件事。我已经将其精简到最基本的部分(仅与地图相关的内容,现在它只有一个硬编码的lat/lng值,而不是JSON)——。我认为如果我们能让infowindow的东西工作起来,那么希望这也能帮助解决集群的问题。谢谢不冻结任何浏览器的演示会更有帮助。啊,对不起,忘了说-你必须“取消”出现的3个弹出窗口。这是一个电话差距的事情(正确的PITA!)。取消它们应该可以加载cordova_plugins.json文件(我花了一段时间才解决这个问题)?这不是数据的来源(这只是
Phonegap
的一部分,
Chrome-Ripple
抱怨如果不包括它。实际数据来自硬编码位(common.js中的第41-61行)
jQuery('#map_inner').gmap('addMarker', { 
    'position': new google.maps.LatLng(marker.latitude, marker.longitude), 
    //'bounds': false,
    'icon': './img/marker.png',
    'title' : marker.linkid 
}).click(function() {
    // do stuff
});
$(this).attr('title')