vue2中引入天地图及相关配置

news2024/11/18 15:22:49

前言

项目中需要引入特殊用途的地图,发现天地图比高德地图、百度地图要更符合需求,于是看了看天地图。

正文

vue2项目中如何引入天地图并对相关的配置进行修改使用呢?官方给的4.0版本的使用说明。

  1. 引入:

进入到public/index.html中:

<script src="http://api.tianditu.gov.cn/api?v=4.0&tk=去天地图官网申请你的tk"
        type="text/javascript"></script>
  1. template代码:

<template>
  <div class="TiandiMap">
    <div class="Map_conter" id="map" style="height: 60vh"></div>
    <!-- <div class="Draw_draw__pv">
      <a-tooltip class="item" effect="dark" content="测距" placement="top">
        <div class="point" @click="lineTool.open()">
          <img class="pointImg" src="../../../../src/assets/img/alarmSystem.png" alt="" />
        </div>
      </a-tooltip>
      <a-tooltip class="item" effect="dark" content="测面" placement="top">
        <div class="point" @click="polygonTool.open()">
          <img class="pointImg2" src="../../../../src/assets/img/bellSystem.png" alt="" />
        </div>
      </a-tooltip>
    </div> -->
  </div>
</template>
  1. javascript全部代码

地图标记点的数据格式如下

_this.plantDataList = [
          {
          longitude: "81.120445",
          latitude: "43.922741",
          plantStatus: "0", //0正常 1离线 2异常
          prjName: "一号牧场", //项目名称
          prjId: 1, //站点id
          plantStatus: 0,
          square: 2000, //面积
          prjaddress: "新疆维吾尔自治区伊犁哈萨克自治州伊宁市1号地",
          pump: 2, //传感器
          valve: 2, //阀门数量
        }
]

js代码如下

<script>
var marker,
  tmapContainer,
  infoWindow,
  T = window.T;

export default {
  data() {
    return {
      map: {}, //地图
      infoWin: "",
      lineTool: "", // 测距工具
      polygonTool: "", // 测面工具
      pubOneData: {}, // GEOJSON格式数据
      ID: "",
      plantDataList: [],
    };
  },

  methods: {
    //获取站点-return false后面是接口请求标记点相关信息的数据
    getPlantList() {
      return new Promise((resolve, reject) => {
        let _this = this,
          queryParams = {
            page: 1,
            limit: 1000,
            _t: new Date().getTime(),
          };
        _this.plantDataList = [
          {
          longitude: "81.120445",
          latitude: "43.922741",
          plantStatus: "0", //0正常 1离线 2异常
          prjName: "一号牧场", //项目名称
          prjId: 1, //站点id
          plantStatus: 0,
          square: 2000, //面积
          prjaddress: "新疆维吾尔自治区伊犁哈萨克自治州伊宁市1号地",
          pump: 2, //传感器
          valve: 2, //阀门数量
        },
        {
          longitude: "81.139345,",
          latitude: "43.928195",
          plantStatus: "1", //0正常 1离线 2异常
          prjName: "二号牧场", //项目名称
          prjId: 2, //站点id
          plantStatus: 1,
          square: 2200, //面积
          prjaddress: "新疆维吾尔自治区伊犁哈萨克自治州伊宁市2号地",
          pump: 3, //传感器
          valve: 3, //阀门数量
        },
        {
          longitude: "81.152353",
          latitude: "43.934064",
          plantStatus: "2", //0正常 1离线 2异常
          prjName: "三号牧场", //项目名称
          prjId: 1, //站点id
          plantStatus: 2,
          square: 2000, //面积
          prjaddress: "新疆维吾尔自治区伊犁哈萨克自治州伊宁市",
          pump: 2, //传感器
          valve: 2, //阀门数量
        },
        ];
        _this.$nextTick(() => {
          _this.loadMap(); //初始化天地图
        });
         return false
        getPlantList(queryParams)
          .then((res) => {
            if (res.data.list.length > 0) {
              _this.plantDataList = res.data.list;
              _this.$nextTick(() => {
                _this.loadMap(); //初始化天地图
              });
            }
          })
          .catch((error) => {
            console.log(error);
            return false;
          });
      });
    },

    //创建
    createPolygon(coors, option) {
      let points = [];
      coors.forEach((lonlat) => {
        points.push(new T.LngLat(lonlat[0], lonlat[1]));
      });
      this.clearAll();
      let polygon = new T.Polygon(points, {
        color: "#167FFD",
        weight: 2,
        opacity: 1,
        fillColor: "#167FFD",
        fillOpacity: 0.5,
      });
      return polygon;
    },

    //清空地图及搜索列表
    clearAll() {
      this.map.clearOverLays();
      this.map.centerAndZoom(new T.LngLat(81.189723, 43.920969), 14); //设置中心点和放大倍数
    },

    //初始化天地图
    loadMap() {
      let _this = this;
      try {
        var T = window.T;
        var imageURL =
          "http://t0.tianditu.gov.cn/img_w/wmts?" +
          "SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cta&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles" +
          "&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}" +
          "&tk=去天地图官网申请你的tk"; //影像底图
        var lay = new T.TileLayer(imageURL, { minZoom: 1, maxZoom: 18 });
        var config = { layers: [lay], name: "TMAP_SATELLITE_MAP" };
        _this.map = new T.Map("map", config); // 创建地图实例

        var ctrl = new T.Control.MapType();
        _this.map.addControl(ctrl);
        _this.map.setMapType(window.TMAP_HYBRID_MAP); // 设置地图位地星混合图层
        _this.map.centerAndZoom(new T.LngLat(81.189723, 43.920969), 14); //设置中心点和放大倍数
        //允许鼠标双击放大地图
        _this.map.enableScrollWheelZoom();
        _this.map.enableDrag();
        //添加缩放控件
        var ctrlZoom = new T.Control.Zoom();
        _this.map.addControl(ctrlZoom);
        ctrlZoom.setPosition(T_ANCHOR_BOTTOM_RIGHT);
        //添加比例尺控件
        let ctrlScale = new T.Control.Scale();
        _this.map.addControl(ctrlScale);
        var config = {
          showLabel: true,
          color: "red",
          weight: 3,
          opacity: 0.5,
          fillColor: "#FFFFFF",
          fillOpacity: 0.5,
        };
        //创建标注工具对象
        _this.lineTool = new T.PolylineTool(_this.map, config);
        //创建标注工具对象
        _this.polygonTool = new T.PolygonTool(_this.map, config);
        _this.GetMaps(); //加载天地图
      } catch (error) {
        _this.$message.warning("加载失败!");
      }
    },

    addClickHandler(content, marker) {
      marker.addEventListener("click", function (e) {
        openInfo(content, e);
      });
    },

    openInfo(content, e) {
      var point = e.lnglat;
      marker = new T.Marker(point); // 创建标注
      var markerInfoWin = new T.InfoWindow(content, {
        offset: new T.Point(0, -30),
      });
      that.map.openInfoWindow(markerInfoWin, point); // 开启信息窗口
    },

    //天地图定位详情信息设置
    GetMaps() {
      var T = window.T,
        _this = this,
        markObj = {},
        autoPanMarker = null;
      if (_this.plantDataList.length > 0) {
        _this.map.clearOverLays();
        _this.map.centerAndZoom(new T.LngLat(81.189723, 43.920969), 14); //设置中心点和放大倍数
        let linePoints = [];
        _this.plantDataList.forEach((markItem, markItemIndex) => {
          markObj["marker" + (markItemIndex + 1)] = new T.Marker(
            new T.LngLat(markItem.longitude, markItem.latitude),
            {
              icon: new T.Icon({
                // iconUrl: "https://webapi.amap.com/theme/v1.3/m1.png",
                iconSize: new T.Point(30, 30),
                iconAnchor:
                  markItemIndex == 0 ? new T.Point(10, 56) : new T.Point(30, 30),
                iconUrl: markItem.plantStatus == '0' ? 'https://webapi.amap.com/theme/v1.3/m1.png' : markItem.plantStatus == '1' ? 'https://webapi.amap.com/theme/v1.3/m2.png' : markItem.plantStatus == '2' ? 'https://webapi.amap.com/theme/v1.3/m3.png' : '',
                // iconSize: new T.Point(30, 30),
                // iconAnchor: new T.Point(30, 30)
              }),
            }
          );
          markObj["marker" + (markItemIndex + 1)].prjId = markItem.id;
          markObj["marker" + (markItemIndex + 1)].prjName = markItem.prjName;
          markObj["marker" + (markItemIndex + 1)].plantStatus = markItem.plantStatus
            ? markItem.plantStatus
            : 0;
          markObj["marker" + (markItemIndex + 1)].square = markItem.square
            ? markItem.square
            : 2;
          markObj["marker" + (markItemIndex + 1)].prjaddress = markItem.prjaddress;
          markObj["marker" + (markItemIndex + 1)].pump = markItem.pump
            ? markItem.pump
            : 2;
          markObj["marker" + (markItemIndex + 1)].valve = markItem.valve
            ? markItem.valve
            : 2;

          _this.map.addOverLay(markObj["marker" + (markItemIndex + 1)]);

          // 添加连线
          linePoints = linePoints.concat(
            markObj["marker" + (markItemIndex + 1)].getLngLat()
          );
          let line = new T.Polyline(linePoints, {
            strokeColor: "green",
            strokeWeight: 10,
            strokeOpacity: 1,
          });
          _this.map.addOverLay(line);

          //鼠标移入
          markObj["marker" + (markItemIndex + 1)].addEventListener(
            "mouseover",
            function (e) {
              let winHtml =
                "<ul style='list-style-type: none;padding: 10px; background: #061830; font-size: 14px; color: #fff;'><li style='display: flex; justify-content: space-between;'><span>" +
                e.target.prjName +
                "</span></li>" +
                "<li style='display: flex; justify-content: space-between;'>运行状态: <span>" +
                (e.target.plantStatus == 0
                  ? "正常"
                  : e.target.plantStatus == 1
                  ? "离线"
                  : e.target.plantStatus == 2
                  ? "异常"
                  : "停机") +
                "<li style='display: flex; justify-content: space-between;'>面积: <span>" +
                e.target.square +
                "㎡" +
                "<li style='display: flex; justify-content: space-between;'>地址: <span>" +
                e.target.prjaddress +
                "<li style='display: flex; justify-content: space-between;'>泵: <span>" +
                e.target.pump +
                "个" +
                "<li style='display: flex; justify-content: space-between;'>阀门: <span>" +
                e.target.valve +
                "个" +
                "</span></li></ul>";
              autoPanMarker = new T.InfoWindow(winHtml, { autoPan: true });
              markObj["marker" + (markItemIndex + 1)].openInfoWindow(autoPanMarker);
            }
          );

          markObj["marker" + (markItemIndex + 1)].addEventListener(
            "mouseout",
            function (e) {
              markObj["marker" + (markItemIndex + 1)].closeInfoWindow();
            }
          );

          //单击
          markObj["marker" + (markItemIndex + 1)].addEventListener("click", function (e) {
            console.log("单击", e);
          });

          //双击
          markObj["marker" + (markItemIndex + 1)].addEventListener(
            "dblclick",
            function (e) {
              console.log("e", e);
              _this.$router
                .push({ path: "/我这里是双击标记点可以跳转到某个页面中去" })
                .catch((error) => {});
            }
          );
        });
      }
    },
  },

  mounted() {
    this.getPlantList();
  },
};
</script>

其中,关于地图中的事件中,基本名称都是js原生的名字,然后通过 addEventListener()监听事件,比如mouseover(鼠标移入)、mouseout(鼠标移出)、click(单击)、dblclick(双击)

  1. less代码

<style lang="less" scoped>
.TiandiMap {
  position: relative;
}

.Map_conter {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  overflow: hidden;
}

.Draw_draw__pv {
  position: absolute;
  top: 10px;
  left: 10px;
  z-index: 10000;
}
</style>

效果

1.可以通过接口获取不同状态地图标记点,分别用蓝、黄、红图标表示正常、离线、异常等状态

2.为所有的标记点添加信息浮窗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/670231.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用逻辑回归LogisticRegression来对我们自己的数据excel或者csv数据进行分类--------python程序代码,可直接运行

文章目录 一、逻辑回归LogisticRegression是什么&#xff1f;二、逻辑回归LogisticRegression进行分类的具体步骤二、逻辑回归LogisticRegression进行二分类的详细代码三、逻辑回归LogisticRegression的广泛用途总结 一、逻辑回归LogisticRegression是什么&#xff1f; 逻辑回…

小白白也能学会的 PyQt 教程 —— QRadioButton 介绍以及基本使用

文章目录 一、QRadioButton快速入门1. QRadioButton简介2. QRadioButton快速上手 二、响应单选按钮点击事件1、信号和槽机制&#xff1a;2、创建槽函数来响应单选按钮点击&#xff1a;3、示例&#xff1a;执行特定操作或显示相关内容&#xff1a; 三、单选按钮的常用功能和属性…

三维形体投影面积

&#x1f388; 算法并不一定都是很难的题目&#xff0c;也有很多只是一些代码技巧&#xff0c;多进行一些算法题目的练习&#xff0c;可以帮助我们开阔解题思路&#xff0c;提升我们的逻辑思维能力&#xff0c;也可以将一些算法思维结合到业务代码的编写思考中。简而言之&#…

petalinux 生成SDK报错排除

AAA: 在项目文件下新建Qt5文件夹文件夹内新建文件并且设置对应参数 文件夹路径&#xff1a; project-spec/meta-user/recipes-qt/qt5 新建文件 vim ./qt5/qt3d_%.bbappend vim ./qt5/qtquickcontrols2_%.bbappend vim ./qt5/qtserialbus_%.bbappend 文件内容 qt3d_%.bbap…

完美解决Non-terminating decimal expansion; no exact representable decimal result.异常

我们在使用BigDecimal进行精确计算时常常会出现Non-terminating decimal expansion; no exact representable decimal result.异常。 出现这个异常的原因在于 BigDecimal 是不可变的、任意精度的有符号十进制数&#xff0c;所以可以做精确计算。但在除法中&#xff0c;准确的商…

ernie-layout笔记

1: 识别文档中文字以及准确的对这些文字排序是必须的一步骤 采用 OCR技术识别文字以及对应的图像坐标信息&#xff0c;光栅扫描以生成输入序列按照从左到右&#xff0c;从上到下的顺序&#xff1b;但是以上方法针对复杂的结构就会出现问题&#xff1b;因此文章使用了Document-P…

Spring源码核心剖析 | 京东云技术团队

前言 SpringAOP作为Spring最核心的能力之一&#xff0c;其重要性不言而喻。然后需要知道的是AOP并不只是Spring特有的功能&#xff0c;而是一种思想&#xff0c;一种通用的功能。而SpringAOP只是在AOP的基础上将能力集成到SpringIOC中&#xff0c;使其作为bean的一种&#xff…

算法程序设计 之 循环赛日程表(2/8)

一、实验目的&#xff1a; 理解并掌握分治算法的基本思想和设计步骤。 二、实验内容 设有n个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表&#xff1a; &#xff08;1&#xff09;每个选手必须与其他n-1个选手各赛一次&#xff1b; &#xff08;2&#xff0…

HOOPS Web SDK 2023 Crack

在 HOOPS WEB 平台上释放 3D 的力量 HOOPS Web 平台加速 Web 应用程序开发&#xff0c;提供先进的 3D Web 可视化、准确快速的 CAD 数据访问和 3D 数据发布软件开发工具包 &#xff08;SDK&#xff09;。 构建 3D WEB 应用程序 借助 HOOPS Web 平台&#xff0c;快速构建适用于…

值得收藏的 10个 Android 手机恢复丢失文件的工具榜单

尽管我们尽可能避免这种情况&#xff0c;但有时我们还是会不小心删除 Android 设备上的重要文件。无论是照片、视频、文档还是任何其他形式的数据&#xff0c;数据丢失都会带来巨大的痛苦。不幸的是&#xff0c;Android 设备没有内置恢复工具。但是&#xff0c;有一些第三方恢复…

里程碑式突破!关键的薛定谔猫编码能带来更好的量子比特

​ 薛定谔的猫编码插图&#xff08;图片来源&#xff1a;网络&#xff09; 来自瑞士洛桑联邦理工学院&#xff08;EPFL&#xff09;的科学家提出了一种突破性的量子计算容错方案&#xff0c;称为“关键的薛定谔猫编码”。这种新颖的系统在混合状态下运行&#xff0c;具有强大的…

容灾与备份区别、灾备技术、容灾体系规划

1.容灾备份的区别 容灾 &#xff08;Disaster Tolerance&#xff09;&#xff1a;就是在上述的灾难发生时&#xff0c;在保证生产系统的数据尽量少丢失的情况下&#xff0c;保持生存系统的业务不间断地运行。 容错 &#xff08;Fault Tolerance&#xff09;&#xff1a;指在计…

激光显示技术路线之争:超级全色激光技术ALPD5.0更先进

5月以来,智能投影市场爆发的激光显示技术路线之争愈演愈烈,各厂家带领自有的技术路线你方唱罢我登场,犹如一出愈演愈烈的大戏,吸引了业内外各界的目光。 从极米在5月10日2023春季新品发布会上率先向三色激光技术发难,再到坚果投影首席产品官在朋友圈发文炮轰极米的技术路线,随…

MarkDown常用功能

快捷键 撤销&#xff1a;Ctrl/Command Z 重做&#xff1a;Ctrl/Command Y 加粗&#xff1a;Ctrl/Command B 斜体&#xff1a;Ctrl/Command I 标题&#xff1a;Ctrl/Command Shift H 无序列表&#xff1a;Ctrl/Command Shift U 有序列表&#xff1a;Ctrl/Command Shif…

【二叉树part01】| 二叉树的递归遍历、二叉树的迭代遍历、二叉树的统一迭代遍历

目录 ✿二叉树的递归遍历❀ ☞LeetCode144.前序遍历 ☞LeetCode145.二叉树的后序遍历 ☞LeetCode94.二叉树的中序遍历 ✿二叉树的迭代遍历❀ ☞LeetCode144.前序遍历 ☞LeetCode145.二叉树的后序遍历 ☞LeetCode94.二叉树的中序遍历 ✿二叉树的统一迭代遍历❀ ☞Lee…

CTFshow-pwn入门-前置基础pwn32-pwn34

FORTIFY_SOURCE FORTIFY_SOURCE(源码增强)&#xff0c;这个其实有点类似与Windows中用新版Visual Studio进行开发的时候&#xff0c;当你用一些危险函数比如strcpy、sprintf、strcat&#xff0c;编译器会提示你用xx_s加强版函数。 FORTIFY_SOURCE本质上一种检查和替换机制&am…

算法程序设计 之 矩阵连乘(3/8)

一、实验目的&#xff1a; 理解动态规划算法的基本思想和设计步骤&#xff1b; 掌握动态规划算法的典型应用范例——矩阵连乘。 二、实验内容 矩阵连乘 给定n个可乘的数字矩阵A1,…,An&#xff0c;以及矩阵的阶p0* p1, p1* p2,…, pn-1* pn,求给定矩阵链的最优计算次序使得所需…

JavaWeb之文件的上传和下载

文章目录 文件的上传基本介绍文件上传的HTTP协议的说明commons-fileupload.jar 常用API介绍说明fileupload类库的使用 文件的下载基本介绍和使用说明中文名乱码问题解决方案 文件的上传和下载&#xff0c;是非常常见的功能。很多的系统中&#xff0c;或者软件中都经常使用文件的…

使用spacy做分词的示例

下载数据&#xff1a; aws s3 cp s3://applied-nlp-book/data/ data --recursive --no-sign-request aws s3 cp s3://applied-nlp-book/models/ag_dataset/ models/ag_dataset --recursive --no-sign-request 上面第一份数据接近1GB&#xff0c;第二份接近3GB&#xff1b; 示…

买了一年CSDN年VIP,用着实在太爽

买一年CSDN的年VIP有多爽及使用攻略&#xff01; 一、前言 这段时间&#xff0c;一旦打开CSDN就不断的弹出618活动&#xff0c;在电脑网上打开&#xff0c;一股白嫖之的气息吹来&#xff0c;让人直接忍不住剁手 最后经过近5天的挣扎&#xff0c;我还是受不了CSDN的蛊惑&#…