当前位置: 首页 > article >正文

HarmonyOS使用LocationButton获取地理位置

按钮效果图

 

LocationButton

LocationKit

getAddressesFromLocation方法

步骤:

  1. 整合 LocationButton并获取经纬度
  2. 通过 LocationKit 将经纬度转为地址信息
  3. 将地址信息渲染到页面上
  4. 处理异常情况(闪退)

 

 LocationButton({
   icon: LocationIconStyle.LINES
    })
      .backgroundColor(Color.White)
      .iconColor(Color.Blue)
      .onClick((event: ClickEvent, result: LocationButtonOnClickResult) => {
        if (result === LocationButtonOnClickResult.SUCCESS) {
          try {
            // 免去权限申请和权限请求等环节,获得临时授权,获取位置信息授权
            const requestInfo: geoLocationManager.LocationRequest = {
              'priority': geoLocationManager.LocationRequestPriority.FIRST_FIX,
              'scenario': geoLocationManager.LocationRequestScenario.UNSET,
              'timeInterval': 1,
              'distanceInterval': 0,
              'maxAccuracy': 0
            };

// 获取当前位置,使用Promise方式异步返回结果。
            geoLocationManager.getCurrentLocation(requestInfo)
              .then((location: geoLocationManager.Location) => {
                // promptAction.showToast({ message: JSON.stringify(location) });
                const latitude = location.latitude
                const longitude = location.longitude
                let reverseGeocodeRequest: geoLocationManager.ReverseGeoCodeRequest =
                  { latitude, longitude, "maxItems": 1 };
                try {

// 调用逆地理编码服务,将坐标转换为地理描述,使用Promise异步回调
                  geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest)
                    .then((data) => {
                      // Logger.info('getAddressesFromLocation: ' + JSON.stringify(data));
                       this.addForm.address = data[0].placeName!
                    })
                    .catch((error: BusinessError) => {
                      Logger.error('promise, getAddressesFromLocation: error=' + JSON.stringify(error));
                    });
                } catch (err) {
                  console.error("errCode:" + JSON.stringify(err));
                }
              })
              .catch((err: BusinessError) => {
                console.error(`Failed to get current location. Code is ${err.code}, message is ${err.message}`);
              });
          } catch (e) {     // 错误处理
            if (e.code === '3301100') {
              promptAction.showToast({
                message: '请开启定位开关~'
              })
            }
          }

        } else {
          promptAction.showToast({ message: '获取位置信息失败!' })
        }
      })


http://www.kler.cn/a/308515.html

相关文章:

  • 人脸识别技术:从算法到深度学习的全面解析
  • 腾讯云nginx SSL证书配置
  • 基于Qt/C++全局键盘和鼠标事件监控工具
  • 信捷 PLC C语言 POU 指示灯交替灭0.5秒亮0.5秒(保持型定时器)
  • Redis主从复制(replication)
  • JavaScript数组去重的实用方法汇总
  • GBase 8s数据类型与java.sql.Types对应关系
  • 初识网络原理
  • 前端基于Rust实现的Wasm进行图片压缩的技术文档
  • 中间件常见漏洞
  • android API、SDK与android版本
  • 【Qt | QLineEdit】Qt 中使 QLineEdit 响应 鼠标单击、双击事件 的两个方法
  • php语言基本语法
  • 若依的使用
  • LeetCode:1184. 公交站间的距离 一次遍历数组,复杂度O(n)
  • Comsol 利用多孔材料填充复合吸声器,拓宽低频完美吸声
  • 【我的 PWN 学习手札】Unsortedbin Attack
  • Chrome谷歌浏览器登录账号next无反应
  • C++ 重点的关键字
  • vue嵌入第三方页面
  • Java中分布式锁
  • mac新手入门(快捷键)
  • Vue面试题4
  • 缺陷(Bug)的一生
  • 【iOS】UIViewController的生命周期
  • 校园管理系统创新:Spring Boot框架应用案例