记前端项目定位实现过程

news/2025/12/1 14:40:08/文章来源:https://www.cnblogs.com/zsy1006/p/18844325

记前端项目定位实现过程

  • 背景:

        一个前端h5项目,需要内嵌到企业微信工作台上使用,项目中有获取定位信息的要求

  • 实现过程:

① 第一次:目标实现方式是调用高德,使用高德地图来获取经纬度,使用获得的经纬度来获取地理位置名称,

具体实现过程如下:

window._AMapSecurityConfig = {securityJsCode: "yourSecretKey",}; const handleGeoLocation = () => {
    AMapLoader.load({
      key: 'yourkey', // 你的高德地图API Key
      version: '2.0', // API 版本
      plugins: ['AMap.Geolocation', 'AMap.Geocoder'], // 加载定位和逆地理编码插件
    }).then((AMap) => {
      // 初始化定位插件
      const geolocation = new AMap.Geolocation({
        enableHighAccuracy: false, // 是否使用高精度定位
        timeout: 20000, // 超时时间
      });      // 获取当前位置
      geolocation.getCurrentPosition((status, result) => {
        if (status === 'complete') {
          console.log('定位成功:', result);          // 获取经纬度
          const lng = result.position.lng; // 经度
          const lat = result.position.lat; // 纬度          // 初始化逆地理编码插件
          const geocoder = new AMap.Geocoder({
            city: '全国', // 城市,默认设置为“全国”
            radius: 1000, // 逆地理编码搜索半径
          });          // 调用逆地理编码接口
          geocoder.getAddress([lng, lat], (status, result) => {
            if (status === 'complete' && result.info === 'OK') {
              // 逆地理编码成功
              console.log('逆地理编码成功:', result.regeocode.formattedAddress);
            } else {
              // 逆地理编码失败
              console.error('逆地理编码失败:', result);
            }
          });
        } else {
          console.error('定位失败:', result);
        }
      });
    }).catch((error) => {
      console.error('高德地图 API 加载失败:', error);
    });
    return;
}

  问题说明:

        这种情况有一个前提条件是项目的运行浏览器不使用谷歌浏览器,谷歌浏览器是国外的浏览器,由于国内网络保护,导致无法获取当前定位,也就是说,在谷歌浏览器上调用getCurrentPosition方法会报错。具体的原因,帖子上有说把协议改为https就可以调用成功的,本人试了一下,没生效,而且还有一点是,高德地图在localhost也就是本地开发的情况下,是不会做协议限制的,由此也可知,调用不通和协议无关,高德地图官网上也阐述了,谷歌浏览器的定位本身就是一个黑洞,不建议使用。至于具体的原因,目前据我所查没有一个帖子有比较明确的答案(有无大佬评论区解释下,多谢)。这里具体的应该要涉及到各个浏览器定位实现的方式,定位实现的方式各有不同的,具体感兴趣的可以查查。

        ② 第二次:考虑纯后端实现

        获取定位失败的原因未可知,就无法根据问题解决,除了换浏览器,但是企业微信工作台的浏览器是不可能改变的,所以考虑纯后端实现

(说到这里就要进行展开,由于企业微信的内核和谷歌浏览器一样,导致我以为问题出现在企业微信工作台浏览器使用谷歌的缘故,但实质上,企业微信工作台上应用无法调通定位接口的原因是,获得地理位置等信息都属于私人信息,出于安全考虑,内嵌浏览器会禁用所有的敏感信息的获取,所以在没有授权允许的情况下,是无法获得定位的)

纯后端实现是不可能的,后端只能通过解析ip地址来获取的一个大概的信息,地址也就精确到城市,市面上所有的定位都是前端实现的,当然有这种想法也是由于上述的那个说法,都是泪

          ③ 最后一次:一个正确的实现方案

           针对此类型的开发,对于内嵌到企业微信或者钉钉的应用,获取地理信息位置,在对应的开发者工具里面都有具体的实现,这些具体的实现,开发者工具的官网上都有具体的实现,针对企业微信内嵌应用的实现如下:

// 这里的decodeGeocoder使用的是公司封装的解码包,本质上还是用的高德地图的实现
function getDynamicAddress(lng_lat:any = []) {const geolocation = new Geolocation();try {// 初始化
    await geolocation.init();await geolocation.initGeolocation();// 解析地址
    await geolocation.initGeocoder();const addressInfo = await geolocation.decodeGeocoder(lng_lat);return {lngLat: lng_lat,address: addressInfo.address,fullInfo: addressInfo.regeocodeInfo,};} catch (error) {console.error("获取地址失败:", error);throw error;}
}  async function handleGeolocation() {try {// 1. 获取当前页面URL(去除hash部分)const currentPageUrl = window.location.href.split('#')[0];console.log('当前页面URL:', currentPageUrl);// 2. 从后端获取配置信息const res = await request({url: workOrderService.dispatchOrder.queryGeolocation,method: 'GET',params: { url: currentPageUrl },});if (!res?.success || !res?.data) {console.error('获取配置失败:', res);return;}// 3. 检查wx对象是否存在if (typeof wx === 'undefined') {console.error('企业微信JS-SDK未加载');return;}// 4. 初始化配置
      wx.config({beta: true,debug: false, // 生产环境建议关闭appId: res.data.appId, // 使用确定存在的值,避免可选链
        timestamp: res.data.timestamp,nonceStr: res.data.nonceStr,signature: res.data.signature,jsApiList: ['getLocation'],});// 5. 配置错误处理wx.error((err) => {console.error('JS-SDK配置失败:', err);// 可以在这里显示错误提示给用户
      });// 6. 配置成功后获取位置wx.ready(async () => {try {wx.getLocation({type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'success: async function (res) {let lat = (+res.latitude).toFixed(6);let lng = (+res.longitude).toFixed(6);console.log('res111', res, lat, lng, res.errMsg == "getLocation:ok");if (res.errMsg === "getLocation:ok") {console.log('获取位置成功:', lat, lng);const  result =await getDynamicAddress([+lng, +lat]);return result;}}});} catch (error) {console.error('获取位置失败:', error);}});} catch (error) {console.error('处理地理位置出错:', error);}}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/982987.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

裁断机厂家选哪家好?裁断机服务商价格哪个合理?

在软性材料裁切领域,企业对高精度、高适配性裁断设备的需求日益迫切。2024年数据显示,国内裁断机市场规模突破60亿元,年增速达18%,但32%的企业反馈设备存在精度不稳定、专用性不足、售后响应慢等问题——汽车内饰厂…

2025年下半年徐州旅游租车/商务车租车/大巴车包车公司前十推荐

随着2025年下半年旅游市场的持续复苏,旅游租车行业迎来新的发展机遇。本文基于市场调研和用户反馈,整理出十家值得推荐的旅游租车服务平台,排名不分先后,旨在为消费者提供参考选择。特别说明:本文推荐仅代表第三方…

2025年日化产品袋制袋机优质厂家权威推荐榜单:高速三边封直立袋全自动制袋机‌/咖啡袋制袋机‌/塑料制袋机‌源头厂家精选

在日化产品包装向高速、环保、定制化发展的2025年,一台性能卓越的制袋机已成为提升生产效率与包装品质的核心。据行业趋势分析,具备多伺服驱动、高速稳定、全自动集成功能的机型正成为市场主流选择。 日化产品涵盖洗…

视频汇聚平台EasyCVR助力打造太阳能供电远程视频监控系统

随着全球能源形势趋紧,环保意识日益增强,太阳能作为清洁的可再生能源,应用领域不断拓展。在野外监控、偏远地区设备供电等场景中,太阳能供电系统凭借无燃料消耗、无污染、安装维护便捷等优势,正逐步替代传统供电方…

2025年中国自助KTV系统解决方案公司排名:鱼乐圈ktv研

本榜单基于行业调研与真实用户反馈,聚焦自助KTV领域的系统解决方案提供商,从研发实力、用户体验、客户口碑等维度筛选优质企业,为KTV门店选型提供参考。 TOP1 推荐:鱼乐圈24h自助ktv 推荐指数:★★★★★ 口碑评分…

相册链接

photo collections\(\Large\color{pink}some ~beautiful ~\Huge\color{cyan} photos\) \(\Large\color{pink}some ~studying ~\Huge\color{cyan}notes\) \(\Large\color{pink}some ~interesting ~\Huge\color{cyan}rec…

Elasticsearch 7.0 介绍与配置详解 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年郑州代理招生平台推荐:翰学网让郑州代理招生网站、郑州代理招生平台学员求学满意

随着教育数字化转型加速、线上招生需求激增及教育资源对接效率提升需求增加,专业代理招生平台已从单一服务工具逐步升级为教育培训行业的核心基础设施,2025 年市场规模预计持续扩大。但行业快速发展也带来平台资源质…

智能农业实践:视频融合平台EasyCVR的农业大棚可视化监控方案

随着物联网、大数据等技术的飞速发展,传统农业正朝着精细化、智能化的“智慧农业”方向变革。其中,农业大棚作为高效农业生产的重要单元,其管理模式的升级尤为关键。本文将探讨如何利用EasyCVR视频融合平台,为农业…

企业管理 AI 应用服务商推荐:从场景覆盖到生态整合,用友BIP端到端解决方案引领行业

一、引言:企业管理 AI 平台的时代价值与选型关键 在数智化浪潮席卷全球的当下,AI 技术已从实验室走向产业一线,成为企业提升运营效率、驱动业务创新、构建核心竞争力的核心引擎。企业管理 AI 平台作为承载 AI 技术落…

2025年12月护墙板定制工厂TOP10实力榜:更有实木楼梯/衣柜/橱柜/木门等全品类对比,市场口碑+行业数据选购指南

在装配式建筑加速普及与绿色装修需求激增的2025年,墙板定制因兼具环保、高效、美观等特性,成为酒店、会所、公寓等商业空间及新旧房改造的首选方案。据《2025中国建筑装饰材料行业趋势报告》显示,集成墙板市场年增长…

SECS/GEM HSMS

1.SECS介绍 SEMI(国际半导体协会)为了方便工厂系统与设备沟通而建立的一种通信标准 SECS 是半导体设备通信标准的首字母缩略词。GEM 是指 SEMI E30 标准,它使用 SEMI E5标准中定义的消息类型的子集来描述设备行为和通…

砂石生产线从立项到投产全流程,要投资的老板你清楚吗?!

砂石生产线从立项到投产全流程,要投资的老板你清楚吗?!砂石生产线项目从想法到落地,其实是一个系统工程,大体可以分为 前期规划、设计方案、 设备选型、施工建设、调试验收 五大环节。下面我详细说明: 一、前期规…

嵌入式工程师往后怎么发展?

毕业之后从事嵌入式linux开发,主要就是yocto开发,但是说实话对具体模块的功能了解的真不多,但是都有涉猎,但都是应用层开发,比如蓝牙的应用出问题了我会去看,但是真涉及到a2dp等等协议问题,还不到底层驱动,我就…

在曲阳县老家农村盖房子,靠谱的自建房公司去哪里找?河北保定曲阳县自建房公司/机构权威测评推荐排行榜

在曲阳县老家农村盖房子,靠谱的自建房公司去哪里找?河北保定曲阳县自建房公司/机构权威测评推荐排行榜 一、引言 十年前,曲阳县农村盖房还停留在“找本村工匠、画简易草图”的粗放模式。从沙河沿岸平原的砖石房,到…

跨境电商小白安全实测:Nginx 环境 + 免费 WAF,半小时筑牢独立站防护墙

跨境电商小白安全实测:Nginx 环境 + 免费 WAF,半小时筑牢独立站防护墙作为刚涉足跨境电商的小白,第一次搭建面向欧美市场的独立站时,就因忽视安全防护踩了大雷 —— 商品详情页被偷偷植入违规链接,用户注册信息遭…

高管培训机构评价:为何行动教育成为企业家首选

在瞬息万变的商业环境中,企业的持续成长不仅依赖市场机遇,更取决于管理团队的战略眼光、组织力和执行力。对于追求实效增长的企业家而言,选择一家兼具权威性与实战价值的高管培训机构,是企业稳健发展的关键。行动教…

曲阳县农村自建房公司口碑推荐榜。2026年自建房公司权威测评优选。

曲阳县农村自建房公司口碑推荐榜。2026年自建房公司权威测评优选。 一、引言:曲阳农村自建房的“品质升级潮” 曲阳县,这座矗立在太行山东麓的千年古县,既有“雕刻之乡”的文化底蕴,又兼具山地与丘陵交织的独特地貌…

全球主流3D砂型打印品牌权威推荐 探索工业制造革命性技术,解析顶级砂型打印品牌核心竞争力

全球主流3D砂型打印品牌权威推荐 探索工业制造革命性技术,解析顶级砂型打印品牌核心竞争力引言:3D砂型打印技术革命 3D砂型打印是增材制造领域的一项革命性技术,它通过逐层喷射粘结剂到砂材粉末上,直接制造出复杂的…

2025年高端锂电池厂家TOP3推荐,解决你的使用需求

在当今市场中,选择合适的高端锂电池厂家显得尤为重要。消费者往往关注哪些厂家能提供更高质量和稳定性的产品,尤其是在性能和安全性上。本文将深入分析三家顶级锂电池厂家,分别是深圳市昂佳科技有限公司等,通过对每…