如何为 Google 地图创建“大小圆圈”图例

2024-03-27

我有一个自定义的谷歌地图,它使用 GeoJSON 文件中的数据创建大小的圆圈。我需要做的是创建一个图例/键来解释每个圆圈的大小代表什么

我尝试按照 Google 的指南创建自定义图例(https://developers.google.com/maps/documentation/javascript/adding-a-legend https://developers.google.com/maps/documentation/javascript/adding-a-legend),效果很好。但是,我不知道如何利用按键的圆圈大小而不是图标。这就是我被困住的地方。

下面是在我的地图上生成圆圈的函数。我只想要显示缩放圆圈的键。

function getCircle(nctcount) {
var nctamt = nctcount;
if (nctamt <= 10) {
    return {
        path: google.maps.SymbolPath.CIRCLE,
        fillOpacity: 1,
        fillColor: 'green',
        scale: 5,
        strokeColor: 'white',
        strokeWeight: .5
    };
}

else if (nctamt <= 100) {
    return {
        path: google.maps.SymbolPath.CIRCLE,
        fillOpacity: .8,
        fillColor: 'green',
        scale: 10,
        strokeColor: 'white',
        strokeWeight: .5
    };
}

else if (nctamt <= 250) {
    return {
        path: google.maps.SymbolPath.CIRCLE,
        fillOpacity: .6,
        fillColor: 'green',
        scale: 15,
        strokeColor: 'white',
        strokeWeight: .5
    };
}

else if (nctamt <= 500) {
    return {
        path: google.maps.SymbolPath.CIRCLE,
        fillOpacity: .4,
        fillColor: 'green ',
        scale: 20,
        strokeColor: 'white',
        strokeWeight: .5
    };
}

else if (nctamt <= 2000) {
    return {
        path: google.maps.SymbolPath.CIRCLE,
        fillOpacity: .2,
        fillColor: 'green',
        scale: 25,
        strokeColor: 'white',
        strokeWeight: .5
    };
}

else {
    return {
        path: google.maps.SymbolPath.CIRCLE,
        fillOpacity: .2,
        fillColor: 'green',
        scale: 35,
        strokeColor: 'white',
        strokeWeight: .5
    };
 }
}

如果需要更多信息来解决此问题,请告诉我。


一种选择是替换图像 URL谷歌示例 https://developers.google.com/maps/documentation/javascript/adding-a-legend使用具有适当颜色和填充不透明度(以及一些缩放)的 SVG 圆圈。

var legend = document.getElementById('legend');
for (var key in icons) {
  var type = icons[key];
  var name = type.name;
  var icon = type.icon;
  var scale = type.scale;
  var opacity = type.fillOpacity;
  var div = document.createElement('div');
  div.innerHTML = "<img src='data:image/svg+xml;utf8,<svg viewBox=\"0 0 100 100\" height=\""+ 8*scale/8 + "\" width=\""+ 8*scale/8 + "\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"50\" cy=\"50\" r=\"50\" style=\"fill: green; stroke: white; stroke-width: 1;\" opacity=\""+ opacity+ "\"/></svg>'> " + name;
  legend.appendChild(div);
}

map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(legend);

概念证明小提琴 https://jsfiddle.net/geocodezip/hky5oxwr/2/

代码片段:

function initMap() {
  // Create the map.
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 3,
    center: {
      lat: 37.090,
      lng: -95.712
    },
    mapTypeId: 'terrain'
  });
  var icons = [];
  // Construct the circle for each value in citymap.
  // Note: We scale the area of the circle based on the population.
  for (var city in citymap) {
    // Add the circle for this city to the map.
    var cityCircle = new google.maps.Marker({
      map: map,
      icon: getCircle(citymap[city].population),
      position: citymap[city].center,
    });
    if (!icons[cityCircle.getIcon().scale])
      icons[cityCircle.getIcon().scale] = cityCircle.getIcon();
  }

  var legend = document.getElementById('legend');
  for (var key in icons) {
    var type = icons[key];
    var name = type.name;
    var icon = type.icon;
    var scale = type.scale;
    var opacity = type.fillOpacity;
    var div = document.createElement('div');
    div.innerHTML = "<img src='data:image/svg+xml;utf8,<svg viewBox=\"0 0 100 100\" height=\"" + 8 * scale / 8 + "\" width=\"" + 8 * scale / 8 + "\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"50\" cy=\"50\" r=\"50\" style=\"fill: green; stroke: white; stroke-width: 1;\" opacity=\"" + opacity + "\"/></svg>'> " + name;
    legend.appendChild(div);
  }

  map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(legend);

}

function getCircle(nctcount) {
  var nctamt = nctcount;
  if (nctamt <= 10) {
    return {
      path: google.maps.SymbolPath.CIRCLE,
      fillOpacity: 1,
      fillColor: 'green',
      scale: 5,
      strokeColor: 'white',
      strokeWeight: .5,
      name: "<= 10"
    };
  } else if (nctamt <= 100) {
    return {
      path: google.maps.SymbolPath.CIRCLE,
      fillOpacity: .8,
      fillColor: 'green',
      scale: 10,
      strokeColor: 'white',
      strokeWeight: .5,
      name: "<= 100"
    };
  } else if (nctamt <= 250) {
    return {
      path: google.maps.SymbolPath.CIRCLE,
      fillOpacity: .6,
      fillColor: 'green',
      scale: 15,
      strokeColor: 'white',
      strokeWeight: .5,
      name: "<= 250"
    };
  } else if (nctamt <= 500) {
    return {
      path: google.maps.SymbolPath.CIRCLE,
      fillOpacity: .4,
      fillColor: 'green ',
      scale: 20,
      strokeColor: 'white',
      strokeWeight: .5,
      name: "<= 500"
    };
  } else if (nctamt <= 2000) {
    return {
      path: google.maps.SymbolPath.CIRCLE,
      fillOpacity: .2,
      fillColor: 'green',
      scale: 25,
      strokeColor: 'white',
      strokeWeight: .5,
      name: "<= 2000"
    };
  } else {
    return {
      path: google.maps.SymbolPath.CIRCLE,
      fillOpacity: .2,
      fillColor: 'green',
      scale: 35,
      strokeColor: 'white',
      strokeWeight: .5,
      name: ">2000"
    };
  }
}

// This example creates circles on the map, representing populations in North
// America.

// First, create an object containing LatLng and population for each city.
var citymap = {
  chicago: {
    center: {
      lat: 41.878,
      lng: -87.629
    },
    population: 8
  },
  newyork: {
    center: {
      lat: 40.714,
      lng: -74.005
    },
    population: 80
  },
  losangeles: {
    center: {
      lat: 34.052,
      lng: -118.243
    },
    population: 200
  },
  vancouver: {
    center: {
      lat: 49.25,
      lng: -123.1
    },
    population: 450
  },
  dallas: {
    center: {
      lat: 32.78,
      lng: -96.80
    },
    population: 1900
  },
  omaha: {
    center: {
      lat: 41.257,
      lng: -95.935
    },
    population: 5000
  }
};
html,
body,
#map {
  height: 100%;
  margin: 0;
  padding: 0;
}

#legend {
  font-family: Arial, sans-serif;
  background: #fff;
  padding: 10px;
  margin: 10px;
  border: 3px solid #000;
}

#legend h3 {
  margin-top: 0;
}

#legend img {
  vertical-align: middle;
}
<div id="map"></div>
<div id="legend"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initMap"></script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 Google 地图创建“大小圆圈”图例 的相关文章

随机推荐

  • 声纳扫描仪引擎未启动

    我按照以下说明进行操作使用 SonarQube Scanner for Ant 进行分析 https docs sonarqube org display SCAN Analyzing with SonarQube Scanner for
  • Zend_Forms、控制器放在哪里?模型?别的地方?

    构建 Zend Forms 的代码最好放在哪里 我曾经把这个逻辑放在我的控制器中 但在我需要在不同的地方使用相同的表单后 我就放弃了这个逻辑 这意味着我必须在不同的控制器中重复创建表单 因此 我将表单创建代码移至我的模型中 这看起来正确吗
  • Swift:来自浮点的字符串而不舍入值

    建议对小数进行四舍五入 但我面临着一种情况 我只需要降低精度 输出 15 96 至 16 0 所需输出 15 96 至 15 9 Codes var value AnyObject dict valueForKey XXX var stri
  • GCC 使用 __stdcall 编译 dll

    当我们在 Visual Studio 2008 中使用 stdcall 编译 DLL 时 DLL 中的编译函数名称为 函数名 尽管当我们使用 wx dev cpp 使用 GCC 编译相同的 dll 时 GCC 会附加该函数具有的参数数量 因
  • 即时刷新 Google 可视化

    我目前正在通过谷歌可视化创建谷歌图表 我希望能够通过单击按钮刷新 更新此图表 我尝试了很多不同的方法来做到这一点 但没有一个有效 所以我正在寻找任何人都可以提出的建议 我当前的平台是 ASP net 使用 C 而 google 的东西是用
  • 为什么在 JS 类中声明的变量是“undefined”[重复]

    这个问题在这里已经有答案了 尝试在 JS 中创建一个具有权重属性的类 代码如下 function Foo var weight 10 console log weight 当我实例化它时var bar new Foo 10已记录到控制台 当
  • Django DateTimeField 从表单到 UTC

    我有一个带有表单的小型 Django 应用程序 它将一些数据保存到数据库中 表格如下 class SomeForm forms Form time forms DateTimeField 还有我保存它的视图 class AccountAdd
  • 无法写入 HKEY_LOCAL_MACHINE\Software 下的注册表

    我正在编写一个应用程序 需要创建一个隐藏在登录屏幕和控制面板用户小程序中的特殊用户帐户 通过写一个DWORD将用户名值设置为 0 并添加到下面的注册表项中 我就能够实现此目标 HKEY LOCAL MACHINE SOFTWARE Micr
  • Angular5 valuechanges() 函数发生了什么? (角火2)

    我尝试理解 valueChanges 和 subscribe 我用AngularFire2 and Angular5 我的代码可以工作 但我不明白它是如何工作的 我的组件 ngOnInit this itemService getLastU
  • 蝙蝠。使用 Firefox 打开多个 url 窗口的文件

    如何编写在Firefox的新窗口中打开多个URL的bat文件 在 chrome new window 命令中有效 但在 Firefox 中该命令是什么 尝试一下这个示例 echo off Set URL www google com www
  • 从另一个进程的输出流读取

    我想在我的 Java 程序中读取 c 应用程序的输出流 iremoted 可在此处获取 Link https web archive org web 20200505051207 http www osxbook com software
  • 正则表达式,单引号或双引号

    我有这个正则表达式 preg replace key is key newValue contents 它将数组值写入配置文件中 我需要在数组键周围允许使用单引号或双引号 但我不知道该怎么做 我没有写这个正则表达式 处理多种引用样式的常用方
  • 如何只关注 Github 上的特定问题,而不是观看整个项目? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 是否可以只关注 Github 上的特定问题 而不是观看整个项目 当一个特定问题发生更改 拉取 状态更改 新评论 时 我希望通过电子邮件收到通知 这有可
  • 使用 rvm 更新 ruby​​ 版本后收到警告消息“Path set to RVM”

    最近 由于出现警告消息 我尝试更新我的 ruby 版本 见下文 现在 当我启动 iterm2 时 我收到以下警告消息 Warning PATH set to RVM ruby but GEM HOME and or GEM PATH not
  • 如何在新算法中添加weka特征?

    我想在 weka 中添加一种新算法 在一个算法中具有分类 聚类 关联等功能 我应该如何编写代码来包含所有 weka 功能 并为这个新算法向 weka 添加一个选项卡 我已经向 weka 添加了一个虚拟算法 现在它可以工作了我想添加一个结合了
  • 如何获取按输入顺序排序的 python Counter 输出?

    我一直在努力获取计数 频率 然后制作它的图形表示 我在用Counter班级来自collections使用Python 我想要的输出Counter按照先到对象的顺序 例如 offset a b c a b b b c c c c c coun
  • WCF - 回调客户端(双工?)

    我有一个问题 不知道该选择什么解决方案 我有一台正在运行的服务器 正在运行可以从网站接收订单的服务 多个客户端 远程计算机 以某种方式连接到该服务器 我真的很想使用 WCF 进行所有通信 但不确定是否可行 我不想在路由器中配置所有客户端防火
  • 握手期间连接终止

    这真的很令人沮丧 浪费了 3 天的时间来解决 但在 Macos Catalina 版本 10 15 1 和 Windows 7 上仍然出现卡住问题 我的两台电脑显示相同的错误 第一次当我尝试 获取包裹 时 它显示了 Users mamun
  • BL 服务:异常还是方法结果?

    最好的方法是什么 为什么 V1 try var service IoC Resolve
  • 如何为 Google 地图创建“大小圆圈”图例

    我有一个自定义的谷歌地图 它使用 GeoJSON 文件中的数据创建大小的圆圈 我需要做的是创建一个图例 键来解释每个圆圈的大小代表什么 我尝试按照 Google 的指南创建自定义图例 https developers google com