微信小程序:高德地图在小程序中的实践(含静态地图)

本文讲述了在房产相关小程序项目中,遇到地图组件穿透底部菜单的问题,作者通过引入高德地图的微信小程序SDK,实现静态地图功能,避免了地图组件带来的视觉干扰。

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

前言
前人栽树,后人乘凉。记录下工作的点点滴滴,让同道中人少走弯路~

来看看需求和问题:房产相关的项目,详情中需要显示房源地址,底部要有固定的菜单(不是tabbar),房源数据过多,数据超过一屏时,map组件从底部进入,会穿透固定在底部的菜单,导致页面闪烁。

开始
参考一些行业大佬的产品,发现他们使用的只是一张图片,没有使用原生的map组件去实现,我想可能也是开发中遇到了坑。。

鉴于我司全部项目数据使用的是高德地图,在小程序中为了坐标一致,也使用高德推出的 微信小程序SDK。下面介绍一下如何使用。

实践
官方链接:概述-微信小程序插件 | 高德地图API
参照官方的教程,在获取相应的key值,并下载所需的文件到本地,在项目中使用

在页面的js中引入高德的js文件:

// 引入高德地图
var amapFile = require('../../../libs/map/amap-wx.js')

初始化地图调用方法获取静态地图:

// 绘制静态图片 【lon:经度, lat: 纬度】
getStaticMapImg(lon, lat) {
  let that = this
  var myAmapFun = new amapFile.AMapWX({
    key: '你申请的key值'
  }) myAmapFun.getStaticmap({
    // 中心点
    location: lon + ',' + lat,
    // 缩放
    zoom: 14,
    // 图片的宽高
    size: that.data.staticImgWidth + '*' + that.data.staticImgHeight,
    // 图片的清晰度
    scale: 2,
    // 标记点
    // markers: 'large,0xFF0000,这:116.37359,39.92437',
    // markers: '-1,http://admin.broker.fangbee.cn/img/house-icon.png,0:'+lon+','+lat,
    // -1,标注图片的URL地址,0: 经度,纬度
    markers: '-1,http://xxx.yyy.zzz.cn/img/map.png,0:' + lon + ',' + lat,
    // 标签  内容,字体,粗细,字号,字体颜色,背景颜色
    // labels: '"",0,0,32,0xffffff,0x087b46:116.37359,39.92437',
    // labels: '朝阳公园,2,0,16,0xFFFFFF,0x008000:116.48482,39.94858',
    success: function(res) {
      that.setData({
        // res.url: 返回的静态图片的URL地址
        mapStaticImg: res.url
      })
    },
    fail: function(err) {
      console.log(err)
    }
  })
}

在官方的小程序示例中,是没有自定义标注图片的,但是在普通的js API中是有的,所以参照着试一试,结果就OK了,皆大欢喜~

还有一些被注释掉的,都是一些其他的标记,有兴趣可以打开看一看。

附上一张效果图(上是静态地图,下是map组件):


原文链接:https://blog.csdn.net/weixin_39015132/article/details/82895744


 

### 微信小程序集成高德地图显示腾讯地图解决方案 在微信小程序中,默认的地图服务提供商是腾讯地图。如果希望使用其他地图服务商(如高德地图),则需要特别处理,因为微信小程序并不直接支持第三方地图SDK的完全替换。 #### 使用Webview加载高德地图H5页面 一种可行的方法是在微信小程序内通过`<web-view>`标签来嵌入一个基于HTML5的网页,在这个网页里调用高德地图API完成所需的功能[^1]。这种方式可以绕过微信对于内置地图组件的一些限制,但是需要注意的是,这种方法可能会带来用户体验上的差异以及性能损耗等问题。 ```html <!-- 小程序wxml文件 --> <web-view src="https://yourdomain.com/amap.html"></web-view> ``` 其中`amap.html`是一个托管于服务器端的静态资源文件或者是动态生成的内容,它包了初始化并配置好参数后的高德地图实例化代码片段: ```javascript // amap.html中的js部分 AMap.plugin('AMap.ToolBar', function() { var map = new AMap.Map('container', { zoom: 10, toolbar: true }); }); ``` #### 地图数据同步机制设计 当采用上述方案时,还需要考虑如何保持小程序内部逻辑与外部加载的地图状态的一致性。这通常涉及到事件监听器的设计,比如点击某个地点后更新UI界面或是发送请求获取更多信息等操作。由于跨域安全策略的存在,可能需要用到消息传递接口(`postMessage`)来进行通信[^2]。 ```javascript // 在amap.html中向父窗口发送消息 window.parent.postMessage({type:'locationSelected',data:{lat,lng}},'*'); ``` 而在接收方即微信小程序侧,则需注册相应的回调函数以响应这些来自WebView的消息通知: ```javascript Page({ onLoad:function(){ wx.onMessage(function(message){ console.log(message); // 处理接收到的信息... }) } }) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值