vue中引入腾讯地图,并为多个marker添加事件

本文介绍了一种在Web应用中使用TMap加载并显示腾讯地图的方法。通过创建TMap.js文件并导出一个名为TMap的函数,该函数接收地图密钥作为参数,并返回一个Promise,用于异步加载地图。在Vue组件中调用此函数,可以实现地图的初始化、添加标记及信息窗口等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、在src里面建立了TMap.js的文件,内容如下:

export function TMap(key) {
    return new Promise(function (resolve, reject) {
        window.init = function () {
            resolve(qq)//注意这里
        }
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.src = "https://map.qq.com/api/js?v=2.exp&callback=init&key="+key;
        script.onerror = reject;
        document.head.appendChild(script);
    })
}

 

二、引入TMap

TMap('申请的腾讯地图key').then()   

 

 
data () {
  return {
    key: 'IOHBZ-EV2R3-4BU3N-YEQN7-AQMYF-7XFF4'
  }
},
mounted () {
  this._getLocation()
},
methods:{
       _getLocation(){
                getLocation(this.orgId).then(res=>{
                    let data = res.data.data.librarys
                    this._TMap(data)
                })
            },
            _TMap(data){
                TMap(this.key).then(qq => {
                    var center = new qq.maps.LatLng(39.916527,116.397128);
                    var map = new qq.maps.Map(document.getElementById("container"), {
                        // 地图的中心地理坐标
                        center: center,
                        //初始化地图缩放级别
                        zoom: 5
                    });
                    //添加提示窗
                    var infoWin = new qq.maps.InfoWindow({
                        map: map
                    });
                    //添加标记
                    for(let i=0;i<data.length;i++){
                        var marker = new qq.maps.Marker({
                           position: new qq.maps.LatLng(data[i].lat,data[i].lng),
                           map: map,
                        })
                        marker.libraryName = data[i].libraryName
                        qq.maps.event.addListener(marker, 'click', function() {
                            infoWin.open();
                            infoWin.setContent('<div style="text-align:center;white-space:'+
                            'nowrap;margin:10px;"> ' + this.libraryName+ ' </div>');
                            //提示窗位置
                            infoWin.setPosition(new qq.maps.LatLng(data[i].lat,data[i].lng));
                        })
                    }
                });
            },
}

 

 

三、效果如下

 

转载于:https://www.cnblogs.com/wangdashi/p/9522044.html

<think>好的,我现在需要帮助用户在Vue3项目中集成腾讯地图,实现多点标注(MultiMarker)并将地图视图居中。首先,我需要整理一下实现这个功能的步骤,确保每一步都正确无误。 首先,用户提到使用腾讯地图,所以需要确认如何引入腾讯地图的SDK。在Vue项目中,通常可以通过在public/index.html中添加脚本标签来引入外部库。但有时候也可能需要动态加载,尤其是在使用单页面应用(SPA)时,避免重复加载脚本。不过,根据腾讯地图的官方文档,直接通过script标签引入是比较常见的方式,所以这一步应该没问题。 接下来,用户需要在组件中初始化地图。这里需要获取一个DOM元素作为地图容器,通常是一个div,设置好宽度和高度,否则地图无法显示。然后使用TMap类创建地图实例,传入中心点坐标和缩放级别。中心点的坐标需要根据多点标注的位置来计算,可能需要取所有点的经纬度的平均值,或者在添加标注时动态调整地图视图。 然后是添加多点标注。腾讯地图的MultiMarker功能允许一次性添加多个标记。需要配置每个标记的位置(经纬度)、图标、标签等信息。图标部分用户提到使用阿里矢量图标库的图片,这里需要确保图标的URL正确,并且跨域问题已经解决。此外,每个标记的id需要唯一,避免冲突。 地图居中显示可能需要根据所有标记的位置来计算合适的中心点和缩放级别。腾讯地图可能提供了自动调整视野的方法,例如fitBounds,根据一组坐标点自动调整地图的显示范围。需要查阅腾讯地图的API文档,确认是否有类似的方法,或者手动计算中心点和缩放级别。 另外,用户提到点击事件,点击地图时更新标记位置。这部分可能需要监听地图的点击事件,获取点击的经纬度,然后更新标记的位置。但用户的问题主要是实现多点标注和居中,所以点击事件可能作为扩展功能,但需要确认是否需要在此次实现中包含。 现在需要检查可能的错误点。例如,引入腾讯地图SDK时,是否使用了正确的API密钥?创建地图实例时,是否传入了正确的配置项?添加标记时,图标的路径是否正确?还有,组件的生命周期管理,比如在组件销毁时是否清除了地图实例,避免内存泄漏。 另外,Vue3使用的是组合式API,可能需要使用onMounted钩子来初始化地图,确保DOM已经渲染完毕。同时,可能需要使用ref来引用地图容器元素,确保能够正确获取到DOM节点。 关于计算中心点,如果有多个标记点,可能需要遍历所有点的经纬度,计算平均值作为中心点。或者使用腾讯地图提供的LatLngBounds来包含所有标记点,然后调整地图视野。例如: const bounds = new TMap.LatLngBounds(); markers.forEach(marker => bounds.extend(marker.position)); map.fitBounds(bounds); 但需要确认腾讯地图的API是否支持这样的方法。 最后,需要测试代码,确保地图能够正确显示,标记点正确添加,并且地图视图居中显示所有标记。如果有错误,需要检查控制台输出,查看是否有脚本加载失败、API密钥错误、无效的经纬度等问题。 总结步骤: 1. 引入腾讯地图SDK,替换成用户的API密钥。 2. 创建地图容器,设置样式。 3. 在onMounted钩子中初始化地图实例。 4. 定义多个标记点的数据。 5. 使用MultiMarker添加多点标注。 6. 计算所有标记点的中心点或调整地图视野以包含所有标记。 7. 处理可能的错误和边界情况。 现在根据这些步骤,整理出具体的代码示例,并确保每一步都有注释说明。同时,提醒用户替换API密钥,并注意图标的路径是否正确,以及如何处理动态添加或删除标记的情况。</think>在Vue3中集成腾讯地图实现多点标注与地图居中,可以通过以下步骤实现: ### 一、基础配置 1. **引入SDK** ```html <!-- index.html --> <script src="https://map.qq.com/api/gljs?v=1.exp&key=您的密钥"></script> ``` 2. **创建地图容器** ```vue <!-- MapComponent.vue --> <template> <div id="map-container" style="width: 100vw; height: 100vh"></div> </template> ``` ### 二、地图初始化 ```typescript // MapComponent.vue import { onMounted } from 'vue' const initMap = () => { const center = new TMap.LatLng(39.984104, 116.307503) // 初始中心点 const map = new TMap.Map('map-container', { center, zoom: 13 }) return map } onMounted(() => { const map = initMap() }) ``` ### 三、多点标注实现 ```typescript const markers = [ { id: 'marker1', position: new TMap.LatLng(39.984104, 116.307503), content: '<img src="marker-red.png" width="30" height="40">' }, { id: 'marker2', position: new TMap.LatLng(39.954104, 116.357503), content: '<img src="marker-blue.png" width="30" height="40">' } ] const addMultiMarkers = (map: TMap.Map) => { new TMap.MultiMarker({ map, geometries: markers }) // 自动居中 const bounds = new TMap.LatLngBounds() markers.forEach(marker => bounds.extend(marker.position)) map.fitBounds(bounds) } ``` ### 四、完整组件示例 ```vue <script setup lang="ts"> import { onMounted } from 'vue' onMounted(() => { const map = initMap() addMultiMarkers(map) }) // 初始化地图与标注方法同上 </script> ``` ### 五、注意事项 1. **密钥申请**:需前往[腾讯位置服务控制台](https://lbs.qq.com/)申请API密钥 2. **图标优化**:建议使用base64编码图标避免跨域问题 3. **性能优化**:超过100个标注时建议使用点聚合技术[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值