Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌地图API与StoreLocator和MarkerClusterer的混合问题_Javascript_Google Maps_Google Maps Api 3 - Fatal编程技术网

Javascript 谷歌地图API与StoreLocator和MarkerClusterer的混合问题

Javascript 谷歌地图API与StoreLocator和MarkerClusterer的混合问题,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我使用的dynamic StoreLocator与演示中所示的完全相同,只是做了一些调整: 将JSON更改为我自己的 在地图中添加了标记聚类器,代码如下: google.maps.event.addListener(_googleMap, 'idle', function() { if(typeof _merketClusterer == 'object') { _googleClusters.clearMarkers(); } _googleClusters = new M

我使用的dynamic StoreLocator与演示中所示的完全相同,只是做了一些调整:

  • 将JSON更改为我自己的
  • 在地图中添加了标记聚类器,代码如下:

    google.maps.event.addListener(_googleMap, 'idle', function() {
      if(typeof _merketClusterer == 'object') {
        _googleClusters.clearMarkers();
      }
      _googleClusters = new MarkerClusterer(_googleMap, _storeLocatorView.c);
    });
    
  • 因为MarkerClusterer和StoreLocator都依赖于地图事件,所以看起来会显示群集,一秒钟后,标记会从StoreLocator中再次出现

    有人知道我如何在StoreLocator完成地图更新后触发MarkerClusterer吗

    示例如下:

    您需要移动地图才能开始聚类,标记会显示回来


    我在深入研究这一点,并认为可以通过将StoreLocator中的marker函数包装到Clusterer中来修复它,但由于高度匿名,无法进行此操作。

    成功识别StoreLocator用于将标记添加到地图中的关键功能,并将标记聚类器代码包裹在其周围。 不幸的是,如果不稍微更改StoreLocator,就不可能添加每个单独的标记并避免清除和重置所有内容。 但是向addStoreToMap添加一个简单的返回,以便返回可以实现的标记

    google.maps.event.addListenerOnce(_googleMap, 'bounds_changed', function() {
      _googleClusters = new MarkerClusterer(_googleMap);
      _googleView.addStoreToMapB = _googleView.addStoreToMap
      _googleView.addStoreToMap = function (a) {
        var b = _googleView.addStoreToMapB(a);
        _googleClusters.clearMarkers();
        _googleClusters.addMarkers(_googleView.c);
      }
    });
    

    我也遇到了这个问题,但我必须以不同的方式解决它。我试图使用您的代码,但我的性能下降,因为对于商店定位器中的每个商店,MarkerCusterer都会清除标记,然后再次添加它们

    所以我对你的代码做了一点修改,现在它工作得很好

    google.maps.event.addListenerOnce(map, 'bounds_changed', function() {
            googleClusters = new MarkerClusterer(map);
            view.addStoreToMapB = view.addStoreToMap;
            var i = 0;
            view.addStoreToMap = function (a) {
                i++;
                var b = view.addStoreToMapB(a);
                if(i == view.stores.length){
                    i = 0;
                    var markers = [];
                    googleClusters.clearMarkers();
                    for(marker in view.markerCache_){
                        markers.push(view.markerCache_[marker]);
                    }
                    googleClusters.addMarkers(markers);
                }
            }
        });
    

    您可以提供完整的代码、显示问题的JSFIDLE或指向显示问题的页面的链接吗?添加了问题的链接。