javascript - 谷歌地图 MarkerCluster API : How to get clusters outside of screen's view?

标签 javascript google-maps markerclusterer

我有一个使用 Google map 和 MarkerCluster API 的网页。 我需要能够以给定的缩放级别获取 map 上的所有集群。以这段代码为例:

//Where the center of the screen will be
var center = new google.maps.LatLng(37.4419, -122.1419);
var options = {
  'zoom': 13,
  'center': center,
  //Google map type
  'mapTypeId': google.maps.MapTypeId.ROADMAP
};

//Create the google map
var map = new google.maps.Map(document.getElementById("map"), options);
//Create the marker clusters, where markers is an array of lat and longs
var mc = new MarkerClusterer(map, markers);
//Print all of the clusters at zoom level 13
console.log(mc.getTotalClusters());

问题是,如果缩放级别为 13 时有 10 个簇,但只有 7 个簇在我的屏幕范围内,那么上面的代码只会打印出 7 个簇。我需要一种方法来访问所有簇 em> 簇,即使它们不在屏幕上。

MarkerClusterer 工作原理的简单示例: https://googlemaps.github.io/js-marker-clusterer/examples/simple_example.html

以下是对 MarkerCluster API 的一些引用:

https://googlemaps.github.io/js-marker-clusterer/docs/reference.html

https://googlemaps.github.io/js-marker-clusterer/docs/examples.html

https://developers.google.com/maps/articles/toomanymarkers

最佳答案

事实上,getTotalClusters 函数仅返回当前视口(viewport)中可见标记的簇数。

获取簇总数的一个选项是通过覆盖创建簇的函数来禁用检查标记是否位于当前视口(viewport)内:

MarkerClusterer.prototype.createClusters_ = function() {
  if (!this.ready_) {
    return;
  }

  for (var i = 0, marker; marker = this.markers_[i]; i++) {
    //if (!marker.isAdded && this.isMarkerInBounds_(marker, bounds)) {    
    if (!marker.isAdded) {    
      this.addToClosestCluster_(marker);
    }
  }
};

工作示例

MarkerClusterer.prototype.createClusters_ = function() {
  if (!this.ready_) {
    return;
  }

  for (var i = 0, marker; marker = this.markers_[i]; i++) {
    //if (!marker.isAdded && this.isMarkerInBounds_(marker, bounds)) {    
    if (!marker.isAdded) {    
      this.addToClosestCluster_(marker);
    }
  }
};


function initMap(data) {
    var center = new google.maps.LatLng(59.339025,18.065818);

    var map = new google.maps.Map(document.getElementById('map'), {
        zoom: 5,
        center: center,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    });

 
    var markers = [];
    for (var i = 0; i < data.photos.length; i++) {
        var dataPhoto = data.photos[i];
        var latLng = new google.maps.LatLng(dataPhoto.latitude,dataPhoto.longitude);
        var marker = new google.maps.Marker({
            position: latLng
        });
        markers.push(marker);
    }
    markerCluster = new MarkerClusterer(map, markers, { imagePath: 'https://cdn.rawgit.com/googlemaps/js-marker-clusterer/gh-pages/images/m' });

    google.maps.event.addListenerOnce(map, 'idle', function(){
        console.log("Total number of clusters: " + markerCluster.getTotalClusters());
    });
}
google.maps.event.addDomListener(window, 'load', 
function(){
    $.getJSON("https://gist.githubusercontent.com/vgrem/fb601469049c4be809ad4ea4bbcdc381/raw/data.json")
    .success(function(data) {
        initMap(data);
    });    
});
body {
        margin: 0;
        padding: 10px 20px 20px;
        font-family: Arial;
        font-size: 16px;
      }
      #map-container {
        padding: 6px;
        border-width: 1px;
        border-style: solid;
        border-color: #ccc #ccc #999 #ccc;
        -webkit-box-shadow: rgba(64, 64, 64, 0.5) 0 2px 5px;
        -moz-box-shadow: rgba(64, 64, 64, 0.5) 0 2px 5px;
        box-shadow: rgba(64, 64, 64, 0.1) 0 2px 5px;
        width: 600px;
      }
      #map {
        width: 600px;
        height: 400px;
      }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js"></script>
<script src="https://googlemaps.github.io/js-marker-clusterer/src/markerclusterer.js"></script>
<div id="map-container"><div id="map"></div></div>

Plunker

关于javascript - 谷歌地图 MarkerCluster API : How to get clusters outside of screen's view?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39197080/

相关文章:

javascript - return false 似乎在这个 javascript 函数中不起作用

javascript - div 应使用 jquery 和 ajax 每三秒刷新一次

javascript - AngularJS $scope 变量仅通过 HTTP GET 设置一次

javascript - 在 MarkerClustererOptions 的 MarkerClustererPlus 样式参数中无法正常工作

javascript - 使用 google 脚本检查 forEach 是否达到限制结果

javascript - 谷歌地图模式在两次打开后不显示 - Ionic

javascript - 如何计算五个标记之间的距离?

google-maps - Google Maps JS API (v3) InfoWindow 脚本错误 - JSON 未定义

javascript - 有没有办法返回当前不在聚类组内的所有标记的列表?

android - 如何使用适用于 Android 的 Android Maps Utility Library 显示 InfoWindow