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