3D地图制作

前言

需要和2D地图BMap一样在这里加上
在这里插入图片描述

一、3D原图

1.定义,异步加载,使用的时候再调用

export function MP3D(ak) {
   
  return new Promise(function (resolve, reject) {
   
    window.onload = function () {
   
      resolve(BMapGL);
    };
    const protocolStr = document.location.protocol;
    const scriptMap = document.createElement("script");
    scriptMap.type = "text/javascript";
    if (protocolStr === "https:") {
   
      // 后面加 &s=1 使用 https 默认为 0 ,但此处里面还是访问的 http 无效
      scriptMap.src =
        "https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=" +
        ak +
        "&s=3&callback=onload";
      // 手动添加mate标签
      const addMeta = (httpEquiv, content) => {
   
        const meta = document.createElement("meta");
        meta.content = content;
        meta.httpEquiv = httpEquiv;
        // document.getElementsByTagName('meta')[1].appendChild(meta);
        document
          .getElementsByTagName("head")[0]
          .insertBefore(meta, document.getElementsByTagName("meta")[1]);
      };
      addMeta("Content-Security-Policy", "upgrade-insecure-requests");
    } else {
   
      // 获取百度地图
      scriptMap.src =
        "http://api.map.baidu.com/api?v=1.0&&type=webgl&ak=" +
        ak +
        "&callback=onload"; //此为v1.0版本的引用方式
      // "http://api.map.baidu.com/api?v=2.0&ak=" + ak + "&callback=onload"; //此为v2.0版本的引用方式

      // script.src = "http://api.map.baidu.com/api?v=2.0&ak=您的密钥&callback=initialize";//此为v2.0版本的引用方式
      // http://api.map.baidu.com/api?v=1.4&ak=您的密钥&callback=initialize"; //此为v1.4版本及以前版本的引用方式
    }
    scriptMap.onerror = reject;
    document.head.appendChild(scriptMap);
  });
}

2.调用

import {
    MP3D } from "/@/utils/map/map";
const baidumap = ref(null);
const mapTrue = ref(false); // 如果已经添加了 baidu 的 script 标签,设置为 true ,此时监听到 data 的变化时才去执行 mapLabel(data)  //

防止当前页面刷新时报错 BMap 未定义
// 获取 BMap
//我这里下载一个个人版的ak就可以使用了,用自己的手机号注册了一个ak。企业版的我没用过。个人班是可以注册多个ak的,有客户端版本的,也有服务端版本的。
const ak = ref(“此处为百度地图申请的ak,使用自己的”);

MP3D(ak.value).then(BMapGL => {
   
  if (BMapGL) {
   
    mapTrue.value = true;
    creatMap();
  } else {
   
    mapTrue.value = false;
  }
});

3.创建地图实例和中心点

 var bmapgl = new BMapGL.Map(baidumap.value);
  var point = new BMapGL.Point(101.759972, 36.683583);
  bmapgl.centerAndZoom(point, 18);

二、3D皮肤

1.下载皮肤样式
在百度地图的官方插件中下载一个自己满意的皮肤,有很多,我选了一种

export const mapstyle = [
  {
   
    featureType: "land",
    elementType: "geometry",
    stylers: {
   
      visibility: "on",
      color: "#091220ff"
    }
  },
  {
   
    featureType: "water",
    elementType: "geometry",
    stylers: {
   
      visibility: "on",
      color: "#113549ff"
    }
  },
  {
   
    featureType: "green",
    elementType: "geometry",
    stylers: {
   
      visibility: "on",
      color: "#0e1b30ff"
    }
  },
  {
   
    featureType: "building",
    elementType: "geometry",
    stylers: {
   
      visibility: "on"
    }
  },
  {
   
    featureType: "building",
    elementType: "geometry.topfill",
    stylers: {
   
      color: "#113549ff"
    }
  },
  {
   
    featureType: "building",
    elementType: "geometry.sidefill",
    stylers: {
   
      color: "#143e56ff"
    }
  },
  {
   
    featureType: "building",
    elementType: "geometry.stroke",
    stylers: {
   
      color: "#dadada00"
    }
  },
  {
   
    featureType: "subwaystation",
    elementType: "geometry",
    stylers: {
   
      visibility: "on",
      color: "#113549B2"
    }
  },
  {
   
    featureType: "education",
    elementType: "geometry",
    stylers: {
   
      visibility: "on",
      color: "#12223dff"
    }
  },
  {
   
    featureType: "medical",
    elementType: "geometry",
    stylers: {
   
      visibility: "on",
      color: "#12223dff"
    }
  },
  {
   
    featureType: "scenicspots",
    elementType: "geometry",
    stylers: {
   
      visibility: "on",
      color: "#12223dff"
    }
  },
  {
   
    featureType: "highway",
    elementType: "geometry",
    stylers: {
   
      visibility: "on",
      weight: "4"
    }
  },
  {
   
    featureType: "highway",
    elementType: "geometry.fill",
    stylers: {
   
      color: "#12223dff"
    }
  },
  {
   
    featureType: "highway",
    elementType: "geometry.stroke",
    stylers: {
   
      color: "#fed66900"
    }
  },
  {
   
    featureType: "highway",
    elementType: "labels",
    stylers: {
   
      visibility: "on"
    }
  },
  {
   
    featureType: "highway",
    elementType: "labels.text.fill",
    stylers: {
   
      color: "#12223dff"
    }
  },
  {
   
    featureType: "highway",
    elementType: "labels.text.stroke",
    stylers: {
   
      color: "#ffffff00"
    }
  },
  {
   
    featureType: "highway",
    elementType: "labels.icon",
    stylers: {
   
      visibility: "on"
    }
  },
  {
   
    featureType: "arterial",
    elementType: "geometry",
    stylers: {
   
      visibility: "on",
      weight: "2"
    }
  },
  {
   
    featureType: "arterial",
    elementType: "geometry.fill",
    stylers: {
   
      color: "#12223dff"
    }
  },
  {
   
    featureType: "arterial",
    elementType: "geometry.stroke",
    stylers: {
   
      color: "#ffeebb00"
    }
  },
  {
   
    featureType: "arterial",
    elementType: "labels",
    stylers: {
   
      visibility: "on"
    }
  },
  {
   
    featureType: "arterial",
    elementType: "labels.text.fill",
    stylers: {
   
      color: "#2dc4bbff"
    }
  },
  {
   
    featureType: "arterial",
    elementType: "labels.text.stroke",
    stylers: {
   
      color: "#ffffff00"
    }
  },
  {
   
    featureType: "local",
    elementType: "geometry",
    stylers: {
   
      visibility: "on",
      weight: "1"
    }
  },
  {
   
    featureType: "local",
    elementType: "geometry.fill",
    stylers: {
   
      color: "#12223dff"
    }
  },
  {
   
    featureType: "local",
    elementType: "geometry.stroke",
    stylers: {
   
      color: "#ffffff00"
    }
  },
  {
   
    featureType: "local",
    elementType: "labels",
    stylers: {
   
      visibility: "on"
    }
  },
  {
   
    featureType: "local",
    elementType: "labels.text.fill",
    stylers: {
   
      color: "#979c9aff"
    }
  },
  {
   
    featureType: "local",
    elementType: "labels.text.stroke",
    stylers: {
   
      color: "#ffffffff"
    }
  },
  {
   
    featureType: "railway",
    elementType: "geometry",
    stylers: {
   
      visibility: "off"
    }
  },
  {
   
    featureType: "subway",
    elementType: "geometry",
    stylers: {
   
      visibility: "off",
      weight: "1"
    }
  },
  {
   
    featureType: "subway",
    elementType: "geometry.fill",
    stylers: {
   
      color: "#d8d8d8ff"
    }
  },
  {
   
    featureType: "subway",
    elementType: "geometry.stroke",
    stylers: {
   
      color: "#ffffff00"
    }
  },
  {
   
    featureType: "subway",
    elementType: "labels",
    stylers: {
   
      visibility: "on"
    }
  },
  {
   
    featureType: "subway",
    elementType: "labels.text.fill",
    stylers: {
   
      color: "#979c9aff"
    }
  },
  {
   
    featureType: "subway",
    elementType: "labels.text.stroke",
    stylers: {
   
      color: "#ffffffff"
    }
  },
  {
   
    featureType: "continent",
    elementType: "labels",
    stylers: {
   
      visibility: "on"
    }
  },
  {
   
    featureType: "continent",
    elementType: "labels.icon",
    stylers: {
   
      visibility: "on"
    }
  },
  {
   
    featureType: "continent",
    elementType: "labels.text.fill",
    stylers: {
   
      color: "#2dc4bbff"
    }
  },
  {
   
    featureType: "continent",
    elementType: "labels.text.stroke",
    stylers: {
   
      color: "#ffffff00"
    }
  },
  {
   
    featureType: "city",
    elementType: "labels.icon",
    stylers: {
   
      visibility: "off"
    }
  },
  {
   
    featureType: "city",
    elementType: "labels",
    stylers: {
   
      visibility: "on"
    }
  },
  {
   
    featureType: "city",
    elementType: "labels.text.fill",
    stylers: {
   
      color: "#2dc4bbff"
    }
  },
  {
   
    featureType: "city",
    elementType: "labels.text.stroke",
    stylers: {
   
      color: "#ffffff00"
    }
  },
  {
   
    featureType: "town",
    elementType: "labels.icon",
    stylers: {
   
      visibility: "on"
    }
  },
  {
   
    featureType: "town",
    elementType:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值