百度地图根据多个定位点自适应缩放级别(获取多个点位的中心点)

该文介绍了一个Vue组件,通过接收多个经纬度点位,利用百度地图API的getViewport方法计算出合理的地图中心点和缩放级别,确保所有点位在地图上可见。在页面加载时,会自动初始化地图并显示所有标记点。
摘要由CSDN通过智能技术生成

一、业务场景

地图上传入多个经纬度点位,根据经纬度的点位,显示合理的地图缩放级别和地图中心点,确保这些点位都能刚好在地图上展示出来。

二、实现方法

根据百度地图的 getViewport() 方法,获取到多个经纬度点位的中心点和合理的缩放级别。

	  // 获取合理的中心点
      const centerPoint = map.getViewport(mapPointsList)

      // 初始化地图,设置中心点坐标和地图级别
      map.centerAndZoom(centerPoint.center, centerPoint.zoom)

部分代码如上所示:通过给 getViewport() 传入多个经纬度点位,返回合理的中心点经纬度点位和缩放级别。返回对象的 center 是点位,zoom 是缩放级别。

三、具体代码

<template>
  <div id="mapContainer" class="map-container"></div>
</template>

<script>
import { onMounted } from 'vue'
import BMap from 'BMap'

export default {
  name: 'BaiduMap',
  setup () {
    let map = null
    const pointsList = [{
      longitude: '116.226045',
      latitude: '39.663223'
    }, {
      longitude: '116.629636',
      latitude: '39.789306'
    }, {
      longitude: '116.892947',
      latitude: '38.36702'
    }, {
      longitude: '108.853328',
      latitude: '35.562558'
    }, {
      longitude: '112.620175',
      latitude: '32.288965'
    }, {
      longitude: '116.708974',
      latitude: '28.144061'
    }]
    const initMap = () => {
      // 创建地图实例
      map = new BMap.Map('mapContainer')

      // 根据传入的pointsList点位转化为百度Point
      const mapPointsList = []
      pointsList.forEach(item => {
        mapPointsList.push(new BMap.Point(Number(item.longitude), Number(item.latitude)))
      })

      // 获取合理的中心点
      const centerPoint = map.getViewport(mapPointsList)

      // 初始化地图,设置中心点坐标和地图级别
      map.centerAndZoom(centerPoint.center, centerPoint.zoom)

      // 添加覆盖点
      mapPointsList.forEach(item => {
        // 添加覆盖点
        const mapIcon = new BMap.Icon(require('./assets/map-position.png'), new BMap.Size(40, 52))
        const marker = new BMap.Marker(item, { icon: mapIcon })
        // 给地图添加覆盖物marker
        map.addOverlay(marker)
      })
    }

    onMounted(() => {
      initMap()
    })

    return {

    }
  }
}
</script>

<style lang="scss" scoped>
// 地图
.map-container {
  width: 100%;
  height: 600px;
}
</style>

四、效果展示

在这里插入图片描述
在页面初次加载的时候会自动计算出合理的中心点位和缩放级别,不会单独以某个点位和固定的缩放级别进行渲染而导致某些点位在加载时看不到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值