鴻蒙NEXT開發定位工具類 (WGS-84坐標系)(ArkTs)

import geoLocationManager from '@ohos.geoLocationManager';
import { BusinessError, Callback } from '@ohos.base';
import { LogUtil } from './LogUtil';
import { PermissionUtil } from './PermissionUtil';
import { map, mapCommon } from '@kit.MapKit';
/*** 定位工具類 (WGS-84坐標系)* author: CSDN-鴻蒙布道師* since: 2025/04/22*/
export class LocationUtil {/*** 判斷位置服務是否已經使能(定位是否開啟)。* @returns true 表示定位已開啟,false 表示未開啟。*/static isLocationEnabled(): boolean {return geoLocationManager.isLocationEnabled();}/*** 申請定位權限。* @returns true 表示授權成功,false 表示用戶拒絕授權。*/static async requestLocationPermissions(): Promise<boolean> {const permissions: Array<string> = ['ohos.permission.LOCATION', 'ohos.permission.APPROXIMATELY_LOCATION'];let grant: boolean = await PermissionUtil.requestPermissions(permissions);if (!grant) {grant = await PermissionUtil.requestPermissionOnSetting(permissions);}return grant;}/*** 獲取當前位置(簡化版)。* @returns 當前位置信息。如果發生錯誤,則返回 null。*/static async getCurrentLocationEasy(): Promise<geoLocationManager.Location | null> {return LocationUtil.getCurrentLocation();}/*** 獲取當前位置。* @param request 可選的定位請求參數。* @returns 當前位置信息。如果發生錯誤,則返回 null。*/static async getCurrentLocation(request?: geoLocationManager.CurrentLocationRequest | geoLocationManager.SingleLocationRequest): Promise<geoLocationManager.Location | null> {try {return await geoLocationManager.getCurrentLocation(request);} catch (err) {LocationUtil.handleError(err, '獲取當前位置失敗');return null; // 返回 null 表示發生錯誤}}/*** 開啟位置變化訂閱,并發起定位請求(簡化版)。* @param callBack 回調函數。* @returns 成功返回 0,失敗返回錯誤碼。*/static onLocationChangeEasy(callBack: Callback<geoLocationManager.Location>): number {const defaultRequest: geoLocationManager.LocationRequest = {priority: geoLocationManager.LocationRequestPriority.FIRST_FIX,scenario: geoLocationManager.LocationRequestScenario.UNSET,timeInterval: 10,distanceInterval: 0,maxAccuracy: 0,};return LocationUtil.onLocationChange(defaultRequest, callBack);}/*** 開啟位置變化訂閱,并發起定位請求。* @param request 定位請求參數。* @param callBack 回調函數。* @returns 成功返回 0,失敗返回錯誤碼。*/static onLocationChange(request: geoLocationManager.LocationRequest | geoLocationManager.ContinuousLocationRequest,callBack: Callback<geoLocationManager.Location>): number {try {geoLocationManager.on('locationChange', request, callBack);return 0;} catch (err) {return LocationUtil.handleError(err, '開啟位置變化訂閱失敗');}}/*** 關閉位置變化訂閱,并刪除對應的定位請求。* @param callback 不傳則取消當前類型的所有訂閱。* @returns 成功返回 0,失敗返回錯誤碼。*/static offLocationChange(callback?: Callback<geoLocationManager.Location>): number {try {if (callback) {geoLocationManager.off('locationChange', callback);} else {geoLocationManager.off('locationChange');}return 0;} catch (err) {return LocationUtil.handleError(err, '關閉位置變化訂閱失敗');}}/*** 判斷地理編碼與逆地理編碼服務是否可用。* @returns true 表示服務可用,false 表示不可用。*/static isGeocoderAvailable(): boolean {return geoLocationManager.isGeocoderAvailable();}/*** 地理編碼:將地理描述轉換為具體坐標集合。* @param locationName 地理位置描述。* @param maxItems 返回結果的最大數量。* @returns 編碼后的坐標集合。*/static async getGeoAddressFromLocationName(locationName: string,maxItems: number = 1): Promise<Array<geoLocationManager.GeoAddress>> {const geocodeRequest: geoLocationManager.GeoCodeRequest = {description: locationName,maxItems,locale: 'zh',};try {const result = await geoLocationManager.getAddressesFromLocationName(geocodeRequest);return result || [];} catch (err) {LocationUtil.handleError(err, '地理編碼失敗');return [];}}/*** 地理編碼:將地理描述轉換為具體坐標。* @param locationName 地理位置描述。* @returns 編碼后的坐標對象。*/static async getAddressFromLocationName(locationName: string): Promise<geoLocationManager.GeoAddress> {const geoAddressList = await LocationUtil.getGeoAddressFromLocationName(locationName, 1);return geoAddressList.length > 0 ? geoAddressList[0] : {};}/*** 逆地理編碼:將坐標轉換為地理描述集合。* @param latitude 緯度。* @param longitude 經度。* @param maxItems 返回結果的最大數量。* @returns 逆編碼后的地理描述集合。*/static async getGeoAddressFromLocation(latitude: number,longitude: number,maxItems: number = 1): Promise<Array<geoLocationManager.GeoAddress>> {const reverseGeocodeRequest: geoLocationManager.ReverseGeoCodeRequest = {latitude,longitude,maxItems,locale: 'zh',};try {const result = await geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest);return result || [];} catch (err) {LocationUtil.handleError(err, '逆地理編碼失敗');return [];}}/*** 逆地理編碼:將坐標轉換為地理描述。* @param latitude 緯度。* @param longitude 經度。* @returns 逆編碼后的地理描述對象。*/static async getAddressFromLocation(latitude: number, longitude: number): Promise<geoLocationManager.GeoAddress> {const geoAddressList = await LocationUtil.getGeoAddressFromLocation(latitude, longitude, 1);return geoAddressList.length > 0 ? geoAddressList[0] : {};}/*** 獲取當前的國家碼。* @returns 當前國家碼。*/static async getCountryCode(): Promise<string> {try {const result = await geoLocationManager.getCountryCode();return result?.country || '';} catch (err) {LocationUtil.handleError(err, '獲取國家碼失敗');return '';}}/*** 根據指定的兩個經緯度坐標點,計算兩點間的直線距離(單位:米)。* @param from 起始坐標。* @param to 目標坐標。* @returns 兩點間的直線距離。*/static calculateDistance(from: mapCommon.LatLng, to: mapCommon.LatLng): number {return map.calculateDistance(from, to);}/*** 根據指定的兩個經緯度坐標點,計算兩點間的直線距離(單位:米)。* @param fromLat 起始緯度。* @param fromLng 起始經度。* @param toLat 目標緯度。* @param toLng 目標經度。* @returns 兩點間的直線距離。*/static calculateDistanceEasy(fromLat: number, fromLng: number, toLat: number, toLng: number): number {const fromLatLng: mapCommon.LatLng = { latitude: fromLat, longitude: fromLng };const toLatLng: mapCommon.LatLng = { latitude: toLat, longitude: toLng };return map.calculateDistance(fromLatLng, toLatLng);}/*** 錯誤處理方法。* @param error 錯誤對象,必須是 BusinessError 類型。* @param message 提示信息。* @returns 返回錯誤碼。如果無法獲取錯誤碼,則返回默認值 -1。*/private static handleError(error: BusinessError, message: string): number {let errorCode = -1; // 默認錯誤碼let errorMessage = '未知錯誤';if (error && typeof error.code === 'number') {errorCode = error.code;errorMessage = error.message || errorMessage;}// 記錄錯誤日志LogUtil.error(`${message}: code=${errorCode}, message=${errorMessage}`);return errorCode;}/*** 獲取錯誤消息。* @param code 錯誤碼。* @param defaultMsg 默認錯誤消息。* @returns 錯誤消息。*/static getErrorMsg(code: number, defaultMsg: string): string {const errorMessages: Map<number, string> = new Map([[201, '權限校驗失敗!'],[202, '系統API權限校驗失敗!'],[401, '參數檢查失敗!'],[801, '該設備不支持此API!'],[3301000, '位置服務不可用!'],[3301100, '請開啟位置功能開關!'],[3301200, '定位失敗,未獲取到定位結果!'],[3301300, '逆地理編碼查詢失敗!'],[3301400, '地理編碼查詢失敗!'],[3301500, '區域信息(包含國家碼)查詢失敗!'],[3301600, '地理圍欄操作失敗!'],]);return errorMessages.get(code) || defaultMsg;}
}
代碼如下:
import geoLocationManager from '@ohos.geoLocationManager';
import { BusinessError, Callback } from '@ohos.base';
import { LogUtil } from './LogUtil';
import { PermissionUtil } from './PermissionUtil';
import { map, mapCommon } from '@kit.MapKit';
/*** 定位工具類 (WGS-84坐標系)* author: CSDN-鴻蒙布道師* since: 2025/04/22*/
export class LocationUtil {/*** 判斷位置服務是否已經使能(定位是否開啟)。* @returns true 表示定位已開啟,false 表示未開啟。*/static isLocationEnabled(): boolean {return geoLocationManager.isLocationEnabled();}/*** 申請定位權限。* @returns true 表示授權成功,false 表示用戶拒絕授權。*/static async requestLocationPermissions(): Promise<boolean> {const permissions: Array<string> = ['ohos.permission.LOCATION', 'ohos.permission.APPROXIMATELY_LOCATION'];let grant: boolean = await PermissionUtil.requestPermissions(permissions);if (!grant) {grant = await PermissionUtil.requestPermissionOnSetting(permissions);}return grant;}/*** 獲取當前位置(簡化版)。* @returns 當前位置信息。如果發生錯誤,則返回 null。*/static async getCurrentLocationEasy(): Promise<geoLocationManager.Location | null> {return LocationUtil.getCurrentLocation();}/*** 獲取當前位置。* @param request 可選的定位請求參數。* @returns 當前位置信息。如果發生錯誤,則返回 null。*/static async getCurrentLocation(request?: geoLocationManager.CurrentLocationRequest | geoLocationManager.SingleLocationRequest): Promise<geoLocationManager.Location | null> {try {return await geoLocationManager.getCurrentLocation(request);} catch (err) {LocationUtil.handleError(err, '獲取當前位置失敗');return null; // 返回 null 表示發生錯誤}}/*** 開啟位置變化訂閱,并發起定位請求(簡化版)。* @param callBack 回調函數。* @returns 成功返回 0,失敗返回錯誤碼。*/static onLocationChangeEasy(callBack: Callback<geoLocationManager.Location>): number {const defaultRequest: geoLocationManager.LocationRequest = {priority: geoLocationManager.LocationRequestPriority.FIRST_FIX,scenario: geoLocationManager.LocationRequestScenario.UNSET,timeInterval: 10,distanceInterval: 0,maxAccuracy: 0,};return LocationUtil.onLocationChange(defaultRequest, callBack);}/*** 開啟位置變化訂閱,并發起定位請求。* @param request 定位請求參數。* @param callBack 回調函數。* @returns 成功返回 0,失敗返回錯誤碼。*/static onLocationChange(request: geoLocationManager.LocationRequest | geoLocationManager.ContinuousLocationRequest,callBack: Callback<geoLocationManager.Location>): number {try {geoLocationManager.on('locationChange', request, callBack);return 0;} catch (err) {return LocationUtil.handleError(err, '開啟位置變化訂閱失敗');}}/*** 關閉位置變化訂閱,并刪除對應的定位請求。* @param callback 不傳則取消當前類型的所有訂閱。* @returns 成功返回 0,失敗返回錯誤碼。*/static offLocationChange(callback?: Callback<geoLocationManager.Location>): number {try {if (callback) {geoLocationManager.off('locationChange', callback);} else {geoLocationManager.off('locationChange');}return 0;} catch (err) {return LocationUtil.handleError(err, '關閉位置變化訂閱失敗');}}/*** 判斷地理編碼與逆地理編碼服務是否可用。* @returns true 表示服務可用,false 表示不可用。*/static isGeocoderAvailable(): boolean {return geoLocationManager.isGeocoderAvailable();}/*** 地理編碼:將地理描述轉換為具體坐標集合。* @param locationName 地理位置描述。* @param maxItems 返回結果的最大數量。* @returns 編碼后的坐標集合。*/static async getGeoAddressFromLocationName(locationName: string,maxItems: number = 1): Promise<Array<geoLocationManager.GeoAddress>> {const geocodeRequest: geoLocationManager.GeoCodeRequest = {description: locationName,maxItems,locale: 'zh',};try {const result = await geoLocationManager.getAddressesFromLocationName(geocodeRequest);return result || [];} catch (err) {LocationUtil.handleError(err, '地理編碼失敗');return [];}}/*** 地理編碼:將地理描述轉換為具體坐標。* @param locationName 地理位置描述。* @returns 編碼后的坐標對象。*/static async getAddressFromLocationName(locationName: string): Promise<geoLocationManager.GeoAddress> {const geoAddressList = await LocationUtil.getGeoAddressFromLocationName(locationName, 1);return geoAddressList.length > 0 ? geoAddressList[0] : {};}/*** 逆地理編碼:將坐標轉換為地理描述集合。* @param latitude 緯度。* @param longitude 經度。* @param maxItems 返回結果的最大數量。* @returns 逆編碼后的地理描述集合。*/static async getGeoAddressFromLocation(latitude: number,longitude: number,maxItems: number = 1): Promise<Array<geoLocationManager.GeoAddress>> {const reverseGeocodeRequest: geoLocationManager.ReverseGeoCodeRequest = {latitude,longitude,maxItems,locale: 'zh',};try {const result = await geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest);return result || [];} catch (err) {LocationUtil.handleError(err, '逆地理編碼失敗');return [];}}/*** 逆地理編碼:將坐標轉換為地理描述。* @param latitude 緯度。* @param longitude 經度。* @returns 逆編碼后的地理描述對象。*/static async getAddressFromLocation(latitude: number, longitude: number): Promise<geoLocationManager.GeoAddress> {const geoAddressList = await LocationUtil.getGeoAddressFromLocation(latitude, longitude, 1);return geoAddressList.length > 0 ? geoAddressList[0] : {};}/*** 獲取當前的國家碼。* @returns 當前國家碼。*/static async getCountryCode(): Promise<string> {try {const result = await geoLocationManager.getCountryCode();return result?.country || '';} catch (err) {LocationUtil.handleError(err, '獲取國家碼失敗');return '';}}/*** 根據指定的兩個經緯度坐標點,計算兩點間的直線距離(單位:米)。* @param from 起始坐標。* @param to 目標坐標。* @returns 兩點間的直線距離。*/static calculateDistance(from: mapCommon.LatLng, to: mapCommon.LatLng): number {return map.calculateDistance(from, to);}/*** 根據指定的兩個經緯度坐標點,計算兩點間的直線距離(單位:米)。* @param fromLat 起始緯度。* @param fromLng 起始經度。* @param toLat 目標緯度。* @param toLng 目標經度。* @returns 兩點間的直線距離。*/static calculateDistanceEasy(fromLat: number, fromLng: number, toLat: number, toLng: number): number {const fromLatLng: mapCommon.LatLng = { latitude: fromLat, longitude: fromLng };const toLatLng: mapCommon.LatLng = { latitude: toLat, longitude: toLng };return map.calculateDistance(fromLatLng, toLatLng);}/*** 錯誤處理方法。* @param error 錯誤對象,必須是 BusinessError 類型。* @param message 提示信息。* @returns 返回錯誤碼。如果無法獲取錯誤碼,則返回默認值 -1。*/private static handleError(error: BusinessError, message: string): number {let errorCode = -1; // 默認錯誤碼let errorMessage = '未知錯誤';if (error && typeof error.code === 'number') {errorCode = error.code;errorMessage = error.message || errorMessage;}// 記錄錯誤日志LogUtil.error(`${message}: code=${errorCode}, message=${errorMessage}`);return errorCode;}/*** 獲取錯誤消息。* @param code 錯誤碼。* @param defaultMsg 默認錯誤消息。* @returns 錯誤消息。*/static getErrorMsg(code: number, defaultMsg: string): string {const errorMessages: Map<number, string> = new Map([[201, '權限校驗失敗!'],[202, '系統API權限校驗失敗!'],[401, '參數檢查失敗!'],[801, '該設備不支持此API!'],[3301000, '位置服務不可用!'],[3301100, '請開啟位置功能開關!'],[3301200, '定位失敗,未獲取到定位結果!'],[3301300, '逆地理編碼查詢失敗!'],[3301400, '地理編碼查詢失敗!'],[3301500, '區域信息(包含國家碼)查詢失敗!'],[3301600, '地理圍欄操作失敗!'],]);return errorMessages.get(code) || defaultMsg;}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902782.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902782.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902782.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SSM從入門到上手-全面講解SSM框架的使用.

一、SSM框架整合 將Spring、Spring MVC和MyBatis結合在一起&#xff0c;形成一個高效且易于維護的Web應用程序架構。具體整合的方式如下&#xff1a; Spring管理Bean&#xff1a;Spring負責管理所有的Java對象&#xff0c;包括Service層、DAO層等。通過Spring的IoC容器進行依賴…

學員答題pk知識競賽小程序怎么做

制作學員答題PK知識競賽小程序&#xff0c;主要有以下步驟&#xff1a; 一、規劃設計 明確需求&#xff1a;確定小程序的使用場景是校園知識競賽、培訓機構考核還是企業內部培訓等。答題功能&#xff0c;規定答題的具體規則&#xff0c;包括題目類型&#xff08;單選、多選、…

視頻分析設備平臺EasyCVR視頻技術驅動下,監控上墻全組件解析與組網應用方案

隨著數字化進程的加速推進&#xff0c;視頻監控技術在工業、商業、社區等諸多領域得到了廣泛應用。盡管不同場景對監控功能的具體需求存在差異&#xff0c;但底層硬件架構具有顯著的共性特征。實際部署中&#xff0c;僅需依據網絡環境等實際情況&#xff0c;靈活調整設備的連接…

idea使用docker插件一鍵部署項目

一、首先保證我們電腦上已經安裝了docker docker -v查看docker版本&#xff0c;如果不能識別&#xff0c;需要先下載docker destop&#xff0c;在官網下載正常安裝即可。 安裝成功就可以使用docker 命令了 二、idea下載docker插件并配置docker參數 我是通過tcp連接docker服務…

SQL Tuning Advisor

什么是SQL Tuning Advisor STA可以用來優化那些已經被發現的高負載SQL. 默認情況下, Oracle數據庫在自動維護窗口中自動認證那些有問題的SQL并且執行優化建議&#xff0c;找尋提升高負載SQL執行計劃性能的方法. ** 如何查看自動優化維護窗口產生的報告? ** SQL> set ser…

uniapp-商城-31-shop頁面中的 我的訂單

前面的章節講了很多關于頁面 布局 的知識。 現在來看看其他欄目&#xff0c;我的訂單頁面。 1 頁面樣式圖 基本的樣式包含shop頁面 我的訂單 點擊我的訂單&#xff0c;跳轉到訂單頁面 點擊訂單的每一條訂單&#xff0c;跳轉到訂單詳情 2、創建訂單頁面 2.1 創建sub頁面文件…

深入探討JavaScript性能瓶頸與優化實戰指南

JavaScript作為現代Web開發的核心語言,其性能直接影響用戶體驗與業務指標。隨著2025年前端應用的復雜性持續增加,性能優化已成為開發者必須掌握的核心技能。本文將從性能瓶頸分析、優化策略、工具使用三個維度,結合實戰案例,系統梳理JavaScript性能優化的關鍵路徑。 一、Ja…

基于AI與drawio的圖表生成技術及其在學術研究中的應用前景分析

一、研究背景與沖突 在當今數字化時代&#xff0c;學術研究與信息傳播的方式發生了深刻變革。隨著數據量的爆炸式增長以及研究內容的日益復雜&#xff0c;高效、精準地呈現研究成果變得至關重要。圖表作為一種直觀、簡潔且信息承載量大的表達方式&#xff0c;在學術研究中扮演著…

uniapp 仿小紅書輪播圖效果

通過對小紅書的輪播圖分析&#xff0c;可得出以下總結&#xff1a; 1.單張圖片時容器根據圖片像素定高 2.多圖時輪播圖容器高度以首圖為錨點 3.比首圖長則固高左右留白 4.比首圖短則固寬上下留白 代碼如下&#xff1a; <template><view> <!--輪播--><s…

【ORACLE】記錄一些ORACLE的merge into語句的BUG

【ORACLE】記錄一些ORACLE的merge into語句的BUG 一、自相矛盾-DML重啟動行為差異,違反acid原則 發現版本&#xff1a;10g ~ 23ai 這個用例在我之前的文章里有提過&#xff0c;ORACLE和PG系關于并發事務行為有一個非常大的差異&#xff0c;就是ORACLE在某些并發沖突的場景下會…

2025上海車展:光峰科技全球首發“靈境”智能車載光學系統

當AI為光賦予思想&#xff0c;汽車將會變成什么樣&#xff1f;深圳光峰科技為您揭曉答案。 2025年4月23日&#xff0c;在剛剛開幕的“2025上海車展”上&#xff0c;全球領先的激光核心器件公司光峰科技舉辦了主題為“AI光影盛宴&#xff0c;智享未來出行”的媒體發布會&#x…

密碼學的hash函數,哈希碰撞, collision resistance, BTC用到的SHA-256簡介

密碼學中的哈希函數、哈希碰撞、抗碰撞性&#xff08;collision resistance&#xff09;以及比特幣中使用的 SHA-256 的簡明介紹&#xff1a; &#x1f9e9; 一、哈希函數&#xff08;Hash Function&#xff09; 定義&#xff1a; 哈希函數是一種將任意長度的輸入&#xff08;…

unity TEngine學習4

上一篇我們學習了UI部分&#xff0c;這一篇我們學習其他部分&#xff0c;按照老規矩還是先打開官方文檔 ResourceModule 在官方文檔里介紹了當前加載的設置&#xff0c;但是我們是小白看不懂&#xff0c;那就不管他內部怎么實現的&#xff0c;我們主要看下面的代碼給的方法&am…

【AI訓練環境搭建】在IDE(Pycharm或VSCode)上使用WSL2+Ubuntu22.04+Conda+Tensorflow+GPU進行機器學習訓練

本次實踐將在IDE&#xff08;Pycharm或VSCode&#xff09;上使用WSL2Ubuntu22.04TensorflowGPU進行機器學習訓練。基本原理是在IDE中拉起WSL2中的Python解釋器&#xff0c;并運行Python程序。要運行CondaTensorflowGPU你可能需要進行以下準備工作。 1. 此示例中將使用一個mnis…

【華為OD機試真題E卷】521、 機器人可活動的最大網格點數目 | 機試真題+思路參考+代碼解析(E卷復用)(C++)

文章目錄 一、題目題目描述輸入輸出樣例1 一、代碼與思路&#x1f9e0;C語言思路?C代碼 一、題目 參考鏈接&#xff1a;https://sars2025.blog.csdn.net/article/details/141748083 題目描述 現有一個機器人口&#xff0c;可放置于MxN的網格中任意位置&#xff0c;每個網格包…

windows端遠程控制ubuntu運行腳本程序并轉發ubuntu端腳本輸出的網頁

背景 對于一些只能在ubuntu上運行的腳本&#xff0c;并且這個腳本會在ubuntu上通過網頁展示運行結果。我們希望可以使用windows遠程操控ubuntu&#xff0c;在windows上查看網頁內容。 方法 start cmd.exe /k "sshpass -p passwd ssh namexxx.xxx.xxx.xxx "cd /hom…

Vue3集成瀏覽器API實時語音識別

效果示例 用法 <!-- 瀏覽器語音識別 --> <BrowserSpeechRecognitionModal v-if"showModal" :isOpen"showModal" close"showModal false" confirm"handleRecognitionResult" />const showModal ref(false); const input…

k8s 手動續訂證書

注意:如果是高可用環境,本文的操作需要在所有控制節點都執行。 查看證書是否過期 kubeadm certs check-expirationkubeadm certs renew可以續訂任何特定證書,或者使用子命令all可以續訂所有證書: kubeadm certs renew all使用 kubeadm 構建的集群通常會將admin.conf證書復…

每日一道leetcode(補充版)

1679. K 和數對的最大數目 - 力扣&#xff08;LeetCode&#xff09; 題目 給你一個整數數組 nums 和一個整數 k 。 每一步操作中&#xff0c;你需要從數組中選出和為 k 的兩個整數&#xff0c;并將它們移出數組。 返回你可以對數組執行的最大操作數。 示例 1&#xff1a; …

基于Keras3.x使用CNN實現簡單的貓狗分類

使用CNN實現簡單的貓狗分類 完整代碼見&#xff1a;基于Keras3.x使用CNN實現簡單的貓狗分類&#xff0c;置信度約為&#xff1a;85% 文章目錄 概述項目整體目錄環境版本注意 環境準備下載miniconda新建虛擬環境基于conda虛擬環境新建Pycharm項目下載分類需要用到的依賴 數據準備…