【HarmonyOS NEXT】鸿蒙应用地理位置获取,地理名称获取
2025-06-30 23:25:53
108次阅读
0个评论
【HarmonyOS NEXT】鸿蒙应用地理位置获取,地理名称获取
##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财#
一、前言
首先要理解地理专有名词,当我们从系统获取地理位置,一般会拿到地理坐标,是一串数字,并不是地理位置名称。例如 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';
@Entry
@Component
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"
}
}
00
- 1回答
- 0粉丝
- 0关注
相关话题
- 【HarmonyOS NEXT】鸿蒙获取appIdentifier,Identifier
- 鸿蒙安全控件之位置控件简介
- 【HarmonyOS Next】鸿蒙应用公钥和证书MD5指纹的获取
- HarmonyOS NEXT 地图服务中‘我的位置’功能全解析
- 【HarmonyOS NEXT】鸿蒙获取手势触摸点的屏幕全局坐标
- OpenHarmony应用:货币兑换数据获取与显示
- 鸿蒙如何查询应用包的名称、供应商、版本号、版本文本、安装时间、更新时间描述信息
- HarmonyOS实战:List拖拽位置交换的多种实现方式
- 【HarmonyOS】获取通讯录信息
- 探索HarmonyOS位置服务:精准定位的科技奥秘
- 鸿蒙开发:自定义一个任意位置弹出的Dialog
- HarmonyOS开发:手把手教你获取应用备案所需信息
- 【HarmonyOS】鸿蒙中如何获取用户相册图片?photoAccessHelper.PhotoViewPicker
- 获取链接文件信息
- 鸿蒙NEXT-API19获取上下文,在class中和ability中获取上下文,API迁移示例-解决无法在EntryAbility中无法使用最新版API获取上下文