高德地图行政区划浏览功能

功能:1.点击高德地图的某块区划获取点击点击的区划名称追加到右侧待分析框中,并且让点击的区划高亮

           2.右侧框中点击删除的时候删除当前点击的数据,并且让地图行政区中同名的地块取消高亮

功能图片展示--只有一级生态区

直接贴代码

export default {
  name: 'App',
   data(){
    return {
        cancelMapColor:null, //取取消的function
    };
   },
    methods:{
      
      loadMap(){  
      //  this.reload();
          let googleLayer = new AMap.TileLayer({
            getTileUrl:
              "http://mt{1,2,3,0}.google.cn/vt/lyrs=s&hl=zh-CN&gl=cn&x=[x]&y=[y]&z=[z]&s=Galile"
          });
          let roadNetLayer = new AMap.TileLayer.RoadNet();

          let map = new AMap.Map("mapMain_container", {
            resizeEnable: true,
            center: [116.397428, 39.90923],
            layers: [googleLayer, roadNetLayer],
            zoom: 6
          });

          

          let pro = [];
          let _this = this;

          AMapUI.load(['ui/geo/DistrictExplorer', 'lib/$'], function(DistrictExplorer, $) {

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

              //创建一个实例
              var districtExplorer = new DistrictExplorer({
                  eventSupport: true, //打开事件支持
                  map: map
              });

              //当前聚焦的区域
              var currentAreaNode = null;

              //鼠标hover提示内容
              var $tipMarkerContent = $('<div class="tipMarker top"></div>');

              var tipMarker = new AMap.Marker({
                  content: $tipMarkerContent.get(0),
                  offset: new AMap.Pixel(0, 0),
                  bubble: true
              });

              let polyGroup;
              let featureArr = []; //存已选行政区


              //删除生态区的时候取消高亮点
              _this.cancelMapColorfunction  = function cancelClickFeature(feature) {
                for(let i=0;i<featureArr.length;i++){
                  if(featureArr[i].properties.name == _this.deleteName){ //如果已经选择的行政区中存在要删除的
                     let adcode =  featureArr[i].properties.adcode; //获取当前要删除行政区的code
                     featureArr.splice(i,1); //从数组中删除
                     var polysDelete = districtExplorer.findFeaturePolygonsByAdcode(adcode); //筛选符合code的行政区
                      for (var i = 0, len = polysDelete.length; i < len; i++) {
                          polysDelete[i].setOptions({ //设置透明度
                              fillOpacity: 0.35,
                          });
                      }  
                  }
                }
              }

              //点击地图高亮
              function ClickFeature(feature) {
                  var props = feature.properties;
                  //更新相关多边形的样式  
                  var polys = districtExplorer.findFeaturePolygonsByAdcode(props.adcode);
                  for (var i = 0, len = polys.length; i < len; i++) {
                      polys[i].setOptions({
                          fillOpacity: 1,
                      });
                  }
              }

              //根据Hover状态设置相关样式
              function toggleHoverFeature(feature, isHover, position) {

                  tipMarker.setMap(isHover ? map : null);

                  if (!feature) {
                      return;
                  }
                  var props = feature.properties;

                  if (isHover) {
                      //更新提示内容
                      $tipMarkerContent.html(props.adcode + ': ' + props.name);
                      //更新位置
                      tipMarker.setPosition(position || props.center);
                  }
              }

              //监听feature的hover事件
              districtExplorer.on('featureMouseout featureMouseover', function(e, feature) {
                  toggleHoverFeature(feature, e.type === 'featureMouseover',
                      e.originalEvent ? e.originalEvent.lnglat : null);
              });

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

              //feature被点击
              districtExplorer.on('featureClick', function(e, feature) {

                  ClickFeature(feature); //高亮
                  featureArr.push(feature);
                         
                  //获取点击的城市或者县
                  var props = feature.properties; //行政区详情
                  var province = props.name; //行政区名称
                  var location = feature.properties.center; //行政区中心点
                  if(pro.length == 0){
                      pro.push(province);
                  }
                  else{
                    let flag;
                    for(let i = 0;i < pro.length;i++){
                      if(province == pro[i]){
                        flag = true; //如果内容一样,说明数组中存在此数组
                      }
                    }
                    if(!flag){
                      pro.push(province);
                    }
                  }                 
              });


              //填充某个节点的子区域列表
              function renderAreaPanel(areaNode) {

                  var props = areaNode.getProps();

                  var subFeatures = areaNode.getSubFeatures();
              }

              //绘制某个区域的边界
              function renderAreaPolygons(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, //填充透明度
                      };
                  });
              }

              //切换区域后刷新显示内容
              function refreshAreaNode(areaNode) {

                  districtExplorer.setHoverFeature(null);

                  renderAreaPolygons(areaNode);
              }

              //切换区域
              function switch2AreaNode(adcode, callback) {

                  if (currentAreaNode && ('' + currentAreaNode.getAdcode() === '' + adcode)) {
                      return;
                  }

                  loadAreaNode(adcode, function(error, areaNode) {
                      currentAreaNode = window.currentAreaNode = areaNode;

                      //设置当前使用的定位用节点
                      districtExplorer.setAreaNodesForLocating([currentAreaNode]);

                      refreshAreaNode(areaNode);

                      if (callback) {
                          callback(null, areaNode);
                      }
                  });
              }

              //加载区域
              function loadAreaNode(adcode, callback) {
                  districtExplorer.loadAreaNode(adcode, function(error, areaNode) {
                      // renderAreaPanel(areaNode);
                      if (callback) {
                          callback(null, areaNode);
                      }
                  });
              }
              //全国
              switch2AreaNode(100000);      
          })
          this.provinceArr = pro;
         
      },
      //待分析区域删除按钮
      deletePro(name,index){
        for(let i = 0 ; i < this.provinceArr.length ; i++){
          if(this.provinceArr[i] == name){
            this.provinceArr.splice(i,1);
            this.deleteName = name;
            this.cancelMapColorfunction();
          }
        }
      },
  }
}

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 高德地图行政区划集合是指在 Vue 框架中使用高德地图 API 来展示和管理行政区划相关的功能和数据。 首先,在使用 Vue 框架中可以通过安装高德地图相关的插件来引入高德地图 API ,可以使用 npm 或者 yarn 来进行安装。然后在 Vue 组件中使用 import 引入地图相关的组件。 其次,可以使用高德地图提供的行政区划 API 来获取各级行政区划的数据。可以根据需要选择完整的行政区划数据还是特定范围的行政区划数据。获取到数据后,可以在 Vue 组件中进行处理和展示,例如使用 v-for 指令循环遍历数据,生成相应的列表或者地图区域。 在展示行政区划数据的过程中,可以利用高德地图的相关功能进行交互和样式定制。比如可以使用高德地图提供的 GeoJSON 数据和样式进行地图的绘制,根据行政区划的不同级别设置不同的显示效果。 对于行政区划数据的操作,可以使用高德地图提供的方法进行搜索、过滤和排序等功能。可以根据用户的搜索条件来展示特定的行政区划数据,并将结果反馈给用户。 除此之外,还可以结合 Vue 的双向绑定和事件机制来实现一些业务逻辑。比如根据用户的选择显示相应的行政区划信息,或者在地图上通过点击或者拖动来交互地选择特定的行政区划。 总结来说,Vue 高德地图行政区划集合是通过结合 Vue 框架和高德地图 API 来展示和管理行政区划相关功能和数据的一个解决方案。通过使用相关的插件和方法,可以实现用户界面的展示和交互效果,以及对行政区划数据的操作和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值