在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

探索HarmonyOS位置服務:為用戶提供直觀的坐標顯示

ITMING ? 來源:ITMING ? 作者:ITMING ? 2024-08-20 10:51 ? 次閱讀

關于作者
白曉明
寧夏圖爾科技有限公司董事長兼CEO、堅果派聯合創始人
華為HDE、潤和軟件HiHope社區專家、鴻蒙KOL、倉頡KOL
華為開發者學堂/51CTO學堂/CSDN學堂認證講師
開放原子開源基金會2023開源貢獻之星
OpenHarmony三方庫貢獻者
公眾號:開源開發者新視界(openwatcher)

在先前的環節中,我們所獲取到的位置信息是以經緯度的方式來呈現。不可否認,這種呈現方式在描述位置時具有極高的準確性,能夠精確地定位到地球的每一個點。然而,不得不承認的是,對于普通用戶而言,經緯度的表述形式顯示得過于專業和晦澀,缺乏直觀性和易理解性,確實不夠友好。

HarmonyOS的位置服務(Location Kit)則猶如一位貼心的助手,為開發者提供了地理編碼轉化和逆地理編碼轉化這兩種極為實用的能力。其中,地理編碼就像是一個信息豐富的寶藏,它包含了多個屬性來對位置進行細致入微的描述。比如,它涵蓋了國家這個宏觀層面的標識,讓我們能夠快速確定位置所在的大區域;還有行政區劃,進一步明確了具體的地區范圍;街道的描述則讓我們對周邊環境有了更清晰的認知;門牌號更是精準地指向了具體的地點;而地址描述則以一種更為通俗易懂的方式將所有這些信息整合起來,為用戶提供一個全面而直觀的位置表達。這樣豐富多樣的信息呈現方式,無疑更加便于用戶理解和把握自己所處的位置,無論是在日常的出行導航中,還是在社交應用里與朋友分享位置,都能讓用戶輕松便捷地知曉自己的具體方位,為我們的數字生活帶來更多的便利和舒適體驗。

查看地理編碼與逆地理編碼服務是否可用

首先,開發者在進行操作時,需要優先調用isGeoServiceAvailable方法來查詢地理編碼與逆地理編碼服務的可用性。這一步驟至關重要,因為只有當確定服務可用的情況下,才能夠進行后續的編碼轉化操作。如果經過查詢發現服務不可用,那么就意味著該設備并不具備地理編碼與逆地理編碼轉化能力。這種情況下,開發者務必不要使用相關接口,以免引起不必要的錯誤或者異常情況,從而確保應用程序的穩定性。

let isAvailable = geoLocationManager.isGeocoderAvailable();

把坐標轉化為地理位置信息

在實際應用中,我們可以通過調用getCurrentLocation()函數獲取當前位置,也可以使用on('locationChange')方法進行位置變化訂閱。然而,通過這兩種方式所獲取到的位置信息都是以坐標形式呈現出來的,對于普通用戶而言,這種坐標形式的位置信息可能會顯得比較抽象且難以理解。

為了能夠讓用戶更加直觀地理解位置信息,開發者可以調用getAddressesFromLocation方法,該方法能夠將坐標形式的位置信息轉化為地理位置信息。比如國家信息、行政區、城市信息、區/縣信息、路名等等。具體位置信息如以下類所示:

/**
 * 地理編碼地址信息
 */
export interface GeoAddress {
    /**
     * 緯度信息,正值表示北緯,負值表示南緯。
     * 取值范圍為[-90, 90],僅支持WGS84坐標系。
     */
    latitude?: number;
    /**
     * 經度信息,正值表示東經,負值表示西經。
     * 取值范圍為[-180, 180],僅支持WGS84坐標系。
     */
    longitude?: number;
    /**
     * 位置描述信息的語言。
     * zh:中文;en:英文。
     */
    locale?: string;
    /**
     * 詳細地址信息。
     */
    placeName?: string;
    /**
     * 國家碼信息。
     */
    countryCode?: string;
    /**
     * 國家信息。
     */
    countryName?: string;
    /**
     * 一級行政區,一般是省/州。
     */
    administrativeArea?: string;
    /**
     * 二級行政區,一般是市。
     */
    subAdministrativeArea?: string;
    /**
     * 城市信息,一般是市。
     */
    locality?: string;
    /**
     * 子城市信息,一般是區/縣。
     */
    subLocality?: string;
    /**
     * 路名信息。
     */
    roadName?: string;
    /**
     * 子路名信息。
     */
    subRoadName?: string;
    /**
     * 門牌號信息。
     */
    premises?: string;
    /**
     * 郵政編碼信息。
     */
    postalCode?: string;
    /**
     * 聯系方式信息。
     */
    phoneNumber?: string;
    /**
     * 位置信息附件的網址信息。
     */
    addressUrl?: string;
    /**
     * 附加的描述信息。
     * 目前包含城市編碼cityCode和區劃編碼adminCode。
     */
    descriptions?: Array< string >;
    /**
     * 附加的描述信息數量。
     * 取值大于等于0,推薦該值小于10。
     */
    descriptionsSize?: number;
}

以轉化當前坐標為例,代碼如下所示:

/**
 * 逆地理編碼請求參數
 */
export interface ReverseGeoCodeRequest {
    /**
     * 指定位置描述信息的語言。
     * zh:中文;en:英文。
     */
    locale?: string;
    /**
     * 限制查詢結果在指定的國家區,采用ISO3166-1 alpha-2。
     * CN代表中國。
     */
    country?: string;
    /**
     * 緯度信息。
     */
    latitude: number;
    /**
     * 經度信息。
     */
    longitude: number;
    /**
     * 指定返回位置信息的最大個數。
     */
    maxItems?: number;
}

/**
 * 坐標轉化為地理位置信息
 * @param latitude
 * @param longitude
 * @param maxItems
 * @returns
 */
static async getAddressesFromLocation(latitude: number,
  longitude: number, maxItems: number = 1): Promise< geoLocationManager.GeoAddress[] | undefined > {
  const request: geoLocationManager.ReverseGeoCodeRequest = {
    locale: "zh",
    country: "CN",
    latitude,
    longitude,
    maxItems
  };
  let location: geoLocationManager.GeoAddress[] | undefined = undefined;
  try {
    location = await geoLocationManager.getAddressesFromLocation(request);
    console.info(`[AppLogger]坐標轉化為地理位置信息:${JSON.stringify(location)}`);
  } catch (error) {
    const err = error as BusinessError;
    console.error(`[AppLogger]坐標轉化為地理位置信息異常:${JSON.stringify(err)}`);
  }
  return location;
}


Button('坐標轉化為地理位置信息')
  .onClick(async () = > {
    this.location = await LocationUtil.getSingleLocationRequest(geoLocationManager.LocatingPriority.PRIORITY_LOCATING_SPEED);
    if (this.location !== undefined) {
      this.locationArr = await LocationUtil.getAddressesFromLocation(this.location?.latitude, this.location?.longitude);
    }
  })

image20240817155340722.png

把地理位置信息轉化為坐標

在導航類App的實際使用場景中,當用戶進行位置搜索時,通常會輸入具體的位置信息,比如某個商場的名稱、某條街道的地址或者某個景點的具體描述等。但是,對于地圖的顯示而言,它所需要的是精確的位置坐標信息,只有這樣才能夠準確地在地圖上進行標注和展示。

在這種情況下,為了實現從用戶輸入的位置描述到地圖所需的坐標信息的轉化,開發者可以調用getAddressesFromLocationName方法。這個方法就像是一座橋梁,能夠將用戶輸入的直觀的位置描述轉化為地圖能夠識別和使用的位置坐標。通過這樣的轉化,不僅可以滿足地圖顯示的需求,還能夠為用戶提供更加準確和便捷的導航服務,讓用戶能夠更加輕松地找到自己想要達到的目的地。

以轉化用戶輸入地理位置為例,代碼如下所示:

/**
 * 地理編碼請求參數
 */
export interface GeoCodeRequest {
    /**
     * 位置描述信息的語言。
     * zh:中文;en:英文。
     */
    locale?: string;
    /**
     * 限制查詢結果在指定的國家區,采用ISO3166-1 alpha-2。
     * CN代表中國。
     */
    country?: string;
    /**
     * 位置信息描述。
     */
    description: string;
    /**
     * 返回結果信息的最大個數。
     */
    maxItems?: number;
    /**
     * 最小緯度信息。
     */
    minLatitude?: number;
    /**
     * 最小經度信息。
     */
    minLongitude?: number;
    /**
     * 最大緯度信息。
     */
    maxLatitude?: number;
    /**
     * 最大經度信息。
     */
    maxLongitude?: number;
}

/**
 * 地理位置轉化為坐標信息
 * @param description
 * @param maxItems
 * @returns
 */
static async getAddressesFromLocationName(description: string,
  maxItems: number = 1): Promise< geoLocationManager.GeoAddress[] | undefined > {
  const request: geoLocationManager.GeoCodeRequest = {
    description,
    maxItems
  };
  let location: geoLocationManager.GeoAddress[] | undefined = undefined;
  try {
    location = await geoLocationManager.getAddressesFromLocationName(request);
    console.info(`[AppLogger]地理位置轉化為坐標信息:${JSON.stringify(location)}`);
  } catch (error) {
    const err = error as BusinessError;
    console.error(`[AppLogger]地理位置轉化為坐標信息異常:${JSON.stringify(err)}`);
  }
  return location;
}

TextInput({ placeholder: "請輸入具體的位置信息..." })
  .onChange((value: string) = > {
    this.val = value;
  })
Button('坐標轉化為地理位置信息')
  .onClick(async () = > {
    if (LocationUtil.usedGeocoderAvailable()) {
      this.locationArr = await LocationUtil.getAddressesFromLocationName(this.val, 5);
    }
  })

image20240817170727668.png

使用ForEach渲染列表數據

List() {
  ForEach(this.locationArr, (item: geoLocationManager.GeoAddress) = > {
    ListItem() {
      Column({ space: 8 }) {
        Text(item.placeName)
          .fontSize(16)
        Text(`坐標:[${item.latitude}, ${item.longitude}]`)
          .fontSize(12)
        Text(`${item.countryName} ${item.administrativeArea} ${item.locality} ${item.subLocality} ${item.roadName} ${item.subRoadName}`)
          .fontSize(12)
      }
      .width('100%')
      .padding(12)
      .backgroundColor(0xF1F3F5)
      .borderRadius(8)
      .justifyContent(FlexAlign.Start)
    }
  })
}
.width('90%')
.divider({
  strokeWidth: 4,
  color: 0xFFFFFF
})

image20240817193205402.png

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 位置服務
    +關注

    關注

    0

    文章

    5

    瀏覽量

    2149
  • HarmonyOS
    +關注

    關注

    80

    文章

    2085

    瀏覽量

    32339
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    HarmonyOS NEXT應用開發-Notification Kit(用戶通知服務)通知類型、級別與渠道

    。 SERVICE_INFORMATION 2 服務提醒。該類型對應SlotLevelLEVEL_HIGH。 CONTENT_INFORMATION 3 內容資訊。該類型對應SlotLevel
    發表于 06-09 14:39

    HarmonyOS5云服務技術分享--ArkTS開發Node環境

    氣的方式探索這個功能,結尾還有實用總結和鼓勵彩蛋哦~? ? 一、HarmonyOS云函數開發:核心能力與價值 HarmonyOS的云函數(Serverless)開發者
    發表于 05-22 17:21

    HarmonyOS5云服務技術分享--認證文檔問題

    /oh_modules)。 三、結尾總結 通過本文,您已完成AGC認證服務HarmonyOS ArkTS集成流程。后續可結合業務需求擴展登錄方式(如第三方社交賬號),并通過AGC控制臺監控用戶行為
    發表于 05-22 13:20

    鴻蒙應用元服務開發-Account Kit獲取華為賬號用戶信息概述

    一、概述 當元服務需要完善用戶個人資料(頭像、手機號、收貨地址、發票抬頭)時,可通過Account Kit提供的相關能力,引導用戶填寫、管理相關信息并完成授權。獲取頭像、手機號、收貨地
    發表于 04-02 11:10

    HarmonyOS NEXT 原生應用/元服務調試概述

    一、概述 DevEco Studio提供了豐富的HarmonyOS應用/元服務調試能力,支持JS、ArkTS、C/C單語言調試和ArkTS/JS+C/C跨語言調試能力,并且支持三方庫源碼調試,幫助
    發表于 02-26 11:03

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)綜述

    ,準確且及時地獲取到用戶顯性、潛在意圖,從而實現個性化、多模態、精準的智慧分發。 三、智慧分發 方便開發者接入,智慧分發提供了多種特性類別,當前已開放習慣推薦、事件推薦、技能調用-語音、本地搜索,后續
    發表于 11-28 10:43

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)習慣推薦方案概述

    應用/元服務HarmonyOS交互。 當用戶使用應用/元服務播放歌單時,應用/元服務可以向Intents Kit共享該意圖,并
    發表于 11-19 17:59

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)事件推薦開發者測試

    意圖框架向開發者提供真機測試能力,即開發者可連接設備進行調測。開發者完成代碼開發之后,功能正式上架應用市場前,可以在HarmonyOS NEXT設備上面進行自驗證,打磨體驗。真機測試分為三個步驟
    發表于 11-18 17:39

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)本地搜索方案概述

    本地搜索”特性例,當用戶在使用音樂應用/元服務產生行為時,應用/元服務可以將音樂的數據通過意圖框架API接口共享到HarmonyOS。這里
    發表于 11-06 10:59

    pcb設計中如何設置坐標原點

    原點通常位于PCB板的左下角,其坐標(0,0)。 坐標原點的作用 坐標原點在PCB設計中具有以下作用: (1) 確定PCB布局的起始位置
    的頭像 發表于 09-02 14:45 ?4335次閱讀

    人員定位技術向化工廠的智慧平臺提供精準的位置服務

    化工廠的智慧平臺提供精準的位置服務。 人員定位系統功能1、三維展示模塊系統平臺采用三維地圖作為基礎,實現變電站整體的三維場景瀏覽、報警監控、重要數據統計、人員精確定位、歷史軌跡查詢、作業票導入、電子圍欄、作業過
    的頭像 發表于 08-30 11:00 ?436次閱讀
    人員定位技術向化工廠的智慧平臺<b class='flag-5'>提供</b>精準的<b class='flag-5'>位置服務</b>

    服務體驗-服務發現

    服務發現,無論線上或線下的方式都可以發現元服務。 線上:基于用戶意圖。從精準意圖的搜索、用戶事件觸發的推薦到主動探索等場景。
    發表于 07-15 17:02

    HarmonyOS NEXT Developer Beta1最新術語表

    服務 原名原子化服務,是HarmonyOS提供的一種面向未來的服務提供方式,是有獨立入口的(
    發表于 06-27 16:16

    HarmonyOS NEXT Developer Beta1中的Kit

    HarmonyOS NEXT Developer Preview1(API 11)版本開始,HarmonyOS SDK以Kit維度提供豐富、完備的開放能力,涵蓋應用框架、系統、媒體、圖形、應用
    發表于 06-26 10:47

    cmm三坐標測量儀精準掌握形狀與位置公差

    三本精密儀器講解蔡司三坐標測量機精準掌握形狀與位置公差一、了解基本概念在深入使用Calypso軟件之前,明確幾個關鍵術語是非常重要的。形位公差涉及零件的形狀及其相對于其他特征的位置。Calypso
    的頭像 發表于 06-25 15:09 ?1260次閱讀
    cmm三<b class='flag-5'>坐標</b>測量儀精準掌握形狀與<b class='flag-5'>位置</b>公差
    主站蜘蛛池模板: 四虎传媒 | 亚洲一区二区三区中文字幕5566 | 视频一区日韩 | 在线午夜 | 理论视频在线观看 | 天天操综合视频 | 男人一级片 | 色综合视频一区二区三区 | 热99视频 | 一级女性黄 色生活片 | 久久好色 | 天天躁天天狠天天透 | 国产精品第一页在线观看 | 国产全黄三级三级 | 天天干成人网 | 玖操在线| 亚洲成a人片7777 | 国产三级国产精品 | 天天射天天搞 | 深夜在线视频免费网址 | 欧美日韩中文字幕在线 | 国产牛牛| 色香淫欲| 天堂网www | 性欧美69| 色婷婷狠狠久久综合五月 | 人人干人人草 | 色天天天天 | 色综合天天综合网看在线影院 | 直接在线观看的三级网址 | 免费看黄色片网站 | 国内自拍网红在综合图区 | 午夜神马嘿嘿 | 性欧美丰满xxxx性久久久 | 亚洲成人在线网 | 色香色香欲天天天影视综合网 | 亚洲最大色网站 | 国产高清视频在线免费观看 | 欧美三级视频网站 | 国产成人综合网在线播放 | 日本三级在线观看免费 |