mapbox-gl 移动端(H5)位置共享交互


前言

分享最近写的一个小demo,功能类似微信小程序端的大头针位置共享功能,需要实现的主要功能包括位置查询、周边地点检索、位置定位等,数据采用天地图球面墨卡托(WGS84)的 WMTS 矢量底图与标记服务,框架采用Taro。首页如下


在这里插入图片描述

逆地理编码:获取周边地点

逆地理编码是借助经纬度坐标信息得到标准的地址信息的过程,在mapbox-gl中,借助 Marker 组件实现大头针效果,需要注意的点有二

  • 底图移动时保持大头针始终保持在地图中央
  • 底图停止移动时,发送请求获取周边位置列表
// 监听地图移动,实时设置大头针位置
 mapRef?.current.on('move', markerMove);
 // 监听地图停止移动,获取周边详情
 mapRef?.current.on('dragend', markerMoveEnd);

在这里插入图片描述

地理编码:查询位置

一个简单的查询功能,选择地址后锁定相机视角

在这里插入图片描述

大头针选位

也可以手动拖动大头针选取位置,通过点击更新大头针位置,不过这样的话与保持大头针在中央会有矛盾点,建议二选其一

markerRef.current.setDraggable(true);

在这里插入图片描述

位置卡片

截取当前canvas上的要素,包括大头针,但不能将返回键截图进去,借助 html2canvas

  const saveImg = async () => {
    const mapDom = document.getElementById('mapcontainer')
   
    html2canvas(mapDom, {
      scale:1.0 ,// 保持原始大小
      allowTaint: true,
      useCORS: true,
      logging: true,
      
    }).then(canvas => {
      const imgurl = canvas.toDataURL();   // 获取64位编码
      console.log(imgurl);
      sendImageRequest(imgurl)
    });
  }

封装一个请求图片的请求查看截图效果

  function sendImageRequest(src) {
    console.log(src)
    return new Promise((resolve, reject) => {
      const canvas = document.createElement('canvas');
      const ctx = canvas.getContext('2d');
      const img = new Image();
      img.onload = () =>{
        ctx?.drawImage(img, 0, 0);
        resolve(canvas.toDataURL('image/png'));
      }
      img.onerror = () =>{
        reject()
      }
    
      img.src = src;
    });
  }

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值