Google MarkerClusterer:对低于特定缩放级别的标记进行分簇?

2024-02-24

我正在使用 Google MarkerClusterer。每当地图缩放级别超过 15 时,我想对所有标记进行分簇。

有一个maxZoom在配置选项中设置,但是文档没有明确说明它应该做什么 http://google-maps-utility-library-v3.googlecode.com/svn/tags/markerclusterer/1.0/docs/examples.html.

我尝试按如下方式设置它,但无论我将地图设置为何种缩放级别,地图仍保持聚集状态:

    new_mc = new MarkerClusterer(map, newco_markers, {
      maxZoom: 9
    });

我是否做错了什么,我是否误解了该选项的用途,或者是否有其他方法可以解决此问题?


设置 maxZoom 级别这个例子 https://googlemaps.github.io/v3-utility-library/packages/markerclustererplus/examples/advanced_example.html,对缩放级别 8 及以上的所有标记进行分簇。

(具有有效密钥的示例的工作版本 http://www.geocodezip.com/v3_GoogleEx_markerclustererplus_examples_advanced_example.html,github中的原始示例来自需要密钥之前)

重现:

  1. 将最大缩放级别设置为 7
  2. 点击刷新地图
  3. 将缩放级别更改为 0(最远)
  4. 单击缩放滑块上的“+”8 次。

的文档标记聚类增强版 https://googlemaps.github.io/v3-utility-library/interfaces/_google_markerclustererplus.markerclustereroptions.html#maxzoom更清楚一点:

最大缩放 |数量 |启用聚类的最大缩放级别;如果要在所有缩放级别启用聚类,则为空。默认值为空。

代码片段:

var styles = [
  [{
    url: 'https://cdn.jsdelivr.net/npm/[email protected] /cdn-cgi/l/email-protection/images/people35.png',
    height: 35,
    width: 35,
    anchor: [16, 0],
    textColor: '#ff00ff',
    textSize: 10
  }, {
    url: 'https://cdn.jsdelivr.net/npm/[email protected] /cdn-cgi/l/email-protection/images/people45.png',
    height: 45,
    width: 45,
    anchor: [24, 0],
    textColor: '#ff0000',
    textSize: 11
  }, {
    url: 'https://cdn.jsdelivr.net/npm/[email protected] /cdn-cgi/l/email-protection/images/people55.png',
    height: 55,
    width: 55,
    anchor: [32, 0],
    textColor: '#ffffff',
    textSize: 12
  }],
  [{
    url: 'https://cdn.jsdelivr.net/npm/[email protected] /cdn-cgi/l/email-protection/images/conv30.png',
    height: 27,
    width: 30,
    anchor: [3, 0],
    textColor: '#ff00ff',
    textSize: 10
  }, {
    url: 'https://cdn.jsdelivr.net/npm/[email protected] /cdn-cgi/l/email-protection/images/conv40.png',
    height: 36,
    width: 40,
    anchor: [6, 0],
    textColor: '#ff0000',
    textSize: 11
  }, {
    url: 'https://cdn.jsdelivr.net/npm/[email protected] /cdn-cgi/l/email-protection/images/conv50.png',
    width: 50,
    height: 45,
    anchor: [8, 0],
    textSize: 12
  }],
  [{
    url: 'https://cdn.jsdelivr.net/npm/[email protected] /cdn-cgi/l/email-protection/images/heart30.png',
    height: 26,
    width: 30,
    anchor: [4, 0],
    textColor: '#ff00ff',
    textSize: 10
  }, {
    url: 'https://cdn.jsdelivr.net/npm/[email protected] /cdn-cgi/l/email-protection/images/heart40.png',
    height: 35,
    width: 40,
    anchor: [8, 0],
    textColor: '#ff0000',
    textSize: 11
  }, {
    url: 'https://cdn.jsdelivr.net/npm/[email protected] /cdn-cgi/l/email-protection/images/heart50.png',
    width: 50,
    height: 44,
    anchor: [12, 0],
    textSize: 12
  }],
  [{
    url: 'https://cdn.jsdelivr.net/npm/[email protected] /cdn-cgi/l/email-protection/images/pin.png',
    height: 48,
    width: 30,
    anchor: [-18, 0],
    textColor: '#ffffff',
    textSize: 10,
    iconAnchor: [15, 48]
  }]
];

var markerClusterer = null;
var map = null;
var imageUrl = 'http://chart.apis.google.com/chart?cht=mm&chs=24x32&' +
  'chco=FFFFFF,008CFF,000000&ext=.png';

function refreshMap(data) {
  if (markerClusterer) {
    markerClusterer.clearMarkers();
  }

  var markers = [];

  var markerImage = new google.maps.MarkerImage(imageUrl,
    new google.maps.Size(24, 32));

  for (var i = 0; i < data.photos.length; ++i) {
    var latLng = new google.maps.LatLng(data.photos[i].latitude,
      data.photos[i].longitude)
    var marker = new google.maps.Marker({
      position: latLng,
      draggable: true,
      icon: markerImage
    });
    markers.push(marker);
  }

  var zoom = parseInt(document.getElementById('zoom').value, 10);
  var size = parseInt(document.getElementById('size').value, 10);
  var style = parseInt(document.getElementById('style').value, 10);
  zoom = zoom === -1 ? null : zoom;
  size = size === -1 ? null : size;
  style = style === -1 ? null : style;

  markerClusterer = new MarkerClusterer(map, markers, {
    maxZoom: zoom,
    gridSize: size,
    styles: styles[style],
    imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'
  });
}

function initialize() {
  map = new google.maps.Map(document.getElementById('map'), {
    zoom: 2,
    center: new google.maps.LatLng(39.91, 116.38),
    mapTypeId: google.maps.MapTypeId.ROADMAP
  });

  var refresh = document.getElementById('refresh');
  google.maps.event.addDomListener(refresh, 'click', refreshMap);

  var clear = document.getElementById('clear');
  google.maps.event.addDomListener(clear, 'click', clearClusters);

  $.getJSON("https://api.myjson.com/bins/6ad78", function(data, textStatus, jqXHR) {
    console.log(textStatus);
    refreshMap(data);
  });
}

function clearClusters(e) {
  e.preventDefault();
  e.stopPropagation();
  markerClusterer.clearMarkers();
}

google.maps.event.addDomListener(window, 'load', initialize);
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: 800px;
}

#map {
  width: 800px;
  height: 400px;
}

#actions {
  list-style: none;
  padding: 0;
}

#inline-actions {
  padding-top: 10px;
}

.item {
  margin-left: 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
<!-- scr -- ipt src="https://googlemaps.github.io/js-marker-clusterer/examples/data.json"></scr -- ipt -->
<script src="https://unpkg.com/@google/[email protected] /cdn-cgi/l/email-protection/dist/markerclustererplus.min.js"></script>
<h3>An example of MarkerClusterer v3</h3>
<div id="map-container">
  <div id="map"></div>
</div>
<div id="inline-actions">
  <span>Max zoom level:
        <select id="zoom">
          <option value="-1">Default</option>
          <option value="7">7</option>
          <option value="8">8</option>
          <option value="9">9</option>
          <option value="10">10</option>
          <option value="11">11</option>
          <option value="12">12</option>
          <option value="13">13</option>
          <option value="14">14</option>
        </select>

      </span>
  <span class="item">Cluster size:
        <select id="size">
          <option value="-1">Default</option>
          <option value="40">40</option>
          <option value="50">50</option>
          <option value="70">70</option>
          <option value="80">80</option>
        </select>
      </span>
  <span class="item">Cluster style:
        <select id="style">
          <option value="-1">Default</option>
          <option value="0">People</option>
          <option value="1">Conversation</option>
          <option value="2">Heart</option>
          <option value="3">Pin</option>
       </select>
       <input id="refresh" type="button" value="Refresh Map" class="item"/>
       <a href="#" id="clear">Clear</a>
    </div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google MarkerClusterer:对低于特定缩放级别的标记进行分簇? 的相关文章

随机推荐

  • Fluentd 发送到 Splunk HEC:想要将源类型设置为命名空间

    是否可以以编程方式将源类型设置为生成日志的名称空间 我正在使用 fluidd 插件将数据发送到 Splunk http 事件收集器 在其他地方 建议使用 record kubernetes namespace name 将索引名称设置为命名
  • 函数的隐式声明在 C99 中无效

    我是 C 语言新手 我遇到了一个我真的不明白的问题 我试图从另一个函数获取一个数组 但是当我尝试提取信息时 它给了我以下警告 函数 getk vector calculation 的隐式声明在 C99 中无效 数组初始值设定项必须是初始值设
  • 使用访问权限填充多对多表

    我有两张桌子 persons and projects 位于多对多表中 因此通过第三个表链接在一起persons projects 在 ms access 中 我现在创建了一个表单 显示来自projects table 我想要的是有一个显示
  • 如何使用 openXML 深度克隆 .xlsx 文件中的行?

    我有 template xlsx 文件 必须通过在特定索引中添加一行的几个副本来修改该文件 当我尝试使用克隆方法进行此操作时 我添加了一行 但每行都互相修改 我需要创建 opemxml 行对象的深度克隆 但是当我尝试此操作时 出现 open
  • 具有多个选项的 jQuery 日期选择器

    我想得到datepicker显示我发送的日期名称 但它仍然使用默认值 有什么东西应该关闭吗 我应该使用单个选项语句设置值吗 我在 Firebug 中没有收到任何错误 这是我的代码 datepicker dateFormat dd mm yy
  • 在 C# 中旋转色调

    我正在寻找复制发现的 CSS3 色调旋转行为here http css3 bradshawenterprises com filters 原始图像 色调旋转 180 度的图像 我已经可以准确地将 RGB 值转换为 HSL 值 然后再转换回来
  • 为什么即使我设置了随机种子,我也无法在 Keras 中获得可重现的结果?

    我正在 Mac OSX 上使用 Keras 在虚拟数据上训练 MobileNet 架构 我都设置了nump random and tensorflow set random seed 但由于某些原因 我无法获得可重现的结果 每次重新运行代码
  • 您知道 NTSC 解码器 API 吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 API 可以用来解码模拟信号的数字样本 根据 http en wikipedia org
  • if fi [: 参数太多

    这个脚本有什么问题吗 if grep q
  • 如何更改LocationRequest的间隔

    我将应用程序设置为每 5 秒获取一次位置通知 mLocationRequest LocationRequest create mLocationRequest setPriority LocationRequest PRIORITY HIG
  • 如何跟踪点击时正确的标注附件视图的位置

    正如您在下面看到的 我有一个带有右键的注释视图 当用户点击右侧按钮时 我将呈现一个弹出窗口 问题是我不知道用户点击的位置 因此我没有 X 和 Y 来相应地显示弹出窗口 如何找出用户点击的位置 即 X 和 Y HotelAnnotationV
  • 如何快速检查一个对象是否是动态类类型?

    我正在实现一个名为的函数ofType它过滤掉给定类型的所有元素 这是我的代码 class Animal class Mammal Animal class Monkey Mammal class Pig Mammal class Human
  • 如何调试 Firefox 扩展,它似乎无声地崩溃

    我不知道如何调试我的简单扩展 脚本 内容脚本 加载 因为第一个 console log 调用显示在选项卡的控制台中 但随后什么也没有 没有任何错误 也没有第二次 console log 调用 我的问题不是关于解决我的代码问题 肯定有一个 如
  • Matplotlib/Pandas 中条形图的优化

    代码 df pd DataFrame 770 215 179 107 83 82 70 60 57 54 52 index A B C D E F G H I J K ax df plot kind bar stacked False al
  • java 解组 LocalDateTime

    这是我的适配器类 public class LocalDateTimeAdapter extends XmlAdapter
  • 在同一 lambda 函数中从不同帐户访问两个表

    是否可以在一个 lambda 函数中访问两个表 其中一个表与 lambda 函数位于同一帐户中 另一个表位于另一个帐户中 我看过有关的文章跨账户访问委托 https docs aws amazon com IAM latest UserGu
  • 如何在Java中实现具有单应性方法的接口?

    在英语中 同形异义词对是具有相同拼写但不同含义的两个单词 在软件工程中 一对单应性方法是名称相同但要求不同的两种方法 让我们看一个人为的示例 以使问题尽可能清楚 interface I1 return 1 int f interface I
  • Ansible,角色未找到错误

    我尝试对本地主机播放以下剧本来配置 Vagrant 机器 hosts all become yes roles base jenkins 我已经从 github 克隆了必要的角色 它们位于相对路径中roles role name 执行以下命
  • 设置 CLion 构建和二进制目录

    我正在尝试在 CLion 的项目中构建 libwebsockets 在构建期间 libwebsockets 创建其他文件所需的头文件并将其放入 PROJECT BINARY DIR 中 CLion 在为项目创建的随机构建目录中构建所有内容
  • Google MarkerClusterer:对低于特定缩放级别的标记进行分簇?

    我正在使用 Google MarkerClusterer 每当地图缩放级别超过 15 时 我想对所有标记进行分簇 有一个maxZoom在配置选项中设置 但是文档没有明确说明它应该做什么 http google maps utility li