uniapp 小程序 地图中心点设置标注点(图片)

本文介绍如何使用微信小程序中的地图组件实现地图显示、定位及图片覆盖等功能,并探讨了地图缩放和平移时触发事件的方法。此外,还提供了一种获取地图中心点经纬度的技术方案。

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

在这里插入图片描述

<map id="myMap" class="myMap" scale="{{scale}}" min-scale="8" longitude="{{longitude}}" latitude="{{latitude}}" 
show-location="true"  bindregionchange="regionDidChange">
    <!-- map content -->
    <cover-image class="manpCenter" src="/images/home/map/map_center.png"></cover-image>
</map>
// 设置图片样式
.manpCenter {
  width: 48rpx;
  height: 77rpx;
  position: absolute;
  left: calc(50% - 24rpx);
  top: calc(50% - 77rpx); // 按道理是-38.5rpx,但是会比实际偏上一点,设置-77rpx视觉上比较符合实际
}
// 如果仅有地图缩放但没有平移,并不会触发此方法。目前未发现有能够监控scale变化的api。如果一定要监控缩放,
// 只能自己设置定时器,监控this.mapCtx.getScale(Object)。但用户体验可能也很差。
// MapContext官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.getScale.html
// 拖动地图触发事件
regionDidChange(e) {
    this.getCenterLocation()
},
// 获取地图中心点的经纬度
getCenterLocation: function () {
    this.mapCtx.getCenterLocation({
      success: function(res){
        // console.log(res)
        console.log(res.latitude + ',' + res.longitude)
      }
    })
 }, 
### 如何在 UniApp 中使用高德地图 API 实现富标注效果 #### 准备工作 为了能够在 UniApp 应用程序中集成高德地图并实现富标注功能,开发者需要先完成一些准备工作。这包括前往高德开放平台注册账号,并创建相应的应用以获取 `API Key` [^1]。 #### 富标注的概念 所谓富标注是指,在地图上不仅能够显示简单的图标作为标记,还可以附加更多的信息展示给用户,比如文字描述、图片甚至交互按钮等。这种增强型的地图标注能提供更丰富的用户体验和服务详情介绍。 #### 创建项目结构 确保已经在项目的合适路径下安装了必要的依赖库以及配置好了环境变量用于存储密钥和其他敏感数据: ```json { "env": { "AMAP_KEY": "your_amap_api_key" } } ``` #### 初始化地图组件 通过 `<map>` 组件加载高德地图服务,并设置好初始参数如中心坐标、缩放级别等属性值。同时利用自定义覆盖物的方式绘制出带有额外内容的 Marker 对象。 ```html <template> <view class="container"> <!-- 地图容器 --> <amap :center="center" :zoom="zoom"></amap> <!-- 自定义覆盖物列表 --> <div v-for="(marker, index) in markers" :key="index"> <custom-marker @click="handleMarkerClick(marker)" /> </div> </view> </template> <script setup lang="ts"> import { ref } from 'vue'; // 定义地图初始化参数 const center = ref([116.397428, 39.90923]); const zoom = ref(15); // 标记集合 let markers = [ // 示例数据项 ]; </script> ``` #### 添加富媒体信息窗体 当用户击某个特定地时弹出包含更多信息的小窗口,这里可以通过监听 marker 的 click 事件触发回调函数处理逻辑,动态更新界面上呈现的内容片段。 ```javascript function handleMarkerClick(selectedMarker){ console.log(`Selected marker info:`, selectedMarker); // 更新视图状态或打开模态框展现更多细节... } // 注册事件处理器至各标记实例 markers.forEach((m,i)=>{ m.addEventListener('click',()=>{handleMarkerClick(m)}); }); ``` #### 获取 POI 数据并与之关联 借助于 AMap.PlaceSearch 接口检索附近的兴趣(Point of Interest),并将返回的结果集映射到之前准备好的 Markers 数组里去,从而实现在地图上的可视化表示。 ```javascript async function fetchNearbyPOIs(location){ const placeSearchService = new AMap.PlaceSearch({ pageSize: 10, pageIndex: 1, citylimit: true, extensions: 'all', type: '体育设施' }); let poiResult; try { poiResult = await placeSearchService.searchNearBy('', location, 500); // 查询半径设为500米内 } catch (error) { console.error(error.message); } if(poiResult && Array.isArray(poiResult.poiList.pois)){ markers.value = poiResult.poiList.pois.map(item => ({ position:[item.location.lng,item.location.lat], title:item.name, snippet:`地址:${item.address}\n电话:${item.tel}` })); } } ``` 以上代码展示了如何基于 Vue.js 和 TypeScript 构建一个支持富标注特性的 UniApp 应用场景下的解决方案概览[^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值