VUE集成高德地图自定义Marker图标及事件

本文介绍了在Vue项目中集成高德地图并实现自定义Marker图标及点击事件的详细过程。遇到的问题包括图标路径设置、多个Marker的管理和信息窗口的显示。最终实现了根据业务对象显示不同图标,点击Marker弹出信息窗口的功能。

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

在项目中需要利用Marker对地图位置进行自定义标记,想使用自己的图标,并在点击Marker时需要弹出框显示对象信息,并且做后续自定义的操作。

高德地图上自定义单位Marker有介绍,但自定义多个使用的方法不是一样,并且直接用vue的el组件生成Marker后续操作时多个Marker传递marker的序号有问题,导致信息窗口显示不正常。这个坑到处找资料,花了整整2天才全部搞定。

一、需求

根据用户自已定信的对象,在地图上显示,对象是具有地图属性的业务对象,为了区分业务对象,不同的业务对象在地图上想显示不同的Marker图标。点南击图标Marker弹出窗口,进一步显示更多属性信息,和相应的操作。

二、准备

定义了一个地衅组件,增加了Marker标记,弹出信息窗两个子组件。Markers组由于不能传递Marker的序号,该序号用于决定哪个信息窗显示不成功,放弃了此方法,直接在程序中生成marker

<el-amap class="amap-box"
             :amap-manager="amapManager"
             :vid="'amap-vue'"
             :zoom="zoom"
             :plugin="plugin"
             :center="center"
             :events="events"
    >
      <!-- 景区标记 -->
      <!--      <el-amap-marker v-for="(marker) in markers"
                            :position="marker.position"
                            :index="marker.index"
                            :icon="scenicIcon"
                            :events="marker.events">
            </el-amap-marker>-->

    </el-amap>

三、生成多个景区标记(Markers)

1、自定义图标:

图标放在阿里云的OSS上的,起初上放在程序的assets目录,由于是在高德地图中嵌入使用,搞了半天都不成功,看高德地图的官方资料,也是使用全名称路径,没办法,改到OSS上用全路径搞成功了。此处定义了景区和景点两图标备后面使用

scenicIcon: new AMap.Icon({
   
   
  size: new AMap.Size(35, 35),    // 图标尺寸  image: process.env.VUE_APP_OSS_PREFIX + 'icon/scenic2.svg',  // Icon的图像  imageSize: new AMap.Size(35, 35)
}),
高德地图Vue插件的开发手册通常会指导开发者如何在基于Vue.js的应用中集成使用高德地图API,包括自定义海量点的显示。以下是实现这一功能的一些关键步骤: 1. **安装依赖**:首先需要在项目中安装高德地图的官方Vue组件,例如`vue-amap`,通过npm或yarn进行安装。 ```bash npm install vue-amap @amap/api-v3 --save ``` 2. **注册并配置**:在Vue的main.js或入口文件里注册并初始化高德地图服务,设置所需的API Key。 ```javascript import VueAMap from 'vue-amap' Vue.use(VueAMap, { ak: 'your_amap_key', // 你需要替换为实际的高德地图API Key }) ``` 3. **创建地图组件**:创建一个新的Vue组件,利用`VueAMap.Map`组件,并设置地图容器和中心点、缩放级别等属性。 ```html <template> <div ref="map" :style="{ width: '100%', height: '400px' }"></div> </template> <script> export default { components: { VueAMapMap: { extends: VueAMap.Map, props: ['center', 'zoom'] } }, data() { return { map: null, }; }, mounted() { this.initMap(); }, methods: { initMap() { const map = new this.VueAMapMap(this.$refs.map); map.setCenter(this.center).setZoom(this.zoom); // 接下来会教你如何添加和管理海量数据 }, }, }; </script> ``` 4. **处理大量数据**:由于一次性加载所有点可能会导致性能问题,可以采取分页加载或者懒加载策略。你可以使用`MarkerClusterer`组件对密集点进行聚合,或者使用`AMap.Marker`动态添加标记,只在用户查看到某个区域时才加载对应的数据。 5. **自定义标记样式**:对于海量点,可能需要提供一种可视化的方式来区别不同类型的点。你可以覆盖`Marker`的默认样式,并在每个点上绑定事件监听器。 ```javascript // 示例:按颜色分类的点 this.data.map(point => { const marker = new AMap.Marker({ position: point.location, icon: { url: `marker-${point.category}.png`, // 根据类别加载不同图标 size: new AMap.Size(32, 32), }, events: { click: () => console.log(point) } }); map.add(marker); }); ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值