news 2026/10/29 11:06:52

微信小程序实验:map组件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
微信小程序实验:map组件

微信小程序提供原生<map>地图组件,适合校园导航、点位展示类小程序开发。本文基于课程案例,实现地图渲染、获取当前位置、手动选择位置、唤起微信内置地图,同时配置 3 个标记点位,其中包含黑龙江东方学院第四学生公寓真实经纬度,完整代码可直接导入微信开发者工具运行。

一、map 组件基础介绍

<map>是小程序原生地图组件,支持设置地图中心点、缩放等级、markers 标记点、路线绘制等功能。

⚠️重要提醒:map 属于原生组件,部分 CSS 样式会失效;使用定位相关 API,必须配置权限,否则接口调用报错。

核心常用属性:

表格

属性作用
longitude地图中心经度
latitude地图中心纬度
scale地图缩放级别,范围 3‑20
markers标记点数组,自定义图标、标题、经纬度

坐标系要求:小程序 map 组件统一使用gcj02 火星坐标系,直接使用 GPS 原始 WGS84 坐标会出现位置偏移。

二、项目目录结构

map组件/ ├── app.js ├── app.json # 定位权限核心配置 ├── app.wxss ├── images/ │ ├── loc01.png # 标记图标1 │ └── loc02.png # 标记图标2 └── pages/ └── index/ ├── index.js ├── index.wxml ├── index.wxss └── index.json

三、代码

app.json

调用getLocation、chooseLocation必须在app.json声明隐私接口与定位权限。

{ "pages": [ "pages/index/index" ], "window": { "backgroundTextStyle":"light", "navigationBarTitleText": "map地图组件案例", "navigationBarBackgroundColor": "#ffffff", "navigationBarTextStyle":"black" }, "requiredPrivateInfos": [ "getLocation", "chooseLocation" ], "permission": { "scope.userLocation": { "desc": "用于获取你的位置展示在地图上" } } }

提示:本地开发调试无需申请权限;项目上线,需要在小程序后台接口设置中开通这两个定位接口权限。

index.wxml

地图视图,搭配两个功能按钮:选择位置、打开内置地图

<view class="box"> <view class="title">小程序Map地图演示</view> <!-- 地图组件 --> <map longitude="{{longitude}}" latitude="{{latitude}}" scale="14" markers="{{markers}}" style="width:100%;height:450rpx;"> </map> <view class="btnLayout"> <button bindtap="handleChooseLocation">选择位置</button> <button bindtap="handleOpenLocation">打开位置</button> </view> </view>

index.wxss

.box{ padding:20rpx; } .title{ text-align:center; font-size:32rpx; margin-bottom:20rpx; } .btnLayout{ margin-top:30rpx; display:flex; gap:20rpx; } .btnLayout button{ flex:1; }

index.js

第三个标记点使用真实经纬度:第四学生公寓 经度 126.661975,纬度 45.576925

Page({ data:{ longitude:127.34, latitude:45.73, markers:[ { id:1, longitude:127.34, latitude:45.73, title:"我的位置", iconPath:"/images/loc01.png", width:28, height:28 }, { id:2, longitude:127.342, latitude:45.732, title:"黑龙江东方学院南门", iconPath:"/images/loc02.png", width:28, height:28 }, { id:3, longitude:126.661975, latitude:45.576925, title:"黑龙江东方学院第四学生公寓", iconPath:"/images/loc01.png", width:28, height:28 } ] }, // 手动选择位置 handleChooseLocation(){ wx.chooseLocation({ success:(res)=>{ console.log("选择位置结果",res) this.setData({ longitude:res.longitude, latitude:res.latitude }) wx.showToast({ title:`已选:${res.name}`, icon:"none" }) }, fail:(err)=>{ console.error("选择位置失败",err) wx.showToast({title:"位置选择失败,请开启定位权限",icon:"none"}) } }) }, // 获取当前位置,打开微信内置地图 handleOpenLocation(){ wx.getLocation({ type:"gcj02", success:(res)=>{ wx.openLocation({ latitude:res.latitude, longitude:res.longitude, scale:14 }) }, fail:(err)=>{ console.error("获取位置失败",err) wx.showToast({title:"获取位置失败,请授权定位",icon:"none"}) } }) } })

四、实现效果

五、常见问题汇总

  1. 定位接口报错:检查app.json权限配置,真机确认定位权限已允许;
  2. 标记点不显示:iconPath使用绝对路径,图片尺寸不宜过大;
  3. 地图点位偏移:必须使用gcj02坐标系,不要直接使用 GPS 原始坐标;
  4. 上线后定位失效:小程序后台开通getLocation、chooseLocation接口权限;
  5. map 是原生组件,部分 CSS transform 等样式不生效。

六、拓展方向

  1. 绑定bindmarkertap实现标记点点击弹窗展示点位详情;
  2. 请求后端接口动态渲染 markers,实现周边点位展示;
  3. 使用polyline绘制路线轨迹;
  4. 调用地图 API 完成地址与经纬度相互转换。

七、总结

本案例使用小程序 map 原生组件,配置定位权限,实现地图渲染、多标记点(包含第四学生公寓真实经纬度)、手动选点、唤起微信内置地图。开发注意 gcj02 坐标系,规避权限、图片路径、点位偏移问题,可拓展标记点击、路线绘制等功能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/29 11:06:50

Agent降本40%攻略:少绕、少带、复用、路由,小白也能学会大模型优化

本文提供了一套完整的Agent成本优化策略&#xff0c;从成本拆分、瓶颈定位到具体优化方法&#xff0c;帮助读者在保证任务成功率与延迟的前提下降低单任务成本。文章强调优化应遵循“先减少不必要的轮次&#xff0c;再减少每轮携带的信息&#xff0c;然后复用重复计算&#xff…

作者头像 李华
网站建设 2026/10/29 11:06:41

设备数据上不来、协议对不上?工业网关要解决的正是这件事

工厂做数字化&#xff0c;第一步往往就卡住。车间里的设备来自不同年代、不同品牌。新上的产线支持以太网和标准协议&#xff0c;老设备还在用串口甚至私有协议。想把它们的数据统一采上来&#xff0c;接进系统&#xff0c;发现“语言不通”。有人尝试用软件方案硬解&#xff0…

作者头像 李华
网站建设 2026/10/29 11:06:35

【无标题】EXTI外部中断

中断系统中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续运行。中断优先级&#xff1a;当…

作者头像 李华
网站建设 2026/10/29 11:06:21

Kotlin教程 Flow(数据流)-中级讲解

一.代码使用1.ViewModel操作数据class UserInfoViewModel : ViewModel() {/*** 保存用户信息* */fun saveUserInfo(userInfoDao: UserInfoDao, userInfo: UserInfo) {viewModelScope.launch(Dispatchers.IO) {val dbUserInfo fromJson2Bean(fromObject2Json(userInfo), DBUser…

作者头像 李华
网站建设 2026/10/29 11:06:19

推荐一款文字转语音软件?我把 5 款 TTS 方案横向对比了一遍

最近后台问配音的人特别多&#xff0c;十个人里有八个的说法是同一句&#xff1a;"有没有便宜好用的&#xff0c;你直接推荐一款文字转语音软件给我就行。" 我一开始也图省事&#xff0c;想甩一个名字过去。后来发现真甩不出来。 因为我自己的活儿不是单一的&#xf…

作者头像 李华