[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);
    }
  }
相关推荐
wuhen_n2 小时前
Pinia状态管理原理:从响应式核心到源码实现
前端·javascript·vue.js
wuhen_n2 小时前
KeepAlive:组件缓存实现深度解析
前端·javascript·vue.js
wuhen_n2 小时前
Vue Router与响应式系统的集成
前端·javascript·vue.js
Ruihong3 小时前
《VuReact:下一代 Vue 3 -> React 智能编译工具,支持 SFC 与增量迁移》
vue.js
lemon_yyds3 小时前
vue 2 升级vue3 : ref 和 v-model 命名为同名
前端·vue.js
前端Hardy6 小时前
告别 !important:现代 CSS 层叠控制指南,90% 的样式冲突其实不用它也能解
前端·vue.js·面试
前端Hardy6 小时前
Vue 3 性能优化的 5 个隐藏技巧,第 4 个连老手都未必知道
前端·vue.js·面试
洋洋技术笔记7 小时前
计算属性与侦听器
前端·vue.js
李剑一7 小时前
拿来就用!Vue3+Cesium 飞入效果封装,3D大屏多场景直接复用
前端·vue.js·cesium
Forever7_1 天前
Electron 淘汰!新的桌面端框架 更强大、更轻量化
前端·vue.js