0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HarmonyOS实战:高德地图定位功能完整流程详解

尤枫 来源:jf_54996641 作者:jf_54996641 2025-06-09 15:23 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

地图定位功能相信很多人都用过,在鸿蒙的应用程序开发中,使用高德地图的定位功能变得十分常见,那么在鸿蒙中一次完整的地位功能怎么实现?如果定位失败了,能否获取前几次的定位呢?本篇文章带你实现一个完整的定位功能流程,建议点赞收藏!

需求分析

要想实现一个完整的定位需求流程,就必须要做好准备工作,了解实现需求的具体步骤。

  • 权限申请
  • 检查 GPS 是否打开
  • 单次定位还是多次定位
  • 定位失败处理

技术实现

要想实现一次完整的定位流程,必须根据需要分析一步步去实现,由于高德地图的引入太过于简单,这里一笔带过。重点讲解完整实现的步骤。

  1. 添加基本定位权限,在 entry 模块下的 module.json5 中添加定位必要的两个权限。
{
        // user_grant
        "name": "ohos.permission.APPROXIMATELY_LOCATION",
        "reason": "$string:location_permissions_reason",
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "always"
        }
      },
      {
        // user_grant
        "name": "ohos.permission.LOCATION",
        "reason": "$string:location_permissions_reason",
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "always"
        }
      },
  1. 在页面中进行权限申请,一般是在 onPageShow 生命周期方法中申请,先检查系统 GPS 定位开关是否开启,如果没有开启则提示用户跳转到系统指定位置打开。
let location =  geoLocationManager.isLocationEnabled()
 if (!location) {
        let dialog = new OpenSystemGPSEHelper()
        dialog.show(this.getUIContext(),getContext(this) as common.UIAbilityContext,()= >{
          this.currentCity = "定位失败"
        })
      }

//GPS跳转页面
context.startAbility(
          {
            bundleName: "com.huawei.hmos.settings",

            abilityName: "com.huawei.hmos.settings.MainAbility",

            uri: "location_manager_settings"

          },
  1. 确认 GPS 打开之后,开始 申请 用户权限。
static applyPermission(context: common.UIAbilityContext, permissions: Array< Permissions >, grantedBlock: () = > void,
    deniedBlock?: () = > void) {
    let atManager = abilityAccessCtrl.createAtManager()
    let permissionGrantedNumber: number = 0 
    atManager.requestPermissionsFromUser(context, permissions).then((data) = > {
      for (let index = 0; index < data.authResults.length; index++) {
        if (data.authResults[index] == 0) { 
          permissionGrantedNumber++;
        }
      }
      if (permissionGrantedNumber == permissions.length) {
        grantedBlock()
      } else {
        if (deniedBlock) {
          deniedBlock()
        } else {
          PermissionUtil.openPermissionsInSystemSettings(context)
        }
      }
    })
  }
  1. 如果用户打开权限,则直接开始定位服务,否则提示用户跳转到系统指定位置打开权限。
let wantInfo: Want = {
      bundleName: 'com.huawei.hmos.settings',
      abilityName: 'com.huawei.hmos.settings.MainAbility',
      uri: 'application_info_entry',
      parameters: {
        settingsParamBundleName: bundleInfo.name
      }
    }
    context.startAbility(wantInfo).then(() = > {
    })
  1. 确认定位权限没问题后,开始定位,高德提供的定位有多次和单次,这里使用单次定位。
let listener: IAMapLocationListener = {
      onLocationChanged: (location) = > {
        console.log("当前定位1:"+location.latitude+",---longitude:"+location.longitude)
        this.transformCity(location.latitude,location.longitude)
      }, onLocationError: (error) = > {
      }
    };
    LocationManager.getInstance().addListener(listener)
    LocationManager.getInstance().initLocation()
     // 定位参数配置
    let options: AMapLocationOption = {
      //定位优先配置选项
      priority: geoLocationManager.LocationRequestPriority.FIRST_FIX,
      //定位场景设置
      scenario: geoLocationManager.LocationRequestScenario.UNSET,
      //定位精度 单位:米
      maxAccuracy: 0,
      //指定单次定位超时时间
      singleLocationTimeout: 3000,
      //定位是否返回逆地理信息
      locatingWithReGeocode: true,
      //逆地址语言类型
      reGeocodeLanguage: AMapLocationReGeocodeLanguage.Chinese,
      isOffset: false //是否加偏
    }
    // 设置配置
    this.locationManger?.setLocationOption(AMapLocationType.Single, options)
    if (this.listener != undefined) {
      // 监听
      this.locationManger?.setLocationListener(AMapLocationType.Single, this.listener)
    }
    // 启动定位
    this.locationManger?.requestSingleLocation()
  1. 定位成功拿到定位的信息,在实际开发中尽管设置中已经设置返回逆地理信息,但并没有返回具体信息,这点实在是无法理解,只能得到当前位置的经纬度。这个时候需要将经纬度转换为当前位置名称。
  2. 在开发中通过使用华为官方系统中的 api,对经纬度进行逆编码才能获取准备的位置名称。
let reverseGeocodeRequest:geoLocationManager.ReverseGeoCodeRequest = {"latitude":latitude, "longitude":longitude, "maxItems": 1};
    try {
      geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest, (err, data) = > {})
  1. 如果地图定位失败,则可以根据高德地图提供的方法,尝试拿取历史定位信息。
LocationManager.getInstance().getLastLocation({
      onLocationChanged: (location) = > {
        console.info('地图定位缓存获取成功:  ' + JSON.stringify(location))
        

        if (success) {
          success()
        }
      }, onLocationError: (e) = > {
        console.info('地图定位缓存获取失败:  ' + JSON.stringify(e))
      
        if (success) {
          success()
        }
      }
    })
  1. 如果历史定位信息也获取失败,这时就能使用默认定位位置了。

总结

定位功能实现起来比较简单,但是完整的定位流程及细节处理才是本篇文章的关键,相信看完本篇文章你已经学会在鸿蒙中怎么使用高德定位功能了,快去动手尝试一下吧!

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 定位
    +关注

    关注

    5

    文章

    1553

    浏览量

    36513
  • HarmonyOS
    +关注

    关注

    80

    文章

    2146

    浏览量

    35537
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【RK3568 NPU实战】别再闲置你的NPU!手把手带你用迅为资料跑通Android AI检测Demo,附完整流程与效果

    【RK3568 NPU实战】别再闲置你的NPU!手把手带你用迅为资料跑通Android AI检测Demo,附完整流程与效果
    的头像 发表于 11-10 15:58 856次阅读
    【RK3568 NPU<b class='flag-5'>实战</b>】别再闲置你的NPU!手把手带你用迅为资料跑通Android AI检测Demo,附<b class='flag-5'>完整流程</b>与效果

    LuatOS AGPS 辅助定位开发实战教程

    为解决传统 GPS 定位慢、功耗的痛点,AGPS 技术通过辅助数据注入提升效率。本教程以 LuatOS 开发环境为基础,循序渐进地讲解 AGPS 辅助定位的开发流程,包括 AGPS
    的头像 发表于 10-31 17:34 1002次阅读
    LuatOS AGPS 辅助<b class='flag-5'>定位</b>开发<b class='flag-5'>实战</b>教程

    地图与通义实验室达成深度合作

    在AI原生浪潮推动下,阿里巴巴集团旗下地图与通义实验室宣布达成深度合作,并在近日发布的地图
    的头像 发表于 08-15 17:23 1391次阅读

    如何实现3秒定位?GNSS模组实战指南大公开

    传统定位耗时过长?GNSS模组让3秒极速定位成为现实。本文为你提供实战指南,详解操作步骤与技术要点,助你轻松达成目标。在紧急救援、智能交通等场景中,3秒
    的头像 发表于 08-08 17:10 772次阅读
    如何实现3秒<b class='flag-5'>定位</b>?GNSS模组<b class='flag-5'>实战</b>指南大公开

    地图携手夸克AI眼镜开启出行新方式

    地图与夸克AI眼镜的联合创新,不仅为智能眼镜行业注入了新的活力,也为整个出行生态带来了颠覆性变革。
    的头像 发表于 08-06 16:35 1597次阅读

    HarmonyOS 5】鸿蒙星闪NearLink详解

    HarmonyOS 5】鸿蒙星闪NearLink详解 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财# 一、前言 鸿蒙星闪NearLink Kit
    的头像 发表于 07-11 18:24 1481次阅读
    【<b class='flag-5'>HarmonyOS</b> 5】鸿蒙星闪NearLink<b class='flag-5'>详解</b>

    示波器MSOX3104A自动测量功能详解实战技巧

    一、引言 在电子工程、通信调试、自动化控制等领域,示波器是工程师不可或缺的测试工具。是科技(Keysight)的MSOX3104A示波器凭借其高精度、多功能特性,尤其在自动测量功能上实现了智能化
    的头像 发表于 07-03 13:52 400次阅读
    是<b class='flag-5'>德</b>示波器MSOX3104A自动测量<b class='flag-5'>功能</b><b class='flag-5'>详解</b>与<b class='flag-5'>实战</b>技巧

    地图携手华为推出长隧道车道级导航

    地图携手华为Pura80系列,支持超长隧道全程车道级导航,为行车安全与效率带来全新升级。
    的头像 发表于 07-02 16:44 1037次阅读

    鸿蒙地图功能开发【1. 开发准备】##地图开发##

    ​ 对于地图功能的开发,有以下三种思路 使用鸿蒙官方的Map Kit进行开发 使用第三方地图的SDK(例如地图、百度
    发表于 06-29 22:52

    HarmonyOS 5】桌面快捷方式功能实现详解

    HarmonyOS 5】桌面快捷方式功能实现详解 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财# 一、前言 在移动应用开发中,如何让用户快速
    的头像 发表于 06-21 16:42 1775次阅读
    【<b class='flag-5'>HarmonyOS</b> 5】桌面快捷方式<b class='flag-5'>功能</b>实现<b class='flag-5'>详解</b>

    HarmonyOS实战地图自定义定位图标展示

    前言 地图定位功能基本上已经成了日常应用程序的必备功能之一,在日常开发地图定位
    的头像 发表于 06-09 14:59 493次阅读
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>实战</b>:<b class='flag-5'>高</b><b class='flag-5'>德</b><b class='flag-5'>地图</b>自定义<b class='flag-5'>定位</b>图标展示

    谷歌地图GPS定位

    谷歌地图GPS定位:精准导航背后的技术解析 谷歌地图作为全球最受欢迎的地图服务之一,其精准的GPS定位
    的头像 发表于 05-29 16:54 902次阅读

    地图与Rokid达成合作

    近日,地图与Rokid宣布达成合作,将共同推出基于全场景智能眼镜Rokid Glasses的全球首个导航智能体(NaviAgent)应用,标志着
    的头像 发表于 05-20 16:00 593次阅读

    地图与长城汽车共建出行联合创新LAB

    近日,地图与长城汽车在河北举行出行联合创新LAB揭牌仪式,双方将围绕导航出行领域展开深度合作,共创未来用户智慧出行新体验。与此同时,基于
    的头像 发表于 01-07 10:03 796次阅读

    长城汽车联手地图打造出行联合创新LAB

    近日,长城汽车与地图基于长期良好的合作基础,联手打造的“出行联合创新LAB”正式在保定市长城汽车技术中心揭牌。根据共同约定,双方将通过出行联合创新LAB,发挥各自优势,共同研究、探索基于用户出行
    的头像 发表于 01-07 09:51 846次阅读