在vue中使用高德地图的上浮下钻—最简单明了的方法(无需后台接口渲染文字marker)

2023-11-16

在vue中使用高德地图的上浮下钻—最简单明了的方法(无需后台接口渲染文字marker)

第一步:

安装vue-amap:

npm i vue-amap -S

第二步:

配置main.js

import VueAMap from 'vue-amap'
Vue.use(VueAMap);
VueAMap.initAMapApiLoader({
  key: '你的key',
  plugin: ['AMap.Autocomplete', 'AMap.PlaceSearch', 'AMap.Scale', 'AMap.OverView', 'AMap.ToolBar', 'AMap.MapType', 'AMap.PolyEditor', 'AMap.CircleEditor','AMap.ControlBar','AMap.MouseTool','AMap.GeometryUtil','AMap.DistrictSearch'],
  // 默认高德 sdk 版本为 1.4.4
  v: '1.4.4',
  uiVersion:'1.0.11'
});

第三步:

代码

<template >
  <el-container id="container"> </el-container>
</template>
<script>
export default {
  data() {
    return {
      marker: {}, //点标记
      markers: [], //点集合
      map: {} //地图对象
    };
  },
  methods: {
    //初始化地图
    initMap() {
      //创建地图
      this.map = new AMap.Map("container", {
        cursor: "default",
        resizeEnable: true, //是否监控地图容器尺寸变化,默认值为false
        expandZoomRange: true, //是否支持可以扩展最大缩放级别,和zooms属性配合使用设置为true的时候,zooms的最大级别在PC上可以扩大到20级,移动端还是高清19/非高清20
        // gestureHandling: "greedy",//谷歌里面的// hybrid包含卫星和地名
        zooms: [3, 20],
        zoom: 8,
        defaultCursor: "pointer", //变成小手 地图默认鼠标样式。参数defaultCursor应符合CSS的cursor属性规范
        showLabel: true, //显示地图文字标记
        layers: [
          new AMap.TileLayer.Satellite() //默认卫星
          // new AMap.TileLayer.RoadNet(), //地图路网
          // new AMap.Buildings({// 楼块图层
          //   zooms: [16, 18],
          //   zIndex: 10,
          //   heightFactor: 2 //2倍于默认高度,3D下有效
          // })
        ] //Satellite卫星地图,RoadNet路网,地图图层数组,数组可以是图层 中的一个或多个,默认为普通二维地图。当叠加多个图层时,普通二维地图需通过实例化一个TileLayer类实现
        // viewMode: "3D", //是否3d视角
        // pitch: 40 //俯仰角度,默认0,[0,83],2D地图下无效 。(自V1.4.0开始支持)
      });
      
      //行政区域
      AMapUI.loadUI(["geo/DistrictExplorer"], DistrictExplorer => {
        //创建一个实例
        var districtExplorer = new DistrictExplorer({
          eventSupport: true,
          map: this.map
        });
        //feature被点击
        // districtExplorer.on("featureClick", (e, feature) => {});
        //外部区域被点击
        // districtExplorer.on("outsideClick", e => {});

        //内部区域feature被点击
        districtExplorer.on("featureClick", (e, feature) => {
          console.log("feature", feature);
          adcodes = []; //清空区码数组
          adcodes = [feature.properties.adcode]; //绘制地图区域
          // this.initCity(feature); //调用city城市地图
          districtExplorer.loadMultiAreaNodes(adcodes, (error, areaNodes) => {
            //设置定位节点,支持鼠标位置识别
            console.log("areaNodes", areaNodes);
            //注意节点的顺序,前面的高优先级
            districtExplorer.setAreaNodesForLocating(areaNodes);
            //清除已有的绘制内容
            districtExplorer.clearFeaturePolygons();
            for (var i = 0, len = areaNodes.length; i < len; i++) {
              renderAreaNode(areaNodes[i]);
              this.initTown(areaNodes[i]);
            }
            //更新地图视野
            this.map.setFitView(districtExplorer.getAllFeaturePolygons());
          });
        });
        //外部区域被点击
        districtExplorer.on("outsideClick", e => {
          this.removeArea(); //清除地图上的文字marker标记
          //setTimeout(() => {
            //this.map.setCenter([119.92, 28.45]); //设置地图中心
          //}, 1000);

          /***清空监听的项目名称id和adcode***/
          adcodes = [];
          adcodes = [
            330000 //浙江
          ];
          // this.initCity(); //获取城市区域
          districtExplorer.loadMultiAreaNodes(adcodes, (error, areaNodes) => {
            //设置定位节点,支持鼠标位置识别
            //注意节点的顺序,前面的高优先级
            districtExplorer.setAreaNodesForLocating(areaNodes);
            //清除已有的绘制内容
            districtExplorer.clearFeaturePolygons();
            for (var i = 0, len = areaNodes.length; i < len; i++) {
              renderAreaNode(areaNodes[i]);
              this.initTown(areaNodes[i]);
            }
            //更新地图视野 下钻上浮效果
            this.map.setFitView(districtExplorer.getAllFeaturePolygons());
          });
        });

        //设置绘制的子区域和父区域的自身属性(包括线颜色,透明度等)
        function renderAreaNode(areaNode) {
          //绘制子级区划
          districtExplorer.renderSubFeatures(areaNode, function(feature, i) {
            return {
              cursor: "default",
              bubble: true,
              // strokeColor: "#00a4ce", //线颜色
              strokeColor: "#03d7a1",
              strokeOpacity: 1, //线透明度
              strokeWeight: 1.5, //线宽
              // fillColor: "#09152a", //填充色
              fillColor: "#072942",
              fillOpacity: 0.1 //填充透明度
            };
          });
          //绘制父区域
          districtExplorer.renderParentFeature(areaNode, {
            cursor: "default",
            bubble: true,
            // strokeColor: "#00a4ce", //线颜色
            strokeColor: "#03d7a1",
            strokeOpacity: 1, //线透明度
            strokeWeight: 1.5, //线宽
            // fillColor: "#09152a", //填充色
            fillColor: "#072942",
            fillOpacity: 0.5 //填充透明度
          });
        }
        var adcodes = [];
        //根据角色来绘制不同的区域
        adcodes = [
          330000 //浙江
        ];
        // this.initCity();
        //绘制多区域
        districtExplorer.loadMultiAreaNodes(adcodes, (error, areaNodes) => {
          //设置定位节点,支持鼠标位置识别
          //注意节点的顺序,前面的高优先级
          districtExplorer.setAreaNodesForLocating(areaNodes);
          //清除已有的绘制内容
          districtExplorer.clearFeaturePolygons();
          for (var i = 0, len = areaNodes.length; i < len; i++) {
            renderAreaNode(areaNodes[i]);
            this.initTown(areaNodes[i]);
          }
          //更新地图视野 下钻效果
          this.map.setFitView(districtExplorer.getAllFeaturePolygons());
        });
      });

      //AMap.DistrictSearch 行政区查询服务,提供行政区相关信息    这里实际上就是挖一个只有浙江省的空白覆盖区域,外部不让点击
      // new AMap.DistrictSearch({
      //   extensions: "all",
      //   subdistrict: 0
      // }).search("浙江省", (status, result) => {
      //   // 外多边形坐标数组和内多边形坐标数组
      //   var outer = [
      //     new AMap.LngLat(-360, 90, true),
      //     new AMap.LngLat(-360, -90, true),
      //     new AMap.LngLat(360, -90, true),
      //     new AMap.LngLat(360, 90, true)
      //   ];
      //   var holes = result.districtList[0].boundaries;

      //   var pathArray = [outer];
      //   pathArray.push.apply(pathArray, holes);
      //   var polygon = new AMap.Polygon({
      //     pathL: pathArray,
      //     strokeColor: "#0d4f50",
      //     strokeWeight: 1,
      //     fillColor: "#0d4f50",
      //     fillOpacity: 0.5
      //   });
      //   polygon.setPath(pathArray);
      //   this.map.add(polygon); //添加多边形 外部区域不让点了
      // });
    },

    /**各市级地图***这里要想渲染点标记就需要后台接口给你全部数据来循环里面的详细内容或者自己点出来*****/
    initCity(feature) {
      
      if (
        feature.properties.adcode == undefined ||
        feature.properties.adcode == null ||
        feature.properties.adcode == ""
      ) {
        adcode = "";
      }
      this.removeArea(); //清空文字点标记
      this.marker = new AMap.Marker({
        content: `<h1 class ="markerCss">${feature.properties.name} </h1>`,
        position: [feature.properties.center[0], feature.properties.center[1]],
        offset: new AMap.Pixel(0, 0)
      });
      this.markers.push(this.marker);
      this.map.add(this.markers);
    },
    //多个县级名称
    initTown(AreaNode) {
      
      if (
        AreaNode.adcode == undefined ||
        AreaNode.adcode == null ||
        AreaNode.adcode == ""
      ) {
        adcode = "";
      }
      this.removeArea(); //清空文字点标记
      if (AreaNode._data.geoData.lngLatSubList) {
        AreaNode._data.geoData.lngLatSubList.forEach(item => {
          this.marker = new AMap.Marker({
            content: `<h1 class ="markerCss">${item.properties.name} </h1>`,
            position: [item.properties.center[0], item.properties.center[1]],
            offset: new AMap.Pixel(0, 0)
          });
          this.markers.push(this.marker);
        });
      }else{
        this.initCity(AreaNode._data.geoData.parent)
      }

      this.map.add(this.markers);
    },
    /******清空省市区域坐标**/
    removeArea() {
      this.map.remove(this.markers);
      this.markers = [];
    },
    

  },
  mounted() {
    setTimeout(() => {
      this.initMap();
    }, 2000);
  },
  beforeDestroy() {}
};
</script>
<style lang="less">
#container {
  height: calc(100% - 100px);
  width: 100%;
  background-color: pink;
}
.markerCss {
  font-size: 16px;
  font-weight: 700;
  color: #fff;
}
</style>

最后:

有啥看不明白的或者有更好得方法朋友,可以评论留言,欢迎交流

效果图

最外层
在这里插入图片描述
点击一层
在这里插入图片描述
再点击一层
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在vue中使用高德地图的上浮下钻—最简单明了的方法(无需后台接口渲染文字marker) 的相关文章

  • FLatten Transformer 简化版Transformer

    今天在找论文时 看到一篇比较新奇的论文 在这里跟大家分享一下 希望可以给一些人提供一些思路 虽然现在Transformer 比较火 在分割上面也应用的比较多 但是我一直不喜欢用 其中一个原因是结构太复杂了 平时我主要用一个sel atten

随机推荐

  • Java正则工具类:字母数字下划线、数据库url校验等

    文章目录 前言 一 正则基础语法 二 正则工具类 总结 前言 本文内容观摩的是其他作者的代码 在基础上增加修改了一些 参考原文地址 java用正则表达式 提示 以下是本篇文章正文内容 下面案例可供参考 一 正则基础语法 字符 描述 匹配输入
  • RabbitMQ --- 惰性队列、MQ集群

    一 惰性队列 1 1 消息堆积问题 当生产者发送消息的速度超过了消费者处理消息的速度 就会导致队列中的消息堆积 直到队列存储消息达到上限 之后发送的消息就会成为死信 可能会被丢弃 这就是消息堆积问题 解决消息堆积有三种思路 增加更多消费者
  • Numpy中的转换成数组的array函数(更新中)

    今天给大家讲解一下图像处理和深度学习里面一个常用的函数array array的功能是接收一个多位置数 例如列表list 元 组tuple等 列表 list1 1 2 3 list2 1 2 3 list3 1 2 3 元组 tuple 1
  • 单片机串口时序与TTL电平

    串口是一个广义的概念 这是单讲单片机的串口UART 以及单片机的TTL电平 主要是记录一下自己忘了还能再看一下 1 TTL电平标准 输出 L lt 0 8V H gt 2 4V 输入 L lt 1 2V H gt 2 0V TTL器件输出低
  • VTK笔记-体绘制-vtkVolume

    体渲染 体渲染是一个用于描述3D数据渲染过程的术语 这里的3D数据是指其属性信息遍及3D空间 而不是一个在3D空间中的2D曲面 面渲染是对数据的表面或者一个抽取的轮廓进行渲染 是通过对面上的标量属性进行显示的 面渲染能显示其表面或者一个抽取
  • 常用数据结构与算法:二叉堆(binary heap)

    一 什么是二叉堆 二 二叉堆的实现 三 使用二叉堆的几个例子 一 什么是二叉堆 1 1 二叉堆简介 二叉堆故名思议是一种特殊的堆 二叉堆具有堆的性质 父节点的 键值 总是大于或等于 小于或等于 任何一个子节点的键值 二叉堆又具有二叉树的性质
  • vue 集成file-saver和xlsx 实现前端表格导出

    1 npm安装 npm install xlsx save npm install file saver save 2 创建export js import FileSaver from file saver import as XLSX
  • ntp时间同步软件_MES、SCADA项目中的时间同步—S7-1500和PC通过NTP进行时间同步

    写在面前 文中链接仅在微信公众号有效 大家好 我是小智 智能制造之家号主 前面我们在谈到MES SCADA项目的时候 更多的是从网络 从通讯协议 从数据采集方向去阐述 比如网络丢包 比如modbus TCP 比如S7 COMM 又比如网络冗
  • 踩坑之路(jpa的批量插入) Oracle

    今天做项目的一个需求 需要把其他地方的数据存储到本地数据里面 没想到一次踩了两个坑 因为需要保存的数据很大 而且每天都需要保存一次 第一次用的jpa的saveAll方法 测试了一遍 保存下来总共花了50分钟 老大看时间的太慢了 提醒了我一下
  • day10-Dom操作

    js Dom 概述 1 通过js获取页面上的元素 2 操作元素 2 1 操作元素的样式 2 2 操作元素的类名 2 3 操作元素属性 2 4 操作元素的内容 2 5 获取元素在dom中的一些信息 3 利用js来生成 添加 删除 修改 克隆元
  • 盘点一个Python自动化办公需求——获取文件夹下所以文件夹的名字,并存excel为一列

    01 前言 这个事情还得从前几天在Python最强王者群 东哥 问了一个Python自动化办公处理的问题 需求倒是不难 一起来看看吧 02 实现过程 这里 wangning 又给了一个答案 他自己之前整理的文章 不过需要自己稍微修改下才行
  • 几种硬盘IO性能测试工具

    dd工具 操作系统 ubuntu 12 04 测试工具 dd 版本 8 21 执行dd version来查看 工具说明 dd命令能粗略测试硬盘IO性能 不足 执行dd命令测试硬盘IO性能 对硬盘的损害很大 不建议多次或长时间尝试 测试命令
  • POSTMAN提取接口返回值

    记录一下 创建一个请求在Tests模块写入提取方法 如图 可点击右侧 Set a globals variable 直接生成写入全局变量语句 set token tk 中的 token为全局变量名称 切记后边的tk 变量名 不要加引号 写好
  • json按照key排序c语言实现,Json中的key类型

    JSON JavaScript Object Notation 是一种轻量级的数据交换格式 易于人阅读和编写 同时也易于机器解析和生成 它基于JavaScript Programming Language Standard ECMA 262
  • 一款集成ST-link下载及虚拟串口的STM32F103C8T6最小系统板设计

    前言 在以前的STM32单片机应用中 经常使用STM32F103C8T6最小系统板 小蓝板 作为主控 程序下载和串口交互都需要额外器件和接线 程序下载的话要用到ST link 串口交互用到USB TTL 常见的样子就下面这样吧 为了摆脱接线
  • java list 写入txt_java 如何用io流 读取list集合里我需要的内容,然后写入到.txt文件里?各位大侠请赐教...

    展开全部 import org junit Test import java io import java util ArrayList import java util List public class TestIo 路径 privat
  • 微信小程序详细图文教程-10分钟完成微信小程序开发部署发布(3元获取腾讯云服务器带小程序支持系统)

    很多朋友都认为微信小程序申请 部署 发布很难 需要很长时间 实际上 微信和腾讯云同是腾讯产品 已经提供了10分钟 根据准备资源情况 已完成小程序申请认证 完成小程序开发 部署 发布的方式 当然 实现的是基础功能 但是 可以给学习者很便捷的体
  • ios接入GameCenter登录

    iOS接入GameCenter登录很简单 首先 在target gt Capabilities中打开GameCenter配置 这里的内购 In App Purchase 是因为我需要接内购的SDK 所以我把这个 In App Purchas
  • C++ STL基本容器比较

    摘自 http blog chinaunix net u2 75321 showart 1144742 html 在STL中基本容器有 string vector list deque set map set 和map都是无序的保存元素 只
  • 在vue中使用高德地图的上浮下钻—最简单明了的方法(无需后台接口渲染文字marker)

    在vue中使用高德地图的上浮下钻 最简单明了的方法 无需后台接口渲染文字marker 第一步 安装vue amap npm i vue amap S 第二步 配置main js import VueAMap from vue amap Vu