高德地图 Web JS API UI组件示例学习笔记(6)——行政区划浏览

事件处理

DistrictExplorer下的各类事件的处理方法。
本示例根据adcode绘制了相应区域,并监听了要素的悬浮(featureMouseout、featureMouseover)、featureMousemove、featureClick、outsideClick等事件

AMapUI.loadUI(['geo/DistrictExplorer'], function (DistrictExplorer) {
      //创建一个实例
      var districtExplorer = new DistrictExplorer({
        eventSupport: true,
        map: map
      });

      //创建一个辅助Marker,提示鼠标内容
      var tipMarker = new AMap.Marker({
        //启用冒泡,否则click事件会被marker自己拦截
        bubble: true
      });

      //监听feature的hover事件
      districtExplorer.on('featureMouseout featureMouseover', function (e, feature) {
        var isHover = e.type === 'featureMouseover';
        // 如果不存在悬浮,清空tipMarker
        if (!isHover) {
          tipMarker.setMap(null);
          return;
        }
        // 添加tipMarker
        tipMarker.setMap(map);
        // 设置tipMarker的坐标
        tipMarker.setPosition(e.originalEvent.lnglat);
        // 设置tipMarker显示的内容
        tipMarker.setLabel({
          offset: new AMap.Pixel(20, 20),
          content: feature.properties.name
        });

      });

      //监听鼠标在feature上滑动
      districtExplorer.on('featureMousemove', function (e, feature) {
        //更新提示位置
        tipMarker.setPosition(e.originalEvent.lnglat);
      });

      //feature被点击
      districtExplorer.on('featureClick', function (e, feature) {
        console.log('点击: ' + feature.properties.name);
      });

      //外部区域被点击
      districtExplorer.on('outsideClick', function (e) {
        console.log('区域外点击');
      });

      function renderAreaNode(areaNode) {
        // 310000表示上海市编码
        // 330100表示浙江省杭州市编码
        // 330200表示浙江省宁波市编码
        if ([310000, 330100, 330200].indexOf(areaNode.getAdcode()) >= 0) {
          //绘制子区域
          districtExplorer.renderSubFeatures(areaNode, function (feature, i) {
            var fillColor = colors[i % colors.length];
            var strokeColor = colors[colors.length - 1 - i % colors.length];
            return {
              cursor: 'default',
              bubble: true,
              strokeColor: strokeColor, //线颜色
              strokeOpacity: 1, //线透明度
              strokeWeight: 1, //线宽
              fillColor: fillColor, //填充色
              fillOpacity: 0.35, //填充透明度
            };
          });
        }

        //绘制父区域
        districtExplorer.renderParentFeature(areaNode, {
          cursor: 'default',
          bubble: true,
          strokeColor: 'black', //线颜色
          strokeOpacity: 1, //线透明度
          strokeWeight: 1, //线宽
          fillColor: 'gray', //填充色
          fillOpacity: 0.2, //填充透明度
        });
      }

      var adcodes = [
        310000, //上海
        330100, //杭州
        330200, //宁波
        330000 //浙江
      ];

      districtExplorer.loadMultiAreaNodes(adcodes, function (error, areaNodes) {
        //设置定位节点,支持鼠标位置识别
        //注意节点的顺序,前面的高优先级
        districtExplorer.setAreaNodesForLocating(areaNodes);

        //清除已有的绘制内容
        districtExplorer.clearFeaturePolygons();
        // 渲染区域
        for (var i = 0, len = areaNodes.length; i < len; i++) {
          renderAreaNode(areaNodes[i]);
        }

        //更新地图视野
        map.setFitView(districtExplorer.getAllFeaturePolygons());
      });
    });

单区域加载(重点)

使用DistrictExplorer实现单区域加载。
父区域可根据情况绘制,不是强制绘制。
在这里插入图片描述

//just some colors
    var colors = [
        "#3366cc", "#dc3912", "#ff9900", "#109618", "#990099", "#0099c6", "#dd4477", "#66aa00",
        "#b82e2e", "#316395", "#994499", "#22aa99", "#aaaa11", "#6633cc", "#e67300", "#8b0707",
        "#651067", "#329262", "#5574a6", "#3b3eac"
    ];

    AMapUI.loadUI(['geo/DistrictExplorer'], function(DistrictExplorer) {
        //创建一个实例
        var districtExplorer = new DistrictExplorer({
            map: map
        });
        var adcode = 100000;
        districtExplorer.loadAreaNode(adcode, function(error, areaNode) {
            //更新地图视野
            map.setBounds(areaNode.getBounds(), null, null, true);
            //清除已有的绘制内容
            districtExplorer.clearFeaturePolygons();
            //绘制子区域
            districtExplorer.renderSubFeatures(areaNode, function(feature, i) {
                var fillColor = colors[i % colors.length];
                var strokeColor = colors[colors.length - 1 - i % colors.length];
                return {
                    cursor: 'default',
                    bubble: true,
                    strokeColor: strokeColor, //线颜色
                    strokeOpacity: 1, //线透明度
                    strokeWeight: 1, //线宽
                    fillColor: fillColor, //填充色
                    fillOpacity: 0.35, //填充透明度
                };
            });

            //绘制父区域
            districtExplorer.renderParentFeature(areaNode, {
                cursor: 'default',
                bubble: true,
                strokeColor: 'black', //线颜色
                strokeOpacity: 1, //线透明度
                strokeWeight: 1, //线宽
                fillColor: null, //填充色
                fillOpacity: 0.35, //填充透明度
            });
        });
    });

多区域加载(重点)

使用DistrictExplorer实现多区域加载。
调用districtExplorer实例的loadMultiAreaNodes方法,传入多区域的adcodes数组,就相应渲染出对应区域。
在这里插入图片描述

//just some colors
    var colors = [
        "#3366cc", "#dc3912", "#ff9900", "#109618", "#990099", "#0099c6", "#dd4477", "#66aa00",
        "#b82e2e", "#316395", "#994499", "#22aa99", "#aaaa11", "#6633cc", "#e67300", "#8b0707",
        "#651067", "#329262", "#5574a6", "#3b3eac"
    ];

    AMapUI.loadUI(['geo/DistrictExplorer'], function(DistrictExplorer) {
        //创建一个实例
        var districtExplorer = new DistrictExplorer({
            map: map
        });

        function renderAreaNode(areaNode) {
            //绘制子区域
            districtExplorer.renderSubFeatures(areaNode, function(feature, i) {
                var fillColor = colors[i % colors.length];
                var strokeColor = colors[colors.length - 1 - i % colors.length];
                return {
                    cursor: 'default',
                    bubble: true,
                    strokeColor: strokeColor, //线颜色
                    strokeOpacity: 1, //线透明度
                    strokeWeight: 1, //线宽
                    fillColor: fillColor, //填充色
                    fillOpacity: 0.35, //填充透明度
                };
            });

            //绘制父区域
            districtExplorer.renderParentFeature(areaNode, {
                cursor: 'default',
                bubble: true,
                strokeColor: 'black', //线颜色
                strokeOpacity: 1, //线透明度
                strokeWeight: 1, //线宽
                fillColor: null, //填充色
                fillOpacity: 0.35, //填充透明度
            });
        }
		
        var adcodes = [310000, 330100, 330200];
        districtExplorer.loadMultiAreaNodes(adcodes, function(error, areaNodes) {
            //清除已有的绘制内容
            districtExplorer.clearFeaturePolygons();
            for (var i = 0, len = areaNodes.length; i < len; i++) {
                renderAreaNode(areaNodes[i]);
            }
            //更新地图视野
            map.setFitView(districtExplorer.getAllFeaturePolygons());
        });
    });

反向镂空区域

使用DistrictExplorer实现反向镂空区域效果。采用的是绘制带洞多边形的原理,先放入全国的边界坐标,再塞入镂空区域的坐标。
在这里插入图片描述

AMapUI.loadUI(['geo/DistrictExplorer'], function (DistrictExplorer) {
      initPage(DistrictExplorer);
    });

    function getAllRings(feature) {
      var coords = feature.geometry.coordinates,
        rings = [];
      for (var i = 0, len = coords.length; i < len; i++) {
        rings.push(coords[i][0]);
      }
      return rings;
    }

    function getLongestRing(feature) {
      var rings = getAllRings(feature);
      rings.sort(function (a, b) {
        return b.length - a.length;
      });
      return rings[0];
    }

    function initPage(DistrictExplorer) {
      //创建一个实例
      var districtExplorer = new DistrictExplorer({
        map: map
      });

      var countryCode = 100000, //全国
        provCodes = [
          110000, //北京
          510000 //四川
        ],
        cityCodes = [
          230100, //哈尔滨
          331100 //丽水
        ];

      districtExplorer.loadMultiAreaNodes(
        //只需加载全国和市,全国的节点包含省级
        [countryCode].concat(cityCodes),
        function (error, areaNodes) {
          var countryNode = areaNodes[0],
            cityNodes = areaNodes.slice(1);
          var path = [];
          //首先放置背景区域,这里是大陆的边界
          path.push(getLongestRing(countryNode.getParentFeature()));

          for (var i = 0, len = provCodes.length; i < len; i++) {
            //逐个放置需要镂空的省级区域
            path.push.apply(path, getAllRings(countryNode.getSubFeatureByAdcode(provCodes[i])));
          }

          for (var i = 0, len = cityNodes.length; i < len; i++) {
            //逐个放置需要镂空的市级区域
            path.push.apply(path, getAllRings(cityNodes[i].getParentFeature()));
          }

          //绘制带环多边形
          //https://lbs.amap.com/api/javascript-api/reference/overlay#Polygon
          var polygon = new AMap.Polygon({
            bubble: true,
            lineJoin: 'round',
            strokeColor: 'red', //线颜色
            strokeOpacity: 1, //线透明度
            strokeWeight: 1, //线宽
            fillColor: 'black', //填充色
            fillOpacity: 0.65, //填充透明度
            map: map,
            path: path
          });
        });
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: AMapUI.loadUI高德地图 JavaScript API 的一个 UI 组件加载器。它可以方便地加载和使用高德地图UI 组件,如点聚合、信息窗体等。它的使用方法如下: ```javascript AMapUI.loadUI(['ui/component/1.0/component'], function(Component) { // 在这里使用 Component 组件 }); ``` 其中,`ui/component/1.0/component` 是需要加载的组件名称,可以根据需要替换成其他组件名称。在加载完成后,回调函数会返回一个 Component 对象,可以通过该对象来使用对应的组件功能。 ### 回答2: AMapUI.loadUI是一个高德地图APIUI模块加载器,用于加载高德地图UI组件和插件。通过该方法,我们可以方便地在网页中嵌入各种高德地图的界面元素,如地图控件、工具栏、信息窗体等。 AMapUI.loadUI的使用方法非常简单,只需在需要加载UI模块的地方调用该方法,并指定需要加载的模块名称。加载过程是异步的,因此需要通过回调函数来处理加载完成后的操作。例如,我们可以使用以下代码来加载地图的工具栏组件: AMapUI.loadUI(['control/BasicControl'], function(BasicControl) { var map = new AMap.Map('mapContainer'); map.plugin(new BasicControl()); }); 上面的代码中,我们首先通过AMapUI.loadUI方法加载了control/BasicControl模块,然后在回调函数中创建了一个地图实例,并通过plugin方法将BasicControl组件添加到地图中。 除了加载地图的UI组件,AMapUI.loadUI还可以加载一些实用的插件,如路径规划、定位等。不同的模块需要加载不同的参数,可以根据高德地图API文档中的说明来使用。 总之,AMapUI.loadUI是一个非常方便的工具,可以帮助我们快速加载和使用高德地图UI组件和插件,提升地图应用的用户体验。 ### 回答3: AMapUI.loadUI是一个高德地图开放平台提供的JavaScript库,用于加载和使用高德地图UI组件和相关功能。 AMapUI.loadUI的功能非常丰富。它可以加载地图控件、插件和模块,包括但不限于定位控件、比例尺控件、缩放控件、鹰眼插件、工具条插件、路径规划模块、地点搜索模块等等。这些组件和功能可以让开发者在网页上实现交互式地图显示和操作,提供更多的地图功能和服务。 使用AMapUI.loadUI,我们可以通过两种方法加载地图UI组件。一种是按需加载,即在需要使用某个UI组件时,通过AMapUI.loadUI方法动态加载该组件。另一种是一次性加载,即在初始化地图时,通过AMapUI.loadUI方法加载所有需要的组件,并在地图加载完成后直接使用。 在加载UI组件时,我们可以通过设置一些参数来定制组件的外观和行为。比如设置缩放控件的位置、样式和显示级别,设置路径规划模块的起点和终点,设置地点搜索模块的搜索关键词等等。 总结来说,AMapUI.loadUI是一个非常实用的JavaScript库,可以帮助开发者在网页上轻松加载和使用高德地图UI组件和相关功能。无论是开发交互式地图网站,还是实现路径规划、地点搜索等功能,AMapUI.loadUI都能提供强大的支持。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值