【记录】关于百度地图在Nuxt3中的使用问题

在需要使用的页面

const LoadBaiduMapScript = () => {
  const AK = '自己百度地图的AK'
  const BMap_URL = 'https://api.map.baidu.com/api?v=3.0&ak=' + AK + '&s=1&callback=onBMapCallback'
  return new Promise((resolve, reject) => {
    // 如果已加载直接返回
    if (typeof BMap !== "undefined") {
        resolve(BMap);
        return true;
    }
    // 百度地图异步加载回调处理
    window.onBMapCallback = function () {
        console.log("百度地图脚本初始化成功...");
        resolve(BMap);
    };
    // 插入script脚本
    let scriptNode = document.createElement("script");
    scriptNode.setAttribute("type", "text/javascript");
    scriptNode.setAttribute("src", BMap_URL);
    document.body.appendChild(scriptNode);
  })
}

然后在组件渲染后调用

onMounted(async () => {
  // 注意加入异步
  await LoadBaiduMapScript()
  // 创建地图实例,初始化地图等操作
  setMap()
})

setMap方法跟百度地图例子差不多

const setMap = () => {
  try {
    let map = new BMap.Map(mapRef.value);  // 创建地图实例
    let point = new BMap.Point(
      companyList.value[currentIndex.value].lng,
      companyList.value[currentIndex.value].lat
    ) // 创建点坐标
    map.centerAndZoom(point, 18) // 初始化地图,设置中心点坐标和地图级别
    map.enableScrollWheelZoom(false) //开启鼠标滚轮缩放
    let marker = new BMap.Marker(point) // 创建标注
    map.addOverlay(marker) // 将标注添加到地图中
  } catch (error) {
    console.log(error);
  }
}

这样子就解决了

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Nuxt3使用高德地图,可以通过以下步骤实现: 1. 在`nuxt.config.js`文件引入高德地图的JS API,可以使用异步加载的方式,例如: ```javascript head: { script: [ { src: 'https://webapi.amap.com/maps?v=1.4.15&key=yourkey', async: true, defer: true } ] } ``` 2. 在需要使用地图的组件,可以通过`mounted`钩子函数初始化地图,并添加多边形等元素,例如: ```javascript mounted() { // 初始化地图 const map = new AMap.Map('map-container', { zoom: 10, center: [116.39, 39.9] }) // 添加多边形 const polygon = new AMap.Polygon({ path: [ [116.403322, 39.920255], [116.410703, 39.897555], [116.402292, 39.892353], [116.389846, 39.891365] ], strokeColor: '#FF33FF', strokeWeight: 6, strokeOpacity: 0.2, fillColor: '#1791fc', fillOpacity: 0.4 }) map.add(polygon) // 点击按钮触发编辑多边形事件 const editBtn = document.getElementById('edit-btn') editBtn.addEventListener('click', () => { polygon.setOptions({ editable: true }) }) } ``` 3. 如果需要在多个组件使用地图,可以考虑将地图的初始化和添加元素的代码封装成一个插件,例如: ```javascript // plugins/aMap.js import AMap from 'AMap' export default { install: (app) => { // 初始化地图 const map = new AMap.Map('map-container', { zoom: 10, center: [116.39, 39.9] }) // 添加多边形 const polygon = new AMap.Polygon({ path: [ [116.403322, 39.920255], [116.410703, 39.897555], [116.402292, 39.892353], [116.389846, 39.891365] ], strokeColor: '#FF33FF', strokeWeight: 6, strokeOpacity: 0.2, fillColor: '#1791fc', fillOpacity: 0.4 }) map.add(polygon) // 注册地图实例到Vue实例 app.config.globalProperties.$map = map app.config.globalProperties.$polygon = polygon } } ``` 在需要使用地图的组件,可以通过`this.$map`和`this.$polygon`访问地图实例和多边形实例。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值