高德地图, 动态绘制多个marker 并 随着地图缩放, 判定marker之间的距离, 显示不同 marker 效果

绘制 县/乡 范围; 县用大圆标识, 乡用小圆标识;
随着地图缩放倍数, 距离大圆近的小圆会被隐藏
在这里插入图片描述

在这里插入图片描述

<!doctype html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="chrome=1">
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
  <title>CircleMarker</title>
  <style type="text/css">
    html,
    body,
    #map {
      width: 100%;
      height: 100%;
      margin: 0;
    }
  </style>
  <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
  <script type="text/javascript"
    src="https://webapi.amap.com/maps?v=1.4.15&key=2cc213d13f7567d2723e87c1540625b5&plugin=AMap.MouseTool,AMap.DistrictSearch"></script>
  <script src="https://a.amap.com/jsapi_demos/static/demo-center/js/demoutils.js"></script>
</head>
</head>

<body>
  <div id="map"></div>
  <script>
    var mapZoom = 10;

    var map = new AMap.Map('map', {
      // viewMode: '3D',
      zoom: mapZoom,
      center: [110.296475, 25.276583]
    })

    var g_data = [{
      id: 'A',
      center: [110.67811, 25.617017],
      state: 1,
      name: '兴安',
      list: [
        {
          id: 'A2',
          center: [110.719504, 25.454789],
          state: 2,
          name: '白石乡',
        },
        {
          id: 'A1',
          center: [110.701107, 25.549232],
          state: 1,
          name: '崔家乡',
        }
      ]
    }, {
      id: 'B',
      center: [111.070567, 25.929973],
      state: 2,
      name: '全州',
      list: [
        {
          id: 'b2',
          center: [111.172537, 25.873726],
          state: 2,
          name: '白宝乡',
        }
      ]
    }, {
      id: 'C',
      center: [111.159831, 25.490721],
      state: 3,
      name: '灌阳',
      list: [
        {
          id: 'c2',
          center: [111.055255, 25.356615],
          state: 2,
          name: '黄关镇',
        }
      ]
    }, {
      id: 'd',
      center: [109.983031, 24.979317],
      state: 4,
      name: '永福',
      list: [
        {
          id: 'd2',
          center: [109.985912, 24.928515],
          state: 2,
          name: '广福乡',
        }
      ]
    }
    ];
    var p_data = [];
  </script>
  <script>
    //  高德判定距离
    var yuandian = '';
    var bijiaodian = '';
    var x_dis = '';
    var data1
    var xlist = []
    var xlist1 = []

    var arr_new = [];
    function test2() {
      var brr = g_data.slice();
      $.each(brr, function (i, value) {
        var arr_s = {
          id: value.id,
          name: value.name,
          center: value.center,
          state: value.state,
          list: [{ dis: '' }],
        }
        arr_new.push(arr_s)
        yuandian = brr[i].center;
        $.each(brr[i].list, function (j, value) {
          x_dis = jisuan1(yuandian, value.center)
          brr[i].list[j].dis = x_dis;
          arr_new[i].list[j] = value;
        })
      })
      screenList();
    }

    test2();

    function jisuan1(p1, p2) {
      // 返回 p1 到 p2 间的地面距离,单位:km
      var dis = AMap.GeometryUtil.distance(p1, p2) / 1000;
      var disz = Math.round(dis * 10) / 10;
      return disz;
    }

    var arr_show = [];
    var xlist = [];
    function screenList() {
      var targetDistance = 0;   //当前距离数
      var zoom = mapZoom;
      switch (zoom) {
        case 3:
          var targetDistance = 50;  //km
          break;
        case 4:
          var targetDistance = 40;  //km
          break;
        case 5:
          var targetDistance = 30;  //km
          break;
        case 6:
          var targetDistance = 21;  //km
          break;
        case 7:
          var targetDistance = 20;  //km
          break;
        case 8:
          var targetDistance = 19;  //km
          break;
        case 9:
          var targetDistance = 12;  //km
          break;
        case 10:
          var targetDistance = 5;  //km
          break;
        case 11:
          var targetDistance = 4;  //km
          break;
        case 12:
          var targetDistance = 1;  //km
          break;
        case 13:
          var targetDistance = 0.5;  //km
          break;
        default:
          var targetDistance = 0.25;  //km
      }
      arr_show = [];

      var brr = arr_new.slice();
      $.each(brr, function (i, value) {
        var arr_s = {
          id: value.id,
          name: value.name,
          center: value.center,
          state: value.state,
          list: []
        }
        arr_show.push(arr_s)
        $.each(brr[i].list, function (j, val) {
          if (zoom > 7) {
            if (val.dis > targetDistance) {
              value_n = val
            } else {
              value_n = ""
            }
            arr_show[i].list.push(value_n)
          } else {
            arr_show[i].list.push([])
            return
          }
        })
      })

      drawList(arr_show);
    }

    // 绘制cir
    var circleMarkers = [];
    function drawList(data) {
      map.clearMap();

      // 绘制县
      circleMarkers = [];
      for (var i = 0; i < data.length; i++) {
        var center = data[i].center;
        var state = data[i].state;
        if (state == 1) {
          color = "red"
        } else if (state == 2) {
          color = "orange"
        } else if (state == 3) {
          color = "yellow"
        } else {
          color = "green"
        }

        var circleMarker_x = new AMap.CircleMarker({
          center: center,
          // radius: 10 + Math.random() * 10,//3D视图下,CircleMarker半径不要超过64px
          radius: 40,//3D视图下,CircleMarker半径不要超过64px
          strokeColor: 'white',
          strokeWeight: 2,
          strokeOpacity: 0.5,
          fillColor: color,
          fillOpacity: 0.5,
          zIndex: 10,
          bubble: true,
          cursor: 'pointer',
          clickable: true
        })
        circleMarkers.push(circleMarker_x);
        map.add(circleMarker_x);

        // 绘制乡
        for (var j = 0; j < data[i].list.length; j += 1) {
          var list = data[i].list;
          var center = list[j].center;
          var state = list[j].state;
          if (state == 1) {
            color = "red"
          } else if (state == 2) {
            color = "orange"
          } else if (state == 3) {
            color = "yellow"
          } else {
            color = "green"
          }
          var circleMarker_s = new AMap.CircleMarker({
            center: center,
            // radius: 10 + Math.random() * 10,//3D视图下,CircleMarker半径不要超过64px
            radius: 20,//3D视图下,CircleMarker半径不要超过64px
            strokeColor: 'white',
            strokeWeight: 2,
            strokeOpacity: 0.5,
            fillColor: color,
            fillOpacity: 0.5,
            zIndex: 10,
            bubble: true,
            cursor: 'pointer',
            clickable: true
          })
          //circleMarker.setMap(map);
          map.add(circleMarker_s);
        }
      }
    }

    //绑定地图缩放事件
    $(document).on("mousewheel DOMMouseScroll", function (e) {
      var delta = (e.originalEvent.wheelDelta && (e.originalEvent.wheelDelta > 0 ? 1 : -1)) ||  // chrome & ie
        (e.originalEvent.detail && (e.originalEvent.detail > 0 ? -1 : 1));              // firefox
      if (delta > 0) {
        // 向上滚
        addmap();
      } else if (delta < 0) {
        // 向下滚
        pushmap();
      }
    });

    function addmap() {
      if (mapZoom < 15) {
        mapZoom = mapZoom + 1;
        map.setZoom(mapZoom);
        screenList();
      }
      if (mapZoom < 9) {
        map.remove(circleMarkers);
      }
    }

    function pushmap() {
      if (mapZoom > 3) {
        mapZoom = mapZoom - 1;
        map.setZoom(mapZoom);
        screenList();
      }
      if (mapZoom < 9) {
        map.remove(circleMarkers);
      }
    }
  </script>
</body>
</html>
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值