HarmonyOS鸿蒙Next中请问有没有类似于抖音小红书那种位置选择的组件

HarmonyOS鸿蒙Next中请问有没有类似于抖音小红书那种位置选择的组件 如题 有没有类似于抖音小红书发文章或者视频时候的位置选择的组件,选择好以后是只返回地址 还是返回地址与经纬度都会返回,需要的是经纬度地址一并返回

7 回复

这个肯定有啊,看下面这个文档

地点选取-地图Picker-Map Kit(地图服务)-应用服务 - 华为HarmonyOS开发者

import { sceneMap } from '@kit.MapKit';
import { common } from '@kit.AbilityKit';

async function openLocationPicker() {
  const ctx = this.getUIContext().getHostContext() as common.UIAbilityContext;
  const result = await sceneMap.chooseLocation(ctx, {
    searchEnabled: true,    // 显示搜索框
    showNearbyPoi: true     // 显示附近地点列表
  });
  console.log('选中位置:', result);
  // result.location.latitude / longitude → 经纬度
  // result.address → 地址
}

调用后返回 LocationChoosingResult,关键字段:

{
  location: { latitude: number, longitude: number }, // 经纬度(GCJ02)
  address: string,           // 详细地址
  name: string,              // POI名称(如“XX奶茶店”)
  addressComponent: { ... }  // 省市区等细分
}

更多关于HarmonyOS鸿蒙Next中请问有没有类似于抖音小红书那种位置选择的组件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


要获取经纬度数据可以使用geoLocationManager获取latitude纬度、longitude经度

目前 HarmonyOS NEXT 官方没有直接提供:

类似抖音/小红书的位置选择组件

一般都是:

Location Kit / 地图POI能力 + 自定义UI

自己封装实现。


官方文档:

HarmonyOS Location Kit 官方文档


正常实现思路:

获取当前位置
-> 搜索附近POI
-> 列表展示
-> 用户选择
-> 返回 name/address/lat/lng

最终正常都会返回:

{
  name,
  address,
  latitude,
  longitude
}

也就是:

地址 + 经纬度

都能一起返回。


下面给一个简化版示例(ArkTS):

1、申请权限

module.json5:

"requestPermissions": [
  {
    "name": "ohos.permission.APPROXIMATELY_LOCATION"
  },
  {
    "name": "ohos.permission.LOCATION"
  }
]

2、获取当前位置

import { geoLocationManager } from '@kit.LocationKit';

geoLocationManager.getCurrentLocation({
  'priority': geoLocationManager.LocationRequestPriority.FIRST_FIX,
  'scenario': geoLocationManager.LocationRequestScenario.NAVIGATION
}).then((location) => {

  console.info('纬度: ' + location.latitude);
  console.info('经度: ' + location.longitude);

}).catch((err) => {
  console.error('定位失败:' + JSON.stringify(err));
})

3、模拟 POI 数据结构

实际项目里:

  • 华为地图
  • 高德
  • 腾讯地图

返回的数据结构都类似:

interface PoiItem {
  name: string
  address: string
  latitude: number
  longitude: number
}

4、位置选择页面示例

@State poiList: PoiItem[] = [
  {
    name: '万达广场',
    address: '北京市朝阳区xxx',
    latitude: 39.123,
    longitude: 116.456
  },
  {
    name: '星巴克',
    address: '北京市朝阳区yyy',
    latitude: 39.222,
    longitude: 116.333
  }
]

build() {
  List() {
    ForEach(this.poiList, (item: PoiItem) => {
      ListItem() {

        Column() {
          Text(item.name)
            .fontSize(18)

          Text(item.address)
            .fontSize(14)
            .fontColor('#999999')
        }
        .width('100%')
        .padding(16)
        .alignItems(HorizontalAlign.Start)
      }
      .onClick(() => {

        console.info(
          `选择位置:
          名称=${item.name}
          地址=${item.address}
          纬度=${item.latitude}
          经度=${item.longitude}`
        )

      })
    })
  }
}

实际:

抖音 / 小红书

这种位置选择:

本质也是:

POI搜索 + List列表

并不是系统内置组件。


如果想做得更像小红书:

建议:

地图SDK + 搜索框 + 附近POI列表

组合实现。


也可以参考这些 POI 搜索案例:

HarmonyOS POI搜索示例(高德)

HarmonyOS 地图导航与地点搜索示例

这个要看你用的是哪家地图服务了。

华为的就参考这个:地图Picker-Map Kit(地图服务)-应用服务 - 华为HarmonyOS开发者
高德的就参考这个:概述-HarmonyOS NEXT 定位SDK | 高德地图API
cke_1521.png

可以试试这个组件sceneMap.chooseLocation是否满足需求,返回的LocationChoosingResult是包含这些信息的
cke_2100.png

HarmonyOS Next 提供 GeoLocationManager 实现定位,UI 层面可使用 TextPicker 或自定义 Column+Scroll 模拟抖音/小红书式的滑动选择器(如城市列表),无内置“位置选择”专用组件。

HarmonyOS Next 提供了 LocationPicker(位置选择器) 组件,可满足类似抖音、小红书的场景。该组件支持搜索和浏览附近地点,选择后同时返回 地址信息经纬度,无需额外处理即可获取完整的位置数据。

回到顶部