【HarmonyOS】鸿蒙应用地理位置获取,地理名称获取

【HarmonyOS】鸿蒙应用地理位置获取,地理名称获取

一、前言

首先要理解地理专有名词,当我们从系统获取地理位置,一般会拿到地理坐标,是一串数字,并不是地理位置名称。例如 116.2305,33.568。

这些数字坐标会有不同的坐标系,国际上一般使用 wgs84 (WGS 84是全球定位系统(GPS)的基准坐标系统,广泛应用于全球定位和导航。它采用十进制度表示经度和纬度。)

但是国内一般会使用加密坐标系,GCJ-02 (中国采用的加密坐标系,也称为火星坐标系,对WGS 84坐标进行加密偏移。)

拿到坐标参数x,y后,我们需要通过逆地理编码,将坐标转化为地理描述。地里描述,包括国家、行政区划、街道、门牌号、地址描述等。

二、地址位置获取和逆地址编码转化:

首先我们需要获取当前设备的地理位置,该行为需要权限配置,用户同意后,才能拿到当前定位的地址位置。
在这里插入图片描述
1. 配置定位权限

      {"name": "ohos.permission.APPROXIMATELY_LOCATION","reason": "$string:reason","usedScene": {"abilities": ["EntryAbility"],"when": "always"}},{"name": "ohos.permission.LOCATION","reason": "$string:reason","usedScene": {"abilities": ["EntryAbility"],"when": "always"}},

2.申请用户动态权限

    abilityAccessCtrl.createAtManager().requestPermissionsFromUser(getContext(), ['ohos.permission.LOCATION', 'ohos.permission.APPROXIMATELY_LOCATION']).then(() => {// 权限申请通过后, 获取当前位置});

3.导入位置服务。获取地理位置信息,进行逆地理编码获取当前位置。

import { geoLocationManager } from '@kit.LocationKit';private locationChange: (err: BusinessError, location: geoLocationManager.Location) => void = (err, location) => {if (location) {let reverseGeocodeRequest: geoLocationManager.ReverseGeoCodeRequest = {'latitude': location.latitude,'longitude': location.longitude,'maxItems': 1};// 逆地址编码转化,获取地址位置描述geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest, (err, data) => {if (data) {hilog.info(0x00000, 'getAddressesFromLocation: data=', JSON.stringify(data));if (data[0].locality !== undefined) {let local = data[0].locality.replace(/"/g, '').slice(0, -1);let currentLocal = data[0].locality.replace(/"/g, '').slice(0, -1);console.log(this.TAG, " local: " + local + " currentLocal: " + currentLocal)}}});}};geoLocationManager.getCurrentLocation(this.locationChange);

三、DEMO完整示例:

在这里插入图片描述

import { abilityAccessCtrl } from '@kit.AbilityKit';
import { geoLocationManager } from '@kit.LocationKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

struct LocationPage {private TAG: string = "LocationPage";/*** 定位回调*/private locationChange: (err: BusinessError, location: geoLocationManager.Location) => void = (err, location) => {if (err) {//console.log(this.TAG, " locationChanger: err=: " + JSON.stringify(err))}if (location) {let reverseGeocodeRequest: geoLocationManager.ReverseGeoCodeRequest = {'latitude': location.latitude, // 表示纬度信息,正值表示北纬,负值表示南纬。取值范围为-90到90。仅支持WGS84坐标系。'longitude': location.longitude, // 表示经度信息,正值表示东经,负值表是西经。取值范围为-180到180。仅支持WGS84坐标系。// 指定返回位置信息的最大个数。取值范围为大于等于0,推荐该值小于10。默认值是1。'maxItems': 1};// 逆地址编码转化,获取地址位置描述geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest, (err, data) => {if (data) {hilog.info(0x00000, 'getAddressesFromLocation: data=', JSON.stringify(data));if (data[0].locality !== undefined) {let local = data[0].locality.replace(/"/g, '').slice(0, -1);let currentLocal = data[0].locality.replace(/"/g, '').slice(0, -1);console.log(this.TAG, " local: " + local + " currentLocal: " + currentLocal)}}});}};onClickGetLocation = ()=>{// 请求用户同意权限abilityAccessCtrl.createAtManager().requestPermissionsFromUser(getContext(), ['ohos.permission.LOCATION', 'ohos.permission.APPROXIMATELY_LOCATION']).then(() => {// 获取当前位置geoLocationManager.getCurrentLocation(this.locationChange);});}build() {RelativeContainer() {Text("获取当前定位信息").id('LocationPageHelloWorld').fontSize(50).fontWeight(FontWeight.Bold).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }}).onClick(this.onClickGetLocation)}.height('100%').width('100%')}
}

在这里插入图片描述
一般获取定位,还需要配置网络权限,用于方便系统定位。

      {"name": "ohos.permission.INTERNET","reason": "$string:reason","usedScene": {"abilities": ["EntryAbility"],"when": "always"}}

在这里插入图片描述

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

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

相关文章

关于数据库数据国际化方案

方案一:每个表设计一个翻译表 数据库国际化的应用场景用到的比较少,主要用于对数据库的具体数据进行翻译,在需要有大量数据翻译的场景下使用,举个例子来说,力扣题目的中英文切换。参考方案可见: https://b…

「Mac畅玩鸿蒙与硬件37」UI互动应用篇14 - 随机颜色变化器

本篇将带你实现一个随机颜色变化器应用。用户点击“随机颜色”按钮后,界面背景会随机变化为淡色系颜色,同时显示当前的颜色代码,页面还会展示一只猫咪图片作为装饰,提升趣味性。 关键词 UI互动应用随机颜色生成状态管理用户交互…

跟着官方文档快速入门RAGAS

官网: Ragas Ragas(Retrieval-Augmented Generation, RAG)是一个基于简单手写提示的评估框架,通过这些提示全自动地衡量答案的准确性、 相关性和上下文相关性。这种评估方法不需要访问人工注释的数据集或参考答案,使得评估过程更…

掌握 Spring Boot 中的缓存:技术和最佳实践

缓存是一种用于将经常访问的数据临时存储在更快的存储层(通常在内存中)中的技术,以便可以更快地满足未来对该数据的请求,从而提高应用程序的性能和效率。在 Spring Boot 中,缓存是一种简单而强大的方法,可以…

我谈冈萨雷斯对频域滤波的误解——快速卷积与频域滤波之间的关系

在Rafael Gonzalez和Richard Woods所著的《数字图像处理》中,Gonzalez对频域滤波是有误解的,在频域设计滤波器不是非得图像和滤波器的尺寸相同,不是非得在频域通过乘积实现。相反,FIR滤波器设计都是构造空域脉冲响应。一般的原则是…

Hello World C#

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System; 引入了System命名空间,基本输入输出。一般只用这个,后面的不用 using System.Collections.Generic; 包含了定…

AI高中数学教学视频生成技术:利用通义千问、MathGPT、视频多模态大模型,语音大模型,将4个模型融合 ,生成高中数学教学视频,并给出实施方案。

大家好,我是微学AI,今天给大家介绍一下AI高中数学教学视频生成技术:利用通义千问、MathGPT、视频多模态大模型,语音大模型,将4个模型融合 ,生成高中数学教学视频,并给出实施方案。本文利用专家模…

Linux下,用ufw实现端口关闭、流量控制(二)

本文是 网安小白的端口关闭实践 的续篇。 海量报文,一手掌握,你值得拥有,让我们开始吧~ ufw 与 iptables的关系 理论介绍: ufw(Uncomplicated Firewall)是一个基于iptables的前端工具&#xf…

@staticmethod、@classmethod

staticmethod 静态方法:staticmethod将一个普通函数嵌入到类中,使其成为类的静态方法。静态方法不需要一个类实例即可被调用,同时它也不需要访问类实例的状态。参数:静态方法可以接受任何参数,但通常不使用self或cls作…

MySQL之数据完整性

数据的完整性约束可以分为三类: 实体完整性、域完整性和引用完整性。 说来说去(说主键,外键,以及⼀些约束) 1、实体完整性 (实体就是行) 什么是关系型数据库? 一个表代表一类事务&#xff0…

echarts的双X轴,父级居中的相关配置

前言:折腾了一个星期,在最后一天中午,都快要放弃了,后来坚持下来,才有下面结果。 这个效果就相当是复合表头,第一行是子级,第二行是父级。 子级是奇数个时,父级label居中很简单&…

配置宝塔php curl 支持http/2 发送苹果apns消息推送

由于宝塔面板默认的php编译的curl未加入http2的支持,如果服务需要使用apns推送等需要http2.0的访问就会失败,所以重新编译php让其支持http2.0 编译方法: 一、安装nghttp2 git clone https://github.com/tatsuhiro-t/nghttp2.git cd nghttp…

记录一次网关异常

记一次网关异常 网关时不时就会出现下面的异常。关键是不知道什么时候就会报错,并且有时候就算什么都不操作,也会导致这个异常。 ERROR org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler - Unexpected error occurred in schedul…

Spring Boot开发——整合MyBatis的几种SQL写法

文章目录 1. 批量操作优化• 批量插入• 批量更新• 批量删除2. 动态SQL• 动态查询3. 多条件分支查询• 多条件分支查询4. SQL语句优化• SQL语句优化5. 自动生成主键• 自动生成主键6. 注解方式使用MyBatis• 注解方式示例7. 高级映射• 一对多映射8. MyBatis-Plus集成• MyB…

关于望远镜偏振校准源的一些记录

确定主要的偏振校准模型: 你需要一个最好的源,稳定偏振明确的校准作为主要模型例如:3C286,3C138,3C48 偏振位置角的校准:3C286,3C138,3C48(3C48一般用在6cm及以下的波段使…

解决 Flutter Dio合并请求多个接口,如果一个接口500,那么导致其他请求不在执行

Flutter Dio如何自定义拦截异常 应用场景 我们一般会统一拦截DioExceptionType 如400,403,500 等错误 但有时候,有个地方合并请求多个接口,如果一个接口500,那么导致其他请求不在执行,因为统一拦截了500&…

动态艺术:用Python将文字融入GIF动画

文章内容: 在数字媒体的多样化发展中,GIF动画作为一种流行的表达形式,常被用于广告、社交媒体和娱乐。本文通过一个具体的Python编程示例,展示了如何将文字以动态形式融入到GIF动画中,创造出具有视觉冲击力的动态艺术…

@antv/x6 再vue中 ,自定义图形,画流程图、数据建模、er图等图形

X6 是基于 HTML 和 SVG 的图编辑引擎,提供低成本的定制能力和开箱即用的内置扩展,方便我们快速搭建 DAG 图、ER 图、流程图、血缘图等应用。 最终效果图 1.安装 npm install antv/x6 --save //x6主要包 npm install antv/x6-vue-shape //使用vue组…

【k8s】k8s 中X.509 客户端证书验证机制

Kubernetes 使用 X.509 客户端证书进行身份验证是一种常见的方法。这种机制通过客户端证书来验证用户或应用程序的身份。以下是 Kubernetes 中 X.509 客户端证书验证机制的详细说明: 1. 生成客户端证书 首先,你需要生成客户端证书和私钥。这通常使用 O…

2.4特征预处理(机器学习)

2.4特征预处理 2.4.1 什么是特征预处理 通过 一些转换函数将特征数据转换成更加适合算法模型的特征数据过程。 1 包含内容 数值型数据的无量纲化: 归一化 标准化 2 特征预处理API sklearn.preprocessing 为什么要进行归一化/标准化? 特征的单…