[鸿蒙项目]获取位置定位信息, 及如何使用地图服务

382 阅读3分钟

一. 位置定位信息

1. 获取当前位置

使用geoLocationManager.getCurrentLocation()方法 image.png

2. 地址逆解析

使用geoLocationManager.getAddressesFromLocation(参数)方法 image.png

3. 实时定位(对位置变化的订阅)

主要使用包(geoLocationManager)的两个方法: (1)on (2)off image.png 参考(接口文档的: Location Kit(位置服务)-Location Kit开发指南): image.png

二. 地图服务

1.地图服务相关准备

(1)生成密匙和证书请求文件 .p12 和 .csr

image.png image.png image.png image.png image.png

(2)申请调试证书 .cer

AppGallery Connect (huawei.com)网站选择“用户与访问”。 image.png ②命名证书名称,证书类型选"调试证书",再选取csr文件(也就是之前添加在appKey文件夹的csr文件),之后再提交即可; image.png

image.png hm_guardian.cer然后放在之前存放"hm_guardian.p12"文件的appKey文件夹即可;

(3)创建HarmonyOS应用

①修改包名,注意唯一性(后面加了一个li); image.pngimage.png ③填写应用参数 image.png image.png 之后点击应用信息 与 我的项目 就能看到了; 点击我的项目时会出现以下提示,将之前的包名复制进来即可; image.png

(4)创建p7b调试证书

选择“HarmonyOS应用 > HAP Provision Profile管理”,进入“管理HAP Provision Profile”页面,点击右上角“添加”。

image.png 选择设备,第50页全选了 image.png 提交后: image.png 将hm_guardianDebug.p7b文件放之前存放"hm_guardian.p12"文件的appKey文件夹即可;

(5)本地证书签名

image.png

可能出现以下错误:解决方式:先module.json5把一些权限注释掉 image.png

另外可参考以下发邮件申请权限: image.png

(6)开通并配置地图服务

client ID是这个: image.png 将client ID写value里面即可: image.png

image.png 开启地图相关的API管理: image.png

2.代码实现

(1)地图组件说明 (代码注释提供说明)

import { AsyncCallback } from '@kit.BasicServicesKit';
import { map, mapCommon, MapComponent, site } from '@kit.MapKit';
import { locationManager } from '../../manager';
import { geoLocationManager } from '@kit.LocationKit';

@Entry
@Component
struct HuaweiMapDemo {
  private TAG = "HuaweiMapDemo";
  // 地图初始化配置
  private mapOption?: mapCommon.MapOptions;
  //地图初始化所需的回调函数
  private callback?: AsyncCallback<map.MapComponentController>;
  //地图控制器
  private mapController?: map.MapComponentController;

  async aboutToAppear() {
    await locationManager.requestPermissions()
    this.initMap()
  }

  initMap() {
    // 地图初始化参数,设置地图中心点坐标及层级
    this.mapOption = {
      //默认地图中心点位置
      position: {
        target: {
          //如下是上海的经纬度
          latitude: 31.231706,
          longitude: 121.472644
        },
        //缩放级别
        zoom: 16  //2~20
      },
      //显示定位图标
      myLocationControlsEnabled: true,
      scaleControlsEnabled: true
    };

    // 地图初始化的回调
    this.callback = async (err, mapController) => {
      if (!err) {
        // 获取地图的控制器类,用来操作地图
        this.mapController = mapController;
        // 监听地图初始化完毕
        this.mapController.on("mapLoad", () => {
          console.info(this.TAG, `on-mapLoad`);
          //启用我的位置图层(点击右下角瞄准 定位移动到我的当前位置)
          this.mapController?.setMyLocationEnabled(true)
          //启动我的位置按钮(也就是右下角那个瞄准按钮)
          this.mapController?.setMyLocationControlsEnabled(true)
        });
      }
    };
  }

  build() {
    Stack() {
      //MapComponent地图组件
      // 调用MapComponent组件初始化地图
      MapComponent({ mapOptions: this.mapOption, mapCallback: this.callback })
        .width('100%')
        .height('100%');
      Column({ space: 10 }) {
        Button('地图相机-移动地图/缩放')
          .onClick(() => {
            const update = map.newCameraPosition({
              target: {
                latitude: 32.0,
                longitude: 118.0
              },
              zoom: 10,
            })
            this.mapController?.animateCamera(update)
          })
        Button('位置服务-搜索')
          .onClick(async () => {
            const location = await geoLocationManager.getCurrentLocation()
            //导入site
            const res = await site.searchByText({
              query: '派出所',
              location:location,
              radius:5000 //米
            })
            AlertDialog.show({ message: JSON.stringify(res, null, 2) })
          })
      }
    }
    .height('100%')
  }
}

image.png

总结

一. 位置定位信息

  1. 获取当前位置: 使用geoLocationManager.getCurrentLocation()方法
  2. 地址逆解析: 使用geoLocationManager.getAddressesFromLocation(参数)方法
  3. 实时定位(对位置变化的订阅): 使用包(geoLocationManager)的两个方法: (1)on (2)off

二. 地图服务

地图服务相关准备:

  • (1)生成密匙和证书请求文件 .p12 和 .csr
  • (2)申请调试证书 .cer
  • (3)创建HarmonyOS应用
  • (4)创建p7b调试证书
  • (5)本地证书签名
  • (6)开通并配置地图服务

代码实现: 主要使用到的包:

  • '@kit.MapKit'map, mapCommon, MapComponent, site
  • '@kit.BasicServicesKit'syncCallback: 主要作用为地图初始化所需的回调函数;