HarmonyOS 鸿蒙Next 位置定位中,如何获取当前定位的城市?比如在北京,需要获取到「北京」或者 『北京市』?

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 位置定位中,如何获取当前定位的城市?比如在北京,需要获取到「北京」或者 『北京市』? 位置定位中,如何获取当前定位的城市?比如在北京,需要获取到「北京」或者 『北京市』?

3 回复
import { abilityAccessCtrl, common, Permissions } from '@kit.AbilityKit';
import { geoLocationManager } from '@kit.LocationKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { intl } from '@kit.LocalizationKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

export class Logger {
  private static domain: number = 0xFF00;
  private static prefix: string = 'Base64ImageToAlbum';
  private static format: string = '%{public}s';

  static debug(...args: string[]): void {
    hilog.debug(Logger.domain, Logger.prefix, Logger.format, args);
  }

  static info(...args: string[]): void {
    hilog.info(Logger.domain, Logger.prefix, Logger.format, args);
  }

  static warn(...args: string[]): void {
    hilog.warn(Logger.domain, Logger.prefix, Logger.format, args);
  }

  static error(...args: string[]): void {
    hilog.error(Logger.domain, Logger.prefix, Logger.format, args);
  }
}

const REQUEST_PERMISSIONS: Array<Permissions> = [
  'ohos.permission.APPROXIMATELY_LOCATION',
  'ohos.permission.LOCATION'
]

@Entry
@Component
struct Index {
  private context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
  @State message: string = '当前城市:';
  @State locale: string = new intl.Locale().language;

  getCurrentLocation() {
    let atManager = abilityAccessCtrl.createAtManager();
    try {
      atManager.requestPermissionsFromUser(this.context, REQUEST_PERMISSIONS).then(data => {
        if (data.authResults[0] !== 0 || data.authResults[1] !== 0) {
          return;
        }

        let locationChange = (err: BusinessError, location: geoLocationManager.Location) => {
          if (location.latitude === 0 && location.longitude === 0) {
            return;
          }

          let reverseGeocodeRequest: geoLocationManager.ReverseGeoCodeRequest = {
            'locale': this.locale.toString().includes('zh') ? 'zh' : 'en',
            'latitude': location.latitude,
            'longitude': location.longitude,
            'maxItems': 1
          };
          geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest).then(data => {
            if (data[0].placeName) {
              this.message = this.message + data[0].locality;
            }
          }).catch(err => {
            Logger.error('GetAddressesFromLocation err ' + JSON.stringify(err));
          });
        };

        geoLocationManager.getCurrentLocation(locationChange);
      }).catch(err => {
        Logger.error(`req permissions failed, error.code:${err.name}, error message: ${err.message}.`);
      })
    } catch (err) {
      Logger.error(`req permissions failed, error.code:${err.code}, error message: ${err.message}.`);
    }
  }

  build() {
    Row() {
      Column() {
        Button("获取当前位置")
          .fontSize(20)
          .onClick(() => {
            this.getCurrentLocation()
          })

        Text(this.message)
          .fontSize(30)
          .fontWeight(FontWeight.Bold)

      }
      .width('100%')
    }
    .height('100%')
  }
}
"requestPermissions": [
  {
    "name": "ohos.permission.APPROXIMATELY_LOCATION",
    "reason": "$string:reason",
    "usedScene": {
      "abilities": [
        "EntryAbility"
      ],
      "when": "inuse"
    }
  },
  {
    "name": "ohos.permission.LOCATION",
    "reason": "$string:reason",
    "usedScene": {
      "abilities": [
        "EntryAbility"
      ],
      "when": "inuse"
    }
  }
]

运行这个代码,可以获取当前城市,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/location-permission-guidelines-V5

更多关于HarmonyOS 鸿蒙Next 位置定位中,如何获取当前定位的城市?比如在北京,需要获取到「北京」或者 『北京市』?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


鸿蒙map kit 已经封装好了,用geoLocationManager定位,

在HarmonyOS鸿蒙系统中获取当前定位的城市信息,可以通过调用位置服务API来实现。以下是一个简要步骤说明:

  1. 申请权限:首先,你需要在应用的config.json文件中申请位置服务相关的权限,如ohos.permission.READ_LOCATION

  2. 获取位置信息:使用位置服务的API来获取当前设备的经纬度信息。这通常涉及到调用位置服务的接口,监听位置变化事件,并从中提取出经纬度数据。

  3. 逆地理编码:获取到经纬度后,需要利用逆地理编码服务(Reverse Geocoding)将经纬度转换为具体的城市名称。鸿蒙系统可能提供了相应的API接口,或者你可以通过调用第三方地图服务提供商的API(如百度地图、高德地图等)来完成这一步。

  4. 处理结果:逆地理编码服务返回的结果中通常会包含详细的地址信息,包括国家、省、市、区等。你可以从中提取出城市名称。

示例代码(伪代码,具体实现需参考鸿蒙API文档):

获取位置权限 -> 获取当前经纬度 -> 调用逆地理编码API -> 从结果中提取城市名称

请注意,逆地理编码的具体实现可能依赖于鸿蒙系统提供的API或第三方服务,因此你需要查阅相关文档或API参考来实现这一功能。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部