[vue2项目]vue2+supermap[mapboxgl]+天地图之地图的基础操作(画线+自定义打点)

二、地图的基础操作

1、画线

案例(1)

javascript 复制代码
 this.map.on("load", () => {
        let geometryLine = {
          type: "Feature",
          geometry: {
            // 定义类型
            type: "LineString",
            coordinates: [
              [113.39793764, 34.05675322],
              [113.35187554, 32.4392251],
              [112.47685179, 31.89344325],
              [112.29263185, 30.75257895],
              [112.43079033, 30.15709126],
              [113.9505599, 29.75808719],
              [114.45714743, 29.23699965],
              [115.34044715, 28.22369668],
              [115.59740867, 27.5140793],
              [115.59740829, 27.45850126]
            ],
          },
        };
        this.map.addLayer({
          id: "river",
          type: "line",
          source: {
            type: "geojson",
            data: geometryLine,
          },
          layout: {
            "line-join": "round",
            "line-cap": "round",
          },
          paint: {
            "line-color": "red",
            "line-width": 5,
          },
        });
      });

案例 (2)绘制中国边界线

Datav

在Datav网站上获取中国边界线经纬度
在scr目录下创建util文件并把下载的json文件保存在该目录下,并改名为China.json

在组件中引入json文件

运行后

主要代码

javascript 复制代码
this.ChinaBorder.features[0].geometry.coordinates.forEach((item,index) => {
        let coordinates = [];
        item.forEach((item2) => {
          coordinates.push(item2);
        });
        // 处理中国边界经纬度数据
        this.map.on("load", () => {
          let geometryLine = {
            type: "Feature",
            geometry: {
              // 定义类型
              type: "LineString",
              coordinates: coordinates,
            },
          };
          this.map.addLayer({
            id: "border"+index,
            type: "line",
            source: {
              type: "geojson",
              data: geometryLine,
            },
            layout: {
              "line-join": "round",
              "line-cap": "round",
            },
            paint: {
              "line-color": "red",
              "line-width": 10,
            },
          });
        });
      });

2、自定义打点(图片+文字)

javascript 复制代码
const el = document.createElement("div");
      el.className = "icon_box";
      el.style.width = `100px`;
      el.style.height = `100px`;
      el.style.backgroundSize = "100%";
      el.innerHTML = `
      <div>
        <div class='icon' style='width:30px;height:30px;'></div>
          <span class='title'>文字说明</span>
      </div>`;
      new mapboxgl.Marker(el)
        .setLngLat([118.0626924, 26.71411572])
        .addTo(this.map);
css 复制代码
/deep/.icon_box {
    // position: relative;
    z-index: 8;
    width: 30px !important;
    height: 30px !important;
    font-size: 12px;
    color: #fff;
    // 图片
    .icon {
      width: 30px !important;
      height: 30px !important;
      z-index: 5;
      background-image: url("../../static/location.png");
      background-size: cover;
    }
    // 文字说明样式
    .title{
      position: absolute;
      bottom: 35px;
      white-space: nowrap;
      left:20px;
      background: #212f7f;
      color: #94e9ff;
      padding: 3px 8px 2px 8px;
      border-radius: 5px;
      box-shadow: 0 0 5px rgba(0, 0, 0, 0.3), 0 0 5px rgba(0, 0, 0, 0.3);
    }
  }
相关推荐
慧一居士13 小时前
Element Plus 按需引入的配置使用说明和完整示例
前端·vue.js
CoderWeen17 小时前
我写了个能一步步点着看的 Dijkstra 可视化项目(Vue3 + Leaflet + Generator)
前端·javascript·vue.js
无人生还18 小时前
第 1 篇:从 Vue3 到 React 的思维转变
前端·vue.js·react.js
就业发动机18 小时前
我用 Tauri 做了一个约 1.5 MB 的开源屏幕标注工具:MarkerOn
vue.js·rust
爱分享的程序猿-Clark18 小时前
【前端分享】vue开发项目,如何实现 从A页面跳转到B页面,并传值!
前端·javascript·vue.js
徐小夕19 小时前
花了3天,我写了一款开源AI公众号编辑器
前端·vue.js·github
come1123419 小时前
Vue 2 与 Vue 3 语法区别及使用技巧
前端·javascript·vue.js
腻害兔20 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:ERP 企业资源模块,一个轻量级进销存的完整实现?
前端·javascript·vue.js·人工智能·前端框架·产品经理·ai编程
Simon_He20 小时前
AI 对话里的流式 Markdown 为什么难:从不完整 Token 到增量渲染
vue.js
达子66620 小时前
第4章_图解HarmonyOS 的结构
vue.js