前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mapboxGL地图分享功能的实现

mapboxGL地图分享功能的实现

作者头像
lzugis
发布2023-06-10 11:21:17
2840
发布2023-06-10 11:21:17
举报

概述

本文基于mapboxGL实现地图的分享功能,并通过qrcode.js生成二维码。

实现

1. 实现思路

  1. 将地图的状态和数据存储在style中;
  2. 生成惟一的mapid和style一并存储;
  3. 通过url访问的时候带着mapid,通过mapid先请求样式,再生成地图。

2. 实现代码

  1. 获取style,生成唯一mapid
代码语言:javascript
复制
function randomString(len = 32){
    //默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1
    const chars = 'abcdefhijkmnprstwxyz2345678';
    let tempLen = chars.length, tempStr='';
    for(let i = 0; i < len; ++i){
        tempStr += chars.charAt(Math.floor(Math.random() * tempLen ));
    }
    return tempStr;
}
function generateQrcode(text) {
    const size = 200
    new QRCode('qrcode', {
        text: text,
        width: size,
        height: size,
        colorDark: '#000000',
        colorLight: '#ffffff',
        correctLevel: QRCode.CorrectLevel.H
    });
}
function shareMap () {
    let style = map.getStyle()
    style.center = map.getCenter().toArray()
    style.zoom = map.getZoom()
    const mapId = randomString()
    const url = `https://www.lzugis.cn/preview.html?mapId=${mapId}`
    document.getElementById('mapUrl').innerText = url
    console.log(style)
    generateQrcode(url)
}
  1. 访问分享地图,url为https://www.lzugis.cn/preview.html?mapId=htfbk4wihpczjkktsxwjbsf254pdtp47
代码语言:javascript
复制
function getQueryString(name) {
  const url_string = window.location.href;
  const url = new URL(url_string);
  return url.searchParams.get(name);
}

const mapId = getQueryString('mapId ')
fetch(`https://www.lzugis.cn/getStyle?mapId=${mapId }`).then(res => res.json()).then(res => {
  const map = new mapboxgl.Map({
        container: 'map',
        style: res,
        attributionControl: false
    });
})
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 实现
    • 1. 实现思路
      • 2. 实现代码
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档