HarmonyOS鸿蒙Next中怎样实现在元服务中搜索并选择位置?

HarmonyOS鸿蒙Next中怎样实现在元服务中搜索并选择位置?

在编辑页面下方点击“位置”按钮可以调用搜索附近位置,选择后返回编辑页面即可标记并保存,这个用到了具体哪个 API,如何在元服务中实现的呢?个人开发者需要做额外的哪些权限申请?

4 回复
  1. 楼主可以使用官方的Map搜索能力参考这个文档: POI搜索-位置搜索-Map Kit(地图服务)-应用服务 - 华为HarmonyOS开发者

    let params: site.SearchByTextParams = {
      // 根据自定义关键字进行搜索,例如:“故宫”、“夫子庙”
      query: "Piazzale Dante, 41, 55049 Viareggio, Tuscany, Italy",
      // 经纬度坐标
      location: {
        latitude: 31.984,
        longitude: 118.76625
      },
      // 指定地理位置的范围半径
      radius: 10000,
      // 搜索结果的语言类型
      language: "en"
    };
    // 返回关键字搜索结果
    try {
      const result = await site.searchByText(params);
      console.info(`Succeeded in searching by text. result is ${JSON.stringify(result)}`);
    } catch (error) {
      const err: BusinessError = error as BusinessError;
      console.error(`Failed in searching by text. Code is ${err.code}, message is ${err.message}`);
    }
    
  2. Map的能力是一个华为的服务能力,使用这个能力的话在AGC后台开启服务

更多关于HarmonyOS鸿蒙Next中怎样实现在元服务中搜索并选择位置?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在编辑页面下方点击“位置”按钮可以调用搜索附近位置,选择后返回编辑页面即可标记并保存,这个用到了具体哪个 API?

  • 使用geoLocationManager.getAddressesFromLocationName()进行地理编码(将地名转换为坐标)
  • 通过Map组件展示搜索结果,调用addMarker()添加标记点
  • 调用Map组件的onMapClick事件监听地图点击动作,通过getCurrentLocationRequest获取坐标
  • 使用geoLocationManager.getAddressesFromLocation()实现逆地理编码(将坐标转换为地址)

如何在元服务中实现的呢?

// 地图组件基础配置
Map({ 
  mapType: MapType.NORMAL,
  cameraPosition: new CameraPosition(...)
})
.onMapClick((event: MapClickEvent) => { // 地图点击事件
  geoLocationManager.getAddressesFromLocation(event.coordinate).then(...)
})
.addMarker(new MarkerOptions().position(...)) // 添加位置标记

// 地理编码调用示例
geoLocationManager.getAddressesFromLocationName("北京", 10).then((results) => {
  results.forEach(address => {
    // 处理搜索结果
  })
})

个人开发者需要做额外的哪些权限申请?

// module.json5配置
"requestPermissions": [
  {
    "name": "ohos.permission.LOCATION",
    "reason": "需要获取精确位置信息",
    "usedScene": {
      "ability": ["EntryAbility"],
      "when": "always"
    }
  },
  {
    "name": "ohos.permission.APPROXIMATELY_LOCATION"
  }
]

在HarmonyOS Next元服务中实现位置搜索选择功能:

  1. 使用@ohos.geoLocationManager获取设备位置
  2. 调用@ohos.geoLocationManager.reverseGeocode进行逆地理编码
  3. 通过@ohos.picker组件展示位置选择器
  4. 集成@ohos.search模块实现搜索建议功能

关键代码示例:

let reverseGeocodeRequest = {
  locale: "zh-CN",
  latitude: 39.909,
  longitude: 116.404
};
geoLocationManager.reverseGeocode(reverseGeocodeRequest)
.then(result => console.log(JSON.stringify(result)));

在HarmonyOS Next的元服务中实现位置搜索与选择功能,主要涉及以下技术点:

  1. 核心API:
  • 使用@ohos.geoLocationManager模块获取设备位置
  • 调用@ohos.geoLocationManager.getCurrentLocation()获取当前位置
  • 通过@ohos.geoLocationManager.getAddressesFromLocation()进行逆地理编码
  1. 地图服务集成: 建议使用华为地图服务(需集成Map Kit SDK),主要API包括:
  • getSearchService()创建搜索实例
  • createPoiSearchRequest()构建POI搜索请求
  • searchPoi()执行搜索操作
  1. 权限申请: 在config.json中需声明以下权限:
"reqPermissions": [
    {
        "name": "ohos.permission.LOCATION"
    },
    {
        "name": "ohos.permission.APPROXIMATELY_LOCATION"
    }
]
  1. 实现流程:
  • 调用位置服务获取坐标
  • 使用地图SDK发起周边POI搜索
  • 展示搜索结果列表
  • 处理用户选择并返回位置信息

注意:实际使用时需处理权限动态申请和位置服务可用性检查。

回到顶部