Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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 getClusters()始终返回空数组(使用MarkerClustererPlus for Google Maps V3)_Javascript_Google Maps_Google Maps Api 3_Markerclusterer - Fatal编程技术网

Javascript getClusters()始终返回空数组(使用MarkerClustererPlus for Google Maps V3)

Javascript getClusters()始终返回空数组(使用MarkerClustererPlus for Google Maps V3),javascript,google-maps,google-maps-api-3,markerclusterer,Javascript,Google Maps,Google Maps Api 3,Markerclusterer,我有以下代码加载地图并对标记进行聚类: $scope.getMapHistory = function(locations){ var map = new google.maps.Map(document.getElementById('map-canvas-history'), { zoom: 17, center: google.maps.LatLng(0, 0) }); var markers = []; locations.fo

我有以下代码加载地图并对标记进行聚类:

$scope.getMapHistory = function(locations){

    var map = new google.maps.Map(document.getElementById('map-canvas-history'), {
      zoom: 17,
      center: google.maps.LatLng(0, 0)
    });

    var markers = [];
    locations.forEach(function(deviceLocation){
      //var dataPhoto = data.photos[i];
      var devLat = deviceLocation._source.data.location[1];
      var devLng = deviceLocation._source.data.location[0];
      var latLng = new google.maps.LatLng(devLat, devLng);
      var marker = new google.maps.Marker({position: latLng });
      markers.push(marker);
    });

    var markerCluster = new MarkerClusterer(map, markers);

    //Test to get the clusters
    console.log(markerCluster);
    console.log(markerCluster.getClusters());
    console.log(markerCluster.getTotalClusters());

    markerCluster.fitMapToMarkers();

    $scope.hideLoading('loadingMap'); //Hides the loading gif

}
直到一切都好起来。问题是我想访问集群数组,当我尝试记录
markerCluster.getClusters()
的返回时,它返回一个空数组。另外,
.getTotalClusters()
返回0

但是,当我记录整个
markerCluster
并在控制台上打开它时,我可以看到集群阵列:

markers集群工作正常,但我无法访问集群数组或集群数量。有人知道会发生什么吗?
(如果我的解释不够的话,我可以提供更多的细节)

在MarkerClusterer实例完成标记的分区之前,您似乎在询问集群和总集群数,这非常快,但并不是即时的

一个简单的测试是在查询属性之前留出几秒钟:

var markerCluster = new MarkerClusterer(map, markers);

window.SetTimeout(function() {
    //Test to get the clusters
    console.log(markerCluster);
    console.log(markerCluster.getClusters());
    console.log(markerCluster.getTotalClusters());
},2000);

顺便说一句,您将实例视为包含标记,因为控制台中的对象是对原始对象的引用,这意味着在您检查它时,它确实包含标记,但在您记录它时不一定包含标记。

您将获得0个簇,因为
MarkerCluster
在加载映射之前不会完全初始化。以下示例显示了加载贴图后如何确定簇的数量:

google.maps.event.addListener($scope.map, 'idle', function(){           
   $scope.numOfClusters = markerCluster.getTotalClusters();
});
以下是一个工作示例:

角度模块('mapApp',[]) .controller('mapCtrl',函数($scope){ $scope.locations=[ {Id:1,姓名:'Oslo',拉丁美洲:59.923043,液化天然气:10.752839}, {Id:2,名称:'斯德哥尔摩',纬度:59.339025,液化天然气:18.065818}, {Id:3,名称:'Copenhagen',纬度:55.675507,液化天然气:12.574227}, {Id:4,名称:'Berlin',lat:52.521248,lng:13.399038}, {Id:5,名称:'Paris',lat:48.856127,lng:2.346525} ]; $scope.initMap=函数(){ $scope.map=new google.maps.map(document.getElementById('map'){ 中心:{lat:59.339025,lng:18.065818}, 缩放:3 }); //初始标记簇 var标记=[]; 对于(变量i=0;i<$scope.locations.length;i++){ var marker=new google.maps.marker({ 位置:新建google.maps.LatLng($scope.locations[i].lat,$scope.locations[i].lng), }); 标记器。推(标记器); } var mcOptions={imagePath:'https://cdn.rawgit.com/googlemaps/js-marker-clusterer/gh-pages/images/m' }; markerCluster=新的MarkerClusterer($scope.map,markers,mcOptions); google.maps.event.addListener($scope.map,'idle',function()){ $scope.$apply(函数(){ $scope.numOfClusters=markerCluster.getTotalClusters(); }); }); }; $scope.initMap(); });
html,正文{
高度:400px;
保证金:0;
填充:0;
}
#地图{
高度:400px;
}

群集数:{{numOfClusters}}

是的,我在这里测试过,可以得到阵列。现在开始工作了!谢谢@amenadielI还记得Markerclusterer在完成集群后触发
clusteringend
事件吗。优雅的解决方案是实例化一个空的MarkerClusterer,为
clusteringend
声明一个侦听器,然后使用addMarkers方法。在监听器中,你可以对完全加载的实例进行操作。是的,我使用监听器进行了操作,速度甚至更快。唐斯克很多。(:我将把你的答案作为解决方案,因为它在使用侦听器时有更好的实现。正如你在另一个答案的评论中所看到的,我是按照你在这里解释的方式来做的。谢谢你。(: