谷歌地图:渲染上述markerclusterer标记(Google Maps: Render mar

2019-06-23 18:56发布

我有一组集群得到我的地图上的标记。 另一组标记分别显示了,我正好需要这些来簇上面显示。 我曾尝试在集群选项对象,比第2组标记的较低设置zIndex的,但无济于事。 不知道如何去这件事吗?

Answer 1:

据我知道这能不能做到。 簇位于比标记图像更高窗格。

https://developers.google.com/maps/documentation/javascript/reference#MapPanes



Answer 2:

我有同样的问题,但不想处理新的覆盖。

而无需创建一个特定的覆盖,你可以切换重叠的父容器的z索引。

这可以通过使用下面的函数来实现:

_changeOverlayOrder = function(map) {
    var panes = map.getPanes();
    var markerOverlayDiv = panes.overlayImage.parentNode;
    var clusterOverlayDiv = panes.overlayMouseTarget.parentNode;
    // Make the clusters clickable.
    if(!markerOverlayDiv.style.pointerEvents) {
        markerOverlayDiv.style.cssText += ";pointer-events: none;";
    }
    // Switch z-indexes
    if(markerOverlayDiv.style.zIndex < clusterOverlayDiv.style.zIndex) {
        var tmp = markerOverlayDiv.style.zIndex;
        markerOverlayDiv.style.zIndex = clusterOverlayDiv.style.zIndex;
        clusterOverlayDiv.style.zIndex = tmp;
    }
};

希望能帮助到你。



Answer 3:

这是可以做到的,但它是一个非常颠簸的路,直到你到达那里...瑞克说,问题是,MarkerClusterer增加了自己的OverlayView的与更高的面板作为常规指标的集群的图标。 添加集群上面标记的唯一方法是击败人聚类用他自己的武器,并添加自己的OverlayView的和标记图标标记添加到一个更高的窗格(阅读窗格这里 )。 我真的不喜欢它 - 但它是我发现的唯一途径。

要做到这一点,你必须创建实现google.maps.OverlayView(自定义叠加参考 ),一个很好的例子可以发现这里 (有解释,我用了一些代码,从它)。

这是一个粗略的CustomOverlay原型:

// build custom overlay class which implements google.maps.OverlayView
function CustomOverlay(map, latlon, icon, title) {
    this.latlon_ = latlon;
    this.icon_ = icon;
    this.title_ = title;
    this.markerLayer = jQuery('<div />').addClass('overlay');
    this.setMap(map);
};
CustomOverlay.prototype = new google.maps.OverlayView;
CustomOverlay.prototype.onAdd = function() {
    var $pane = jQuery(this.getPanes().floatPane); // Pane 6, one higher than the marker clusterer
    $pane.append(this.markerLayer);
};
CustomOverlay.prototype.onRemove = function(){
    this.markerLayer.remove();
};
CustomOverlay.prototype.draw = function() {
    var projection = this.getProjection();
    var fragment = document.createDocumentFragment();

    this.markerLayer.empty(); // Empty any previous rendered markers

    var location = projection.fromLatLngToDivPixel(this.latlon_);
    var $point = jQuery('<div class="map-point" title="'+this.title_+'" style="'
                            +'width:32px; height:32px; '
                            +'left:'+location.x+'px; top:'+location.y+'px; '
                            +'position:absolute; cursor:pointer; '
                        +'">'
                        +'<img src="'+this.icon_+'" style="position: absolute; top: -16px; left: -16px" />'
                    +'</div>');

    fragment.appendChild($point.get(0));
    this.markerLayer.append(fragment);
};

这种叠加得到地图,经纬度对象和图标的网址。 好处是,你可以写自己的HTML层,坏的事情是,你必须自己处理所有的地图API为您做的(如标记图像抛锚)的东西。 这个例子只能用好图像32x32px在锚是在图像的中间,所以它仍然是相当粗糙。

要使用CustomOverlay,只是实例化它是这样的:

// your map center / marker LatLng
var myLatlng = new google.maps.LatLng(24.247471, 89.920990);

// instantiate map
var map = new google.maps.Map(
    document.getElementById("map-canvas"),
    {zoom: 4, center: myLatlng, mapTypeId: google.maps.MapTypeId.ROADMAP}
);  

// create the clusterer, but of course with markers
//var markerClusterer = new MarkerClusterer(map, []);

// add custom overlay to map
var customCustomOverlay = new CustomOverlay(map, myLatlng, 'http://www.foo.bar/icon.png');

我希望这对你的作品。



文章来源: Google Maps: Render marker above markerclusterer