Vue高德地图自定义覆盖物使用实例-content的使用

lizuncong (lizuncong) · GitHubI am a strong believer in reverse engineering. lizuncong has 42 repositories available. Follow their code on GitHub.https://github.com/lizuncong

本例使用content实现在高德地图上自定义覆盖物,即自定义marker。先看如下效果:

标题

在地图上显示三种颜色的marker:绿色,紫色,橙色。当点击其中的一个marker时,该Marker颜色变为蓝色,size变大,并旋转45度。再次点击其他marker时,之前点击的marker恢复成原来的形状。

<template>
  <div id="mapDemo">
    <el-amap ref='map' vid="amapDemo" :amap-manager="amapManager" :events="mapEvents" :zoom="zoom" :center="centerPosition" class="amap-demo">
      <el-amap-marker class="selectedMarker"
        v-for="(item, index) in datas"
        :key="index"
        :position="item.lnglat"
        topWhenClick="true"
        :extData="item"
        :content="getMarkerContent(item, 30, 30)"
        :events="markerEvents">
      </el-ama
### 实现 Vue高德地图自定义覆盖物 #### 初始化 AMap 对象并配置基础参数 为了在 Vue 项目中集成高德地图并实现自定义覆盖物,首先需要确保已经成功引入了高德地图 SDK 并完成了基本的地图实例化操作。 ```javascript import { onMounted, ref } from 'vue'; // 引入高德地图JS API window._AMapSecurityConfig = { securityJsCode: "your-security-code" }; const mapRef = ref(null); onMounted(() => { const script = document.createElement('script'); script.src = `https://webapi.amap.com/maps?v=2.0&key=${process.env.VUE_APP_AMAP_KEY}`; document.head.appendChild(script); }); ``` #### 创建自定义覆盖物组件 通过继承 `AMapOverlay` 类可以构建个性化的图形元素。下面是一个简单的多边形绘制案例: ```typescript class CustomPolygon extends AMap.Overlay { constructor(options) { super(); this.options = options; this.initOptions(this.options); // 设置默认样式和其他属性 } draw() { let path = this.getPath(); // 获取路径坐标集合 var context = this.getContext(); context.beginPath(); for (let i = 0; i < path.length; ++i) { if (!path[i]) continue; if (i === 0) { context.moveTo(path[i].lng, path[i].lat); } else { context.lineTo(path[i].lng, path[i].lat); } } context.closePath(); context.strokeStyle = '#FFA500'; // 边框颜色设置为橙色 context.stroke(); context.fillStyle = "#FFFFCC"; // 填充颜色设为淡黄色 context.fillOpacity = 0.5; // 半透明效果 context.fill(); } } ``` 此部分代码展示了如何基于给定的经纬度列表创建一个多边形,并应用特定的颜色和透明度[^1]。 #### 将自定义覆盖物添加到地图上 一旦完成上述类定义,在适当的地方调用其构造函数并将新对象加入至地图容器内即可显示出来。 ```javascript function addCustomPolygon(mapInstance, lnglats) { let polygon = new CustomPolygon({ path: lnglats, bubble: true, cursor: 'pointer' }); polygon.setMap(mapInstance); } addCustomPolygon(mapRef.value, [ [120.198476, 30.265], [120.198476, 30.26], [120.199476, 30.26], [120.199476, 30.265] ]); ``` 这段脚本负责接收一组地理坐标作为输入参数,进而生成对应的视觉表现形式附着于指定的地图视图之上[^2]。 #### 数据预处理与适配 实际开发过程中可能遇到后台返回的数据结构不符合前端展示需求的情况,这时就需要对获取的信息进行必要的转换工作以匹配预期格式。例如将 JSON 数组转化为适合用来描绘区域轮廓的形式——即一系列由经度纬度组成的点序列[^3]。 ```javascript function transformDataForMap(rawData){ return rawData.map(item=>{ return item.coordinates.map(coordinate=>({lng:coordinate[0], lat:coordinate[1]})); }) } ``` 该辅助函数接受来自服务器端未经加工过的原始资料集合作为入口参数,经过映射运算后输出调整过后的版本供后续逻辑单元消费使用
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值