百度地图API-地图初始化及初步使用

目录

1.百度地图JavaScript API GL

1.1 账号注册和获取密钥

1.2 百度地图API初始化

1.3 切换个性化地图

2. 百度地图的基础配置与使用

2.1 切换为三维地图

2.2  添加地图控件

2.3 地面叠加层覆盖物

2.4 添加label标签(文本标注)

 2.5 挤出高度(3D棱柱功能)

2.6 添加覆盖物(基本图形)

2.7 自定义动画视角


1.百度地图JavaScript API GL

百度地图JavaScript API GL v1.0是一套由JavaScript语言编写的应用程序接口,可帮助您在网站中构建功能丰富、交互性强的地图应用,支持PC端和移动端基于浏览器的地图应用开发,且支持HTML5特性的地图开发。

百度地图JavaScript API支持HTTP和HTTPS,免费对外开放,可直接使用。接口使用无次数限制。

1.1 账号注册和获取密钥

1)注册百度账号

根据官网的提示与指示进行账号注册。

2)申请成为百度开发者

 登陆账号后进入控制台界面,在个人信息出进行个人认证并申请成为开发者,一般个人使用或测试申请成为个人开发者即可。

3)获取服务密钥

 在左侧工具栏内选择应用管理-我的应用模块开始创建应用。

用户可根据需求选择应用类型,一般Web开发选择浏览器端即可,并设置应用名称及所需服务类型,在白名单处,若无特殊要求,填入*号即可,点击提交便可创建应用。

 

在我的应用界面便可以查看创建的应用对应的AK密钥,点击复制后即可使用。

4)开发与使用

在引入资源处粘贴应用的密钥(AK),便可以正常调用其他功能进行使用。

jspopularGL | 百度地图API SDKguidehttps://lbs.baidu.com/index.php?title=jspopularGL/guide/getkey

1.2 百度地图API初始化

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style type="text/css">
      html {
        height: 100%;
      }
      body {
        height: 100%;
        margin: 0px;
        padding: 0px;
      }
      #container {
        height: 100%;
        /* width:600px;
            height:400px; */
      }
      /* 隐藏百度地图的版权信息及logo */
      .BMap_cpyCtrl,
      .anchorBL img {
        display: none;
      }
    </style>
    <script
      type="text/javascript"
      src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=你的密钥"
    ></script>
  </head>
  <body>
    <div id="container"></div>
    <script>
      // 创建地图实例
      var map = new BMapGL.Map("container");
      // 设置中心点坐标
      var point = new BMapGL.Point(116.404, 39.915);
      // 地图初始化,设置地图中心位置和展示级别
      map.centerAndZoom(point, 20);
      // 开启鼠标滚轮缩放
      map.enableScrollWheelZoom(true);
      // 设置旋转角度
      // map.setHeading(90);
      // 设置地图的倾斜角度
      map.setTilt(45);
      // 旋转动画
      map.setHeading(90, { duration: 5000 });
    </script>
  </body>
</html>

实现效果:

1.3 切换个性化地图

个性化地图,顾名思义用户可对地图进行个性化配置。通过该服务,允许用户将传统默认的地图样式按需配置,自由控制地图元素显隐及对应的元素样式。
用户可以通过个性化地图样式编辑器,按需编辑地图的底图样式,再按相应应用端的功能要求,将样式应用在JavaScript API和地图SDK中。 

 详见:

jspopularGL | 百度地图API SDKguidehttps://lbs.baidu.com/index.php?title=jspopularGL/guide/custom例如切换为眼眸类型图:

点击眼眸类型图后点击下载样式文件

下载样式JSON文件: 

 下载后实例化map后加载json文件,对map进行个性化设置:

      fetch("./assets/mapstyle/custom_map_config.json")
        .then((res) => res.json())
        .then((res) => {
          // console.log(res)
          map.setMapStyleV2({ styleJson: res });
        });

实现效果:

2. 百度地图的基础配置与使用

2.1 切换为三维地图

变更地图类型为地球

map.setMapType(BMAP_EARTH_MAP);      // 设置地图类型为地球模式

示例代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style type="text/css">
      html {
        height: 100%;
      }
      body {
        height: 100%;
        margin: 0px;
        padding: 0px;
      }
      #container {
        height: 100%;
        /* width:600px;
            height:400px; */
      }
      .BMap_cpyCtrl,
      .anchorBL img {
        display: none;
      }
    </style>
    <script
      type="text/javascript"
      src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=EplUeDiZDk31Ac6PewvIfyin8WNukI8C"
    ></script>
  </head>
  <body>
    <div id="container"></div>
    <script>
      // 创建地图实例
      var map = new BMapGL.Map("container");
      // 设置中心点坐标
      var point = new BMapGL.Point(116.404, 39.915);

      // 地图初始化,设置地图中心位置和展示级别
      map.centerAndZoom(point, 1);
      // 开启鼠标滚轮缩放
      map.enableScrollWheelZoom(true);

      // 把地图变成3d地球
      map.setMapType(BMAP_EARTH_MAP);

    </script>
  </body>
</html>

 实现效果:

2.2  添加地图控件

在百度地图API中,提供以下控件供开发者使用:

 对于控件的设置,详见开发文档控件类:百度地图JSAPI WebGL v1.0类参考 百度地图JSAPI类参考,百度地图开发者icon-default.png?t=M666https://lbsyun.baidu.com/cms/jsapi/reference/jsapi_webgl_1_0.html#a2b0

示例代码:

      //添加比例尺控件
      var scaleControl = new BMapGL.ScaleControl();
      map.addControl(scaleControl);
      // 添加缩放按钮
      var zoomControl = new BMapGL.ZoomControl({
        anchor: BMAP_ANCHOR_BOTTOM_RIGHT,//位置
        offset: new BMapGL.Size(150, 100),//偏移量
      });
      map.addControl(zoomControl);
      //添加城市列表
      var cityListControl = new BMapGL.CityListControl();
      map.addControl(cityListControl);
      // 添加定位控件
      var geolocationControl = new BMapGL.LocationControl({
        anchor: BMAP_ANCHOR_TOP_RIGHT,
        offset: new BMapGL.Size(150, 100),
      });
      map.addControl(geolocationControl);

 实现效果:

2.3 地面叠加层覆盖物

JSAPI GL提供的GroundOverlay类支持在地图底面上叠加覆盖物,覆盖物可以是图片、自定义Canvas、视频。
GroundOverlay类继承Overlay类,基于Bounds确定在地面上的显示范围和大小,通过options来配置覆盖物的类型、源、透明度等。

下面以覆盖图片为例,在故宫博物院上覆盖彩色故宫地图:

      //设置图片类型覆盖物     
      var pStart = new BMapGL.Point(116.3983357265035,39.92901203550782);
      var pEnd = new BMapGL.Point(116.40876391157045,39.91985263147664);

      var bounds = new BMapGL.Bounds(pStart, pEnd);
      var imgOverlay = new BMapGL.GroundOverlay(bounds, {
        opacity: 0.9,
        
        url: "./assets/imgs/gugongmap.jpg",
        type: "image",
      });
      map.addOverlay(imgOverlay);

实现效果:

2.4 添加label标签(文本标注)

所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动。

覆盖物主要分为:标注(点标注、折线、多边形、圆、文本标注)、信息窗口、图层。

1)添加文本标注

      var labelPoint = new BMapGL.Point(116.404, 39.915);
      var content = "北京欢迎你";
      var label = new BMapGL.Label(content, {
        position: labelPoint,
        offset: new BMapGL.Size(20, -10),
        enableMassClear: false,
      });
      label.setStyle({
        color: "red",
        fontSize: "30px",
        border: "5px solid green",
      });
      map.addOverlay(label);

实现效果:

 

 2)添加文本标注点击事件

通过监听label点击实现,使用InfoWindow类实现弹窗信息显示:

      
      label.addEventListener("click", function () {
        // alert("点击了标签");
        label.setStyle({
          color: "blue",
        });

        // 地图打开信息窗口
        map.openInfoWindow(infoWindow, labelPoint);
      });
      var infoWindow = new BMapGL.InfoWindow("这里是故宫", {
          width: 0,
          height: 0,
          title: "故宫博物馆",
        });

3)自定义弹窗信息样式及内容

可通过自定义信息弹窗的html内容,对弹窗信息进行自定义:

      var div = document.createElement("div");
      div.innerHTML = `
      <div><img src="./assets/imgs/gugong.png" /></div>
      <div>这里是故宫</div>s
      `;
      var infoWindow = new BMapGL.InfoWindow(div, {
        width: 0,
        height: 0,
        title: "故宫博物馆",
      });

 

 2.5 挤出高度(3D棱柱功能)

JSAPI GL提供的Prism类支持在地图上添加3D棱柱功能,继承Overlay类,可以基于位置经纬度,高度,顶面和侧面的颜色、透明度等属性来绘制不规则的棱柱体。

下面以获取北京市边界线,并通过边界线向上挤出高度实现棱柱效果为例:

首先通过实例化Boundary类获取北京市边界范围,对边界范围的经纬度坐标点进行分割,重新对边界坐标点进行坐标转换,实例化Prism传入边界坐标转换后的值、挤出高度及配置参数,挤出棱柱:

      var bd1 = new BMapGL.Boundary();
      bd1.get("北京市", (rs) => {
        console.log(rs);
        let str = rs.boundaries[0];
        str = str.replace(" ", "");
        let points = str.split(";");
        let path = [];
        for (let i = 0; i < points.length; i++) {
          let arr = points[i].split(",");
          let lng = arr[0];
          let lat = arr[1];
          path.push(new BMapGL.Point(lng, lat));
        }
        let prism = new BMapGL.Prism(path, 15000, {
          topFillColor: "#00ffff",
          topFillOpacity: 0.5,
          sideFillColor: "#88ffff",
          sideFillOpacity: 0.5,
        });

        map.addOverlay(prism);

        prism.addEventListener("click", function (e) {
          //   console.log(e);
          e.target.setOptions({
            topFillColor: "#eeeeee",
            topFillOpacity: 0.5,
            sideFillColor: "#ffffff",
            sideFillOpacity: 0.5,
          });
        });
      });

 实现效果:

2.6 添加覆盖物(基本图形)

所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动。

目前JSAPI GL版支持的覆盖物以基本图形为主。

 下面以创建点标注、折线(Polyline)及多边形(Polygon)为例:

      // 创建地图实例
      var map = new BMapGL.Map("container");
      // 设置中心点坐标
      var point = new BMapGL.Point(116.404, 39.915);

      // 地图初始化,设置地图中心位置和展示级别
      map.centerAndZoom(point, 15);
      // 开启鼠标滚轮缩放
      map.enableScrollWheelZoom(true);

      // 向地图中添加标注,maker标注地图上的点
      var makerPoint1 = new BMapGL.Point(116.408, 39.92);
      var marker = new BMapGL.Marker(makerPoint1);
      // 将标注添加到地图中
      map.addOverlay(marker);
      // 定义标注图标
      var iconRiver = new BMapGL.Icon(
        "./assets/river.png",
        new BMapGL.Size(50, 50),
        {
          anchor: new BMapGL.Size(10, 25),
          imageOffset: new BMapGL.Size(0, 0),
        }
      );
      var makerPoint2 = new BMapGL.Point(116.4, 39.92);
      var marker2 = new BMapGL.Marker(makerPoint2, { icon: iconRiver });
      map.addOverlay(marker2);
      marker2.addEventListener("click", (event) => {
        console.log("你点击了标注", event);
      });

      // 添加折线
      var polyline = new BMapGL.Polyline([
      point,makerPoint1,makerPoint2
      ],
      {
          strokeColor:"#0000ff",
          strokeWeight:6,
          strokeOpacity:0.5
      }
      )
      map.addOverlay(polyline);
      //添加平面
      var polygon = new BMapGL.Polygon([point, makerPoint1, makerPoint2], {
        strokeColor: "#00ffff",
        strokeWeight: 6,
        strokeOpacity: 0.5,
      });
      map.addOverlay(polygon);

 实现效果:

2.7 自定义动画视角

JSAPI GL支持展示地图的3D动画,您可以自定义从地图上某一地点切换到另一地点的3D过渡动画效果。

注意:由于在渲染动画时,数据资源是随着当前方位和坐标的改变而实时加载的,刚开始播放动画时画面可能会卡顿,属于正常现象;此外,为了减少加载数据资源的性能损耗,在播放动画时隐藏了地图上的POI点。

ViewAnimation:一个用来展示地图3D动画的类,您可以自定义动画的关键帧实例,并自由设置动画延迟开始时间、持续时间以及迭代次数等属性。

下面通过设置动画的关键帧实现动画的切换,并监听屏幕点击事件结束动画:

var keyFrames = [
        {
          // 关键帧所在位置
          center: new BMapGL.Point(116.404, 39.915),
          //   地图缩放等级
          zoom: 20,
          //   地图的倾斜角度
          tilt: 50,
          //   地图的旋转角度
          heading: 0,
          //   动画在过程中的百分比的时间
          percentage: 0,
        },
        {
          center: new BMapGL.Point(116.42, 39.92),
          zoom: 20,
          tilt: 50,
          heading: 90,
          percentage: 0.2,
        },
        {
          center: new BMapGL.Point(116.42, 39.92),
          zoom: 20,
          tilt: 50,
          heading: 180,
          percentage: 0.4,
        },
        {
          center: new BMapGL.Point(116.404, 39.915),
          zoom: 20,
          tilt: 50,
          heading: 360,
          percentage: 1,
        },
      ];

      //   设置动画属性
      var opts = {
        duration: 15000, // 动画时长
        delay: 0, // 动画延迟
        interation: 2, // 动画循环次数
      };

      //   创建动画
      var animation = new BMapGL.ViewAnimation(keyFrames, opts);

      //   开始动画
      map.startViewAnimation(animation);

      //   监听动画的时间
      animation.addEventListener("animationstart", function (e) {
        console.log("animationstart");
      });
      animation.addEventListener("animationend", function (e) {
        console.log("animationend");
      });
      animation.addEventListener("animationcancel", function (e) {
        console.log("animationcancel");
      });
      animation.addEventListener("animationiterations", function (e) {
        console.log("animationiterations");
      });

      window.addEventListener("click", () => {
        map.cancelViewAnimation(animation);
      });

实现效果: 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HM-hhxx!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值