vue-webpack引入百度地图

vue-webpack百度地图的引入及可视化数据联动

如何在前端项目中引入百度地图呐

百度地图开发者文档,JavaScriptAPI(注意一下,他有几个版本,但是这些版本不兼容,真的很吐血)

  1. 实例化地图
  var map = new BMap.Map("allmap"); // 创建地图实例
  var point = new BMap.Point(104.072888, 30.576798); // 创建点坐标
  this.map.centerAndZoom(point, 10); // 初始化地图,设置中心点坐标和地图级别
  this.map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放
  this.map.setMapStyle({ style: "light" }); //地图风格
  var marker = new window.BMap.Marker(point); // 创建标注
  this.map.addOverlay(marker); // 将标注添加到地图中
  1. 引用地图
 mounted() {
    this.baiduMap();
  },
// body里面的代码
  <div class="baidumap" id="allmap"></div>
  1. 数据联动,点击盒子上的数据地图联动
    需要各个地方的经纬度数据 ,下面举个例子:
  const { lng, lat } = item.point;
      // const point = new BMap.Point(lng, lat);
      const point = new BMap.Point(lng, lat);

      // this.map.flyTo(point);
      this.map.centerAndZoom(point, 7);
      
      //起点终点的划线
      const polyline = new BMap.Polyline(
        [
          new BMap.Point(104.072888, 30.576798),
          new BMap.Point(lng, lat)
        ],
        { strokeColor: "#60c0f8b3", strokeWeight: 6, strokeOpacity: 0.5 }
      );
      this.baiduMap();
      const marker = new window.BMap.Marker(point, 7);
      this.map.addOverlay(marker);
      this.map.addOverlay(polyline);
  1. 综合案例
<template>
  <div class="contain">
    <div class="baidumap" id="allmap"></div>
    <AppHeader
      @eventCloseVisible="eventCloseVisible"
      @eventShowVisible="eventShowVisible"
      @handleSearch="handleSearch"
    />
    <!-- <carInfoByd :carInfoVisible="carInfoShowVisible" /> -->
    <!-- 车辆基本信息 -->
    <div v-show="carTradeVisible">
      <div class="incident-box" v-show="carTradeVisible">
        <div class="content-left">
          <dv-border-box-2>
            <el-card class="box-card">
              <div slot="header" class="clearfix">
                <span>特定车辆</span>

                <el-button style="float: right; padding: 3px 0" type="text"></el-button>
              </div>
              <div class="content">
                <div class="card-right">
                  <div
                    @click="handleClick(item)"
                    v-for="(item, index) in carCatory"
                    :key="item + index"
                    class="text item"
                  >
                    <span>{{item.name}}</span>
                    <span>{{item.carName}}</span>
                  </div>
                </div>
              </div>
            </el-card>
          </dv-border-box-2>
        </div>
      </div>
      <!-- 弹窗 -->
      <!-- 车辆详情 -->
      <div class="car-Detail" v-show="carDetailStatus">
        <dv-border-box-2>
          <el-card class="box-card car_Detail">
            <div slot="header" class="clearfix">
              <span>{{item.name}}</span>
            </div>

            <div class="incident-box_body">
              <!-- <div class="incident-box"> -->
              <div class="incident-box_body_left">
                <div class="base-info">
                  <span>车型:</span>
                  <span>{{item.carName}}</span>
                </div>
                <div class="base-info">
                  <span>车牌颜色:</span>
                  <span>{{item.carColor}}</span>
                </div>
                <div class="base-info">
                  <span>经营范围:</span>
                  <span>{{item.range}}</span>
                </div>
                <div class="base-info">
                  <span>座位数:</span>
                  <span>{{item.sateNum}}</span>
                </div>
                <div class="base-info">
                  <span>所属公司:</span>
                  <span>{{item.belong}}</span>
                </div>
              </div>

              <div class="incident-box_body_right">
                <div class="base-info">
                  <span>车牌:</span>
                  <span>{{item.name}}</span>
                </div>
                <div class="base-info">
                  <span>燃油类型:</span>
                  <span>{{item.oil}}</span>
                </div>
                <div class="base-info">
                  <span>运营状态:</span>
                  <span>{{item.status}}</span>
                </div>
              </div>
            </div>
          </el-card>
        </dv-border-box-2>
        <!-- 车辆行驶轨迹 -->
        <dv-border-box-2>
          <el-card class="box-card car_trade">
            <div slot="header" class="clearfix">
              <span>车辆轨迹列表</span>
              <!-- <el-button style="float: right; padding: 3px 0" type="text"></el-button> -->
            </div>
            <div class="position">
              <div class="base-info">
                <span>{{item.begin1}}</span>
                <span>到</span>
                <span>{{item.arrive1}}</span>
              </div>
              <div class="base-info">
                <span>{{item.begin2}}</span>
                <span>到</span>
                <span>{{item.arrive2}}</span>
              </div>
            </div>
          </el-card>
        </dv-border-box-2>
      </div>
    </div>
  </div>
</template>
<script
	type="text/javascript"
	src="//api.map.baidu.com/api?v=3.0&ak=3bVHdeo2ZZaZO4QczC63d0kMsbA55ZSD"
></script>
<script type="text/javascript">
import AppHeader from "@/components/AppHeader";
import echarts from "echarts";

export default {
  components: {
    AppHeader
  },
  data() {
    return {
      // ViewShow: true,
      carDetailStatus: false,
      carInfoVisible: false,
      // carInfoShowVisible: false,
      carTradeVisible: true,
      chart: null,
      item: {},

      carCatory: [
        {
          name: "川A66154",
          carName: "BYD",
          children: {
            name: "川A66154",
            carName: "BYD",
            carColor: "yellow",
            range: "网上营销",
            sateNum: "34",
            belong: "金龙汇通",
            oil: "汽油#92",
            status: "运营中",
            begin1: "成都东客站",
            arrive1: "德阳站",
            begin2: "德阳站",
            arrive2: "成都南"
          },
          point: { lng: 104.37, lat: 31.13 }
        },
        {
          name: "川B7785Q",
          carName: "五菱宏光",
          children: {
            name: "川B7785Q",
            carName: "五菱宏光",
            carColor: "白色",
            range: "网上营销",
            sateNum: "34",
            belong: "金龙汇通",
            oil: "汽油",
            status: "运营中",
            begin1: "成都东",
            arrive1: "绵阳站",
            begin2: "绵阳站",
            arrive2: "成都西"
          },
          point: { lng: 104.94, lat: 30.57 }
        },
        {
          name: "川CSB779",
          carName: "东风日产",
          children: {
            name: "川CSB779",
            carName: "东风日产",
            carColor: "白色",
            range: "门店直销",
            sateNum: "22",
            belong: "运航",
            oil: "新能源",
            status: "已下架",
            begin1: "成都西",
            arrive1: "自贡站",
            begin2: "自贡站",
            arrive2: "成都东"
          },
          point: { lng: 104.78, lat: 29.35 }
        },
        {
          name: "川Z4563X",
          carName: "大众",
          children: {
            name: "川Z4563X",
            carName: "大众",
            carColor: "白色",
            range: "线上预售",
            sateNum: "42",
            belong: "运航",
            oil: "柴油",
            status: "营业中",
            begin1: "成都东",
            arrive1: "眉山站",
            begin2: "眉山站",
            arrive2: "成都南"
          },
          point: { lng: 103.83, lat: 30.05 }
        },
        {
          name: "川F654CP",
          carName: "Jeep",
          children: {
            name: "川F654CP",
            carName: "Jeep",
            carColor: "红色",
            range: "线上预售",
            sateNum: "6",
            belong: "4S",
            oil: "汽油",
            status: "营业中",
            begin1: "成都南",
            arrive1: "德阳站",
            begin2: "德阳站",
            arrive2: "双流西"
          },
          point: { lng: 104.94, lat: 30.57 }
        }
      ]
    };
  },

  mounted() {
    this.baiduMap();
  },

  methods: {
    handleClick(item) {
      console.warn(item, "----------------");
      const { name, carName, children } = item;
      this.item = children;
      this.carDetailStatus = true;
      const { lng, lat } = item.point;
      // const point = new BMap.Point(lng, lat);
      const point = new BMap.Point(lng, lat);

      // this.map.flyTo(point);
      this.map.centerAndZoom(point, 7);

      const polyline = new BMap.Polyline(
        [
          new BMap.Point(104.072888, 30.576798),
          new BMap.Point(lng, lat)
        ],
        { strokeColor: "#60c0f8b3", strokeWeight: 6, strokeOpacity: 0.5 }
      );
      this.baiduMap();
      const marker = new window.BMap.Marker(point, 7);
      this.map.addOverlay(marker);
      this.map.addOverlay(polyline);
    },
    baiduMap() {
      var map = new BMap.Map("allmap"); // 创建地图实例
      this.map = map;
      var point = new BMap.Point(104.072888, 30.576798); // 创建点坐标
      this.map.centerAndZoom(point, 10); // 初始化地图,设置中心点坐标和地图级别
      this.map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放
      // map.addControl(new BMap.NavigationControl());
      // map.addControl(new BMap.ScaleControl());
      // map.addControl(new BMap.OverviewMapControl());
      // map.addControl(new BMap.MapTypeControl());
      this.map.setMapStyle({ style: "light" }); //地图风格

      var marker = new window.BMap.Marker(point); // 创建标注
      this.map.addOverlay(marker); // 将标注添加到地图中

      //提示信息
      var infoWindow = new BMap.InfoWindow("这是提示信息");
      // 鼠标移上标注点要发生的事
      marker.addEventListener("mouseover", function() {
        this.openInfoWindow(infoWindow);
      });

      // 鼠标移开标注点要发生的事
      marker.addEventListener("mouseout", function() {
        //this.closeInfoWindow(infoWindow)
      });
    },
    eventShowVisible() {
      this.carTradeVisible = true;
    },
    eventCloseVisible() {
      this.carTradeVisible = false;
    },
    handleSearch(item) {}
  }
};
</script>

<style lang="scss" scoped>
.contain {
  width: 100%;
  height: 100%;
  // position: relative;
  box-sizing: border-box;
}
.incident-box {
  position: absolute;
  top: 15%;
  right: 2%;
  flex: 1;
}
.car-Detail {
  left: 2%;
  // height: 100%;
  display: flex;
  flex-direction: column;
  justify-content: space-around;
  position: absolute;
  top: 15%;
}
.text {
  font-size: 14px;
  width: 100%;
  text-align: left;
  padding: 3px;
  display: flex;
  flex-direction: row;
  justify-content: space-around;
}

.item {
  width: 100%;
  overflow: hidden; //超出的文本隐藏
  text-overflow: ellipsis; //溢出用省略号显示
  white-space: nowrap; //溢出不换行
}
.clearfix {
  color: rgb(245, 245, 129);
}
.clearfix:before,
.clearfix:after {
  display: table;
  content: "";
}
.clearfix:after {
  clear: both;
}
.dv-border-box-2 {
  height: 236px;
}

.box-card {
  height: 235px;
  width: 360px;
  margin-bottom: 3%;
  background-color: #60c0f8b3;
  color: white;
}

.left {
  text-align: left;
}

#allmap {
  width: 100%;
  height: 100%;

  z-index: -1;
  background: black;
  overflow: hidden;
}
.el-progress {
  width: 80%;
  text-align: center;
}
.content {
  margin-top: -10px;
  .card-right {
    text-align: center;
    span {
      width: 200px;
      display: flex;
      flex-direction: row;
      text-align: left;
    }
  }
}

.incident-box_body {
  display: flex;
  flex-direction: row;
  justify-content: space-around;
  .base-info {
    display: flex;
    flex-direction: row;
    align-items: center;

    span {
      width: 90px;
      text-align: left;
      padding: 5px;
      &:first-child {
        text-align: right;
      }
    }
  }
}
.position {
  .base-info {
    display: flex;
    flex-direction: row;
    justify-content: space-around;

    span {
      width: 100px;
      text-align: left;
    }
  }
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值