从数组中删除标记后更新标记簇
Posted
技术标签:
【中文标题】从数组中删除标记后更新标记簇【英文标题】:update markercluster after removing markers from array 【发布时间】:2012-01-04 00:22:06 【问题描述】:我目前正在使用带有 jquery ui 地图的 markercluster 插件。
我有两个数组,一个是所有标记(称为标记),另一个是匹配搜索条件的标记(称为 current_markers)。这些是从第一个数组中筛选出来的。
然后我在屏幕上绘制 current_markers。
然而,我发现 markerclusterer 库并未根据此更改进行更新。
那么如何更新markerclusterer呢?
是否可以将markerclusterer分配给变量并调用更新函数?
【问题讨论】:
【参考方案1】:是的,你可以。
创建地图
假设您已经创建了类似这样的 MarkerClusterer 对象:
var center = new google.maps.LatLng(10, 20);
var map = new google.maps.Map(document.getElementById('map'), zoom: 6, center: center, mapTypeId: google.maps.MapTypeId.ROADMAP );
var markerClusterer = new MarkerClusterer(map);
添加标记
您可以向它添加多个标记,如下所示:
var markers = []
var marker = new google.maps.Marker(position: center);
markers.push(marker);
markerClusterer.addMarkers(markers);
请注意,这里我只添加了一个。
删除所有标记
然后您可以使用 clearMarkers 清除所有标记,如下所示:
markerClusterer.clearMarkers();
markers = [];
请注意,为了整洁,我还在这里取消了标记数组。
文档
所有可用方法的完整文档可在此处获得:
https://googlemaps.github.io/js-marker-clusterer/docs/reference.html
更新链接:https://googlemaps.github.io/js-markerclustererplus/classes/markerclusterer.html#clearmarkers
这是一个合理且相对完整的API。
【讨论】:
很好的答案,因为您不仅解决了 OP,而且还展示了与标记管理相关的完整过程,与集群构建无关 谢谢@hubsonbropa,你说得真好。 链接已失效,很难找到最新信息,这绝对有帮助! 谢谢。 markerClusterer.clearMarkers();是更好的选择。【参考方案2】:您应该将标记对象存储在 var 中,然后按以下方式取消设置地图:
var markerCluster = new MarkerClusterer(map, markers);
/// ... later on
markerCluster.setMap(null);
完成此操作后,您可以使用新标记初始化 new MarkerClusterer
更新
因为您使用的是 google maps ui 插件,所以这里有一些额外的代码。我什至在reset_markercluster
类的按钮上添加了一个点击,当然这只是为了展示如何使用它来调用地图
var _map, _markerCluster;
$(function()
$('#map_canvas').gmap().bind('init', function(event, map)
_map = map; // at this point you can call _map whenever you need to call the map
// build up your markers here ...
_markerCluster = new MarkerClusterer(_map, markers); // you could also use map instead of _map here cause it's still present in this function
);
$("button.reset_markercluster").click(function(e)
e.preventDefault();
_markerCluster.setMap(null); // remove's the previous added markerCluster
// rebuild you markers here ...
_markerCluster = new MarkerClusterer(_map, newMarkers);
);
);
【讨论】:
在构造函数map, markers
中,或者您也可以使用 setMap()
进行设置
好的,那么在这种情况下如何将地图设置为变量?我主要是因为 jquery ui 地图插件而感到困惑。
我收到一条错误消息,提示“对象没有可拖动的方法”
这个插件:google-maps-utility-library-v3.googlecode.com/svn/trunk/…
好吧,和我一样。循环 _clusterer 中的标记是否有办法查找标记是否已聚类?【参考方案3】:
最好使用您的 markerCluster 对象中的 clearMarkers() 方法:
http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/docs/reference.html
更新参考:https://googlemaps.github.io/js-markerclustererplus/classes/markerclusterer.html#clearmarkers
【讨论】:
更新链接:googlemaps.github.io/js-markerclustererplus/classes/…【参考方案4】:marker-clusterer-plus 有一个removeMarkers
方法:
markerCluster.removeMarkers(markers);
【讨论】:
【参考方案5】:你可以这样管理。
创建空白集群变量
var _markerCluster;
在我们的变量上存储集群对象。
_markerCluster = new MarkerClusterer(地图,标记, imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m', );
-
当您删除标记时,您需要编写以下代码。
【讨论】:
以上是关于从数组中删除标记后更新标记簇的主要内容,如果未能解决你的问题,请参考以下文章