当前位置: 首页 > news >正文

【鸿蒙开发】第二十一章 Location位置服务

目录

1 简介

1.1 Location Kit简介

 1.2 运作机制

1.3 约束与限制

2 位置服务开发

2.1 申请位置权限开发指导

2.1.1 场景概述

2.2 获取设备的位置信息开发指导

2.2.1 场景概述

2.2.2 接口说明

2.2.3 开发步骤

2.3(逆)地理编码转化开发指导

2.3.1 场景概述

2.3.2 接口说明

2.3.3 开发步骤

2.4 地理围栏开发指导

2.4.2 接口说明

2.4.3 开发步骤 


1 简介

移动终端设备已经深入人们日常生活的方方面面,如查看所在城市的天气、新闻轶事、出行打车、旅行导航、运动记录。这些习以为常的活动,都离不开定位用户终端设备的位置。

当用户处于这些丰富的使用场景中时,系统的位置能力可以提供实时准确的位置数据。对于开发者,设计基于位置体验的服务,也可以使应用的使用体验更贴近每个用户。

当应用在实现基于设备位置的功能时,如:驾车导航,记录运动轨迹等,可以调用该模块的API接口,完成位置信息的获取。
 

1.1 Location Kit简介

位置子系统使用多种定位技术提供服务,如GNSS定位、基站定位、WLAN/蓝牙定位(基站定位、WLAN/蓝牙定位后续统称“网络定位技术”);通过这些定位技术,无论用户设备在室内或是户外,都可以准确地确定设备位置。

Location Kit除了提供基础的定位服务之外,还提供了地理围栏、地理编码、逆地理编码、国家码等功能和接口。

  • 坐标

系统以1984年世界大地坐标系统为参考,使用经度、纬度数据描述地球上的一个位置。

  • GNSS定位

基于全球导航卫星系统,包含:GPS、GLONASS、北斗、Galileo等,通过导航卫星、设备芯片提供的定位算法,来确定设备准确位置。定位过程具体使用哪些定位系统,取决于用户设备的硬件能力。

  • 基站定位

根据设备当前驻网基站和相邻基站的位置,估算设备当前位置。此定位方式的定位结果精度相对较低,并且需要设备可以访问蜂窝网络。

  • WLAN、蓝牙定位

根据设备可搜索到的周围WLAN、蓝牙设备位置,估算设备当前位置。此定位方式的定位结果精度依赖设备周围可见的固定WLAN、蓝牙设备的分布,密度较高时,精度也相较于基站定位方式更高,同时也需要设备可以访问网络。

 1.2 运作机制

位置能力作为系统为应用提供的一种基础服务,需要应用在所使用的业务场景,向系统主动发起请求,并在业务场景结束时,主动结束此请求,在此过程中系统会将实时的定位结果上报给应用。

1.3 约束与限制

使用设备的位置能力,需要用户进行确认并主动开启位置开关。如果位置开关没有开启,系统不会向任何应用提供定位服务。

设备位置信息属于用户敏感数据,所以即使用户已经开启位置开关,应用在获取设备位置前仍需向用户申请位置访问权限。在用户确认允许后,系统才会向应用提供定位服务。

2 位置服务开发

2.1 申请位置权限开发指导

2.1.1 场景概述

应用在使用Location Kit系统能力前,需要检查是否已经获取用户授权访问设备位置信息。如未获得授权,可以向用户申请需要的位置权限。

系统提供的定位权限有:

  • ohos.permission.LOCATION:用于获取精准位置,精准度在米级别。
  • ohos.permission.APPROXIMATELY_LOCATION:用于获取模糊位置,精确度为5公里。
  • ohos.permission.LOCATION_IN_BACKGROUND:用于应用切换到后台仍然需要获取定位信息的场景。

访问设备的位置信息,必须申请权限,并且获得用户授权。

当前位置相关能力仅支持WGS-84坐标系。

如果应用后台运行时也需要访问设备位置,需要申请ohos.permission.LOCATION_IN_BACKGROUND权限申请LOCATION类型的长时任务,这样应用在切入后台之后,系统可以继续上报位置信息。

应用如需使用ohos.permission.LOCATION_IN_BACKGROUND权限,需要在设置界面由用户手动授予,具体授权方式可参考ohos.permission.LOCATION_IN_BACKGROUND权限说明。

长时任务申请可参考长时任务。

开发者可以在应用配置文件中声明所需要的权限,具体可参考申请应用权限。

2.2 获取设备的位置信息开发指导

2.2.1 场景概述

开发者可以调用OpenHarmony位置相关接口,获取设备实时位置,或者最近的历史位置。

2.2.2 接口说明

对于位置敏感的应用业务,建议获取设备实时位置信息。如果不需要设备实时位置信息,并且希望尽可能的节省耗电,开发者可以考虑获取最近的历史位置。

2.2.3 开发步骤

1.  获取设备的位置信息,需要有位置权限,位置权限申请的方法和步骤见申请位置权限开发指导。

2.  导入geoLocationManager模块,所有与基础定位能力相关的功能API,都是通过该模块提供的。

import geoLocationManager from '@ohos.geoLocationManager';

3.  实例化LocationRequest对象,用于告知系统该向应用提供何种类型的定位服务,以及位置结果上报的频率。

1) 方式一
为了面向开发者提供贴近其使用场景的API使用方式,系统定义了几种常见的位置能力使用场景,并针对使用场景做了适当的优化处理,应用可以直接匹配使用,简化开发复杂度。系统当前支持场景如下表所示。

定位场景类型说明:

  • 导航场景:NAVIGATION

适用于在户外定位设备实时位置的场景,如车载、步行导航。
在此场景下,为保证系统提供位置结果精度最优,主要使用GNSS定位技术提供定位服务,结合场景特点,在导航启动之初,用户很可能在室内、车库等遮蔽环境,GNSS技术很难提供定位服务。
为解决此问题,我们会在GNSS提供稳定位置结果之前,使用系统网络定位技术,向应用提供定位服务,以在导航初始阶段提升用户体验。
此场景默认以最小1秒间隔上报定位结果,使用此场景的应用必须申请ohos.permission.LOCATION权限,同时获得用户授权。

  • 轨迹跟踪场景:TRAJECTORY_TRACKING

适用于记录用户位置轨迹的场景,如运动类应用记录轨迹功能。主要使用GNSS定位技术提供定位服务。
此场景默认以最小1秒间隔上报定位结果,并且应用必须申请ohos.permission.LOCATION权限,同时获得用户授权。

  • 出行约车场景:CAR_HAILING 

适用于用户出行打车时定位当前位置的场景,如网约车类应用。
此场景默认以最小1秒间隔上报定位结果,并且应用必须申请ohos.permission.LOCATION权限,同时获得用户授权。

  • 生活服务场景:DAILY_LIFE_SERVICE 

生活服务场景,适用于不需要定位用户精确位置的使用场景,如新闻资讯、网购、点餐类应用,做推荐、推送时定位用户大致位置即可。
此场景默认以最小1秒间隔上报定位结果,并且应用至少申请ohos.permission.LOCATION权限,同时获得用户授权。

  • 无功耗场景:NO_POWER 

无功耗场景,适用于不需要主动启动定位业务。系统在响应其他应用启动定位业务并上报位置结果时,会同时向请求此场景的应用程序上报定位结果,当前的应用程序不产生定位功耗。
此场景默认以最小1秒间隔上报定位结果,并且应用需要申请ohos.permission.LOCATION权限,同时获得用户授权。

export enum LocationRequestScenario {UNSET = 0x300,NAVIGATION,TRAJECTORY_TRACKING,CAR_HAILING,DAILY_LIFE_SERVICE,NO_POWER,}

 以导航场景为例,实例化方式如下:

let requestInfo:geoLocationManager.LocationRequest = {'scenario': geoLocationManager.LocationRequestScenario.NAVIGATION, 'timeInterval': 0, 'distanceInterval': 0, 'maxAccuracy': 0};

2) 方式二
如果定义的现有场景类型不能满足所需的开发场景,系统提供了基本的定位优先级策略类型。

定位优先级策略类型说明:

  • 定位精度优先策略:ACCURACY

定位精度优先策略主要以GNSS定位技术为主,在开阔场景下可以提供米级的定位精度,具体性能指标依赖用户设备的定位硬件能力,但在室内等强遮蔽定位场景下,无法提供准确的定位服务。

  • 快速定位优先策略:FIRST_FIX

快速定位优先策略会同时使用GNSS定位、基站定位和WLAN、蓝牙定位技术,以便室内和户外场景下,通过此策略都可以获得位置结果,当各种定位技术都有提供位置结果时,系统会选择其中精度较好的结果返回给应用。因为对各种定位技术同时使用,对设备的硬件资源消耗较大,功耗也较大。

  • 低功耗定位优先策略:LOW_POWER

低功耗定位优先策略主要使用基站定位和WLAN、蓝牙定位技术,也可以同时提供室内和户外场景下的定位服务,因为其依赖周边基站、可见WLAN、蓝牙设备的分布情况,定位结果的精度波动范围较大,如果对定位结果精度要求不高,或者使用场景多在有基站、可见WLAN、蓝牙设备高密度分布的情况下,推荐使用,可以有效节省设备功耗。

export enum LocationRequestPriority {UNSET = 0x200,ACCURACY,LOW_POWER,FIRST_FIX,}

 以定位精度优先策略为例,实例化方式如下:

let requestInfo:geoLocationManager.LocationRequest = {'priority': geoLocationManager.LocationRequestPriority.ACCURACY, 'timeInterval': 0, 'distanceInterval': 0, 'maxAccuracy': 0};

4.  实例化Callback对象,用于向系统提供位置上报的途径。 应用需要自行实现系统定义好的回调接口,并将其实例化。系统在定位成功确定设备的实时位置结果时,会通过该接口上报给应用。应用程序可以在接口的实现中完成自己的业务逻辑。

let locationChange = (location:geoLocationManager.Location):void => {console.log('locationChanger: data: ' + JSON.stringify(location));
};

5.  启动定位。

geoLocationManager.on('locationChange', requestInfo, locationChange);

6.(可选)结束定位。

如果不主动结束定位可能导致设备功耗高,耗电快;建议在不需要获取定位信息时及时结束定位。

geoLocationManager.off('locationChange', locationChange);

如果应用使用场景不需要实时的设备位置,可以获取系统缓存的最近一次历史定位结果。

import geoLocationManager from '@ohos.geoLocationManager';
import BusinessError from "@ohos.base";
try {let location = geoLocationManager.getLastLocation();
} catch (err) {console.error("errCode:" + (err as BusinessError.BusinessError).code + ",errMessage:" + (err as BusinessError.BusinessError).message);
}

2.3(逆)地理编码转化开发指导

2.3.1 场景概述

使用坐标描述一个位置,非常准确,但是并不直观,面向用户表达并不友好。系统向开发者提供了以下两种转化能力。

  • 地理编码转化:将地理描述转化为具体坐标。
  • 逆地理编码转化能力:将坐标转化为地理描述。

其中地理编码包含多个属性来描述位置,包括国家、行政区划、街道、门牌号、地址描述等等,这样的信息更便于用户理解。

2.3.2 接口说明

进行坐标和地理编码信息的相互转化,所使用的接口说明如下。

​​​​​​​

2.3.3 开发步骤

说明: GeoConvert需要访问后端服务,请确保设备联网,以进行信息获取。

1.  导入geoLocationManager模块,所有与(逆)地理编码转化能力相关的功能API,都是通过该模块提供的。

import geoLocationManager from '@ohos.geoLocationManager';

2.  查询geoCoder服务是否可用。

  • 调用isGeoServiceAvailable查询geoCoder服务是否可用,如果服务可用再继续进行步骤3。
import geoLocationManager from '@ohos.geoLocationManager';
import BusinessError from "@ohos.base";
try {let isAvailable = geoLocationManager.isGeocoderAvailable();
} catch (err) {console.error("errCode:" + (err as BusinessError.BusinessError).code + ",errMessage:" + (err as BusinessError.BusinessError).message);
}

3.  获取转化结果。

  • 调用getAddressesFromLocation,坐标转化地理位置信息。
let reverseGeocodeRequest:geoLocationManager.ReverseGeoCodeRequest = {"latitude": 31.12, "longitude": 121.11, "maxItems": 1};
try {geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest, (err, data) => {if (err) {console.log('getAddressesFromLocation err: ' + JSON.stringify(err));} else {console.log('getAddressesFromLocation data: ' + JSON.stringify(data));}});
} catch (err) {console.error("errCode:" + (err as BusinessError.BusinessError).code + ",errMessage:" + (err as BusinessError.BusinessError).message);
}

 参考接口API说明Location Kit,应用可以获得与此坐标匹配的GeoAddress列表,应用可以根据实际使用需求,读取相应的参数数据。

  • 调用getAddressesFromLocationName位置描述转化坐标。
let geocodeRequest:geoLocationManager.GeoCodeRequest = {"description": "上海市浦东新区xx路xx号", "maxItems": 1};
try {geoLocationManager.getAddressesFromLocationName(geocodeRequest, (err, data) => {if (err) {console.log('getAddressesFromLocationName err: ' + JSON.stringify(err));} else {console.log('getAddressesFromLocationName data: ' + JSON.stringify(data));}});
} catch (err) {console.error("errCode:" + (err as BusinessError.BusinessError).code + ",errMessage:" + (err as BusinessError.BusinessError).message);
}

参考接口API说明Location Kit,应用可以获得与位置描述相匹配的GeoAddress列表,其中包含对应的坐标数据,请参考API使用。

如果需要查询的位置描述可能出现多地重名的请求,可以设置GeoCodeRequest,通过设置一个经纬度范围,以高效地获取期望的准确结果。

2.4 地理围栏开发指导

地理围栏就是虚拟地理边界,当设备进入、离开某个特定地理区域时,可以接收自动通知和警告。

目前仅支持圆形围栏,并且依赖GNSS芯片的地理围栏功能。

应用场景举例:开发者可以使用地理围栏,在企业周围创建一个区域进行广告定位,在不同的地点,在移动设备上进行有针对性的促销优惠。

2.4.2 接口说明

地理围栏所使用的接口如下,详细说明参见:Location Kit。

2.4.3 开发步骤 

使用地理围栏功能,需要有权限ohos.permission.APPROXIMATELY_LOCATION,位置权限申请的方法和步骤见申请位置权限开发指导。

1.  导入geoLocationManager模块、wantAgent模块和BusinessError模块。

import geoLocationManager from '@ohos.geoLocationManager';
import wantAgent, {WantAgent as _wantAgent} from '@ohos.app.ability.wantAgent';
import BusinessError from "@ohos.base";

2.  创建WantAgentInfo信息。

  • 场景一:创建拉起AbilityWantAgentInfo信息。
let wantAgentObj:_wantAgent|null = null; // 用于保存创建成功的wantAgent对象,后续使用其完成触发的动作。// 通过WantAgentInfo的operationType设置动作类型
let wantAgentInfo:wantAgent.WantAgentInfo = {wants: [{deviceId: '',bundleName: 'com.example.myapplication',abilityName: 'EntryAbility',action: '',entities: [],uri: '',parameters: {}}],operationType: wantAgent.OperationType.START_ABILITY,requestCode: 0,wantAgentFlags:[wantAgent.WantAgentFlags.CONSTANT_FLAG]
};
  • 场景二:创建发布公共事件的WantAgentInfo信息。
let wantAgentObj:_wantAgent|null = null; // 用于保存创建成功的WantAgent对象,后续使用其完成触发的动作。// 通过WantAgentInfo的operationType设置动作类型
let wantAgentInfo:wantAgent.WantAgentInfo = {wants: [{action: 'event_name', // 设置事件名parameters: {},}],operationType: wantAgent.OperationType.SEND_COMMON_EVENT,requestCode: 0,wantAgentFlags: [wantAgent.WantAgentFlags.CONSTANT_FLAG],
}

4.  调用getWantAgent()方法进行创建WantAgent

并且在获取到WantAgent对象之后调用地理围栏接口添加围栏,当设备进入或者退出该围栏时,系统会自动触发WantAgent的动作。

// 创建WantAgent
wantAgent.getWantAgent(wantAgentInfo, (err, data) => {if (err) {console.error('getWantAgent err=' + JSON.stringify(err));return;}console.info('getWantAgent success');wantAgentObj = data;let requestInfo:geoLocationManager.GeofenceRequest = {'scenario': 0x301, "geofence": {"latitude": 31.12, "longitude": 121.11, "radius": 100, "expiration": 10000}};try {geoLocationManager.on('gnssFenceStatusChange', requestInfo, wantAgentObj);} catch (err) {console.error("errCode:" + (err as BusinessError.BusinessError).code + ",errMessage:" + (err as BusinessError.BusinessError).message);}
});

参考文献:
[1]OpenHarmoney应用开发文档

相关文章:

【鸿蒙开发】第二十一章 Location位置服务

目录 1 简介 1.1 Location Kit简介 1.2 运作机制 1.3 约束与限制 2 位置服务开发 2.1 申请位置权限开发指导 2.1.1 场景概述 2.2 获取设备的位置信息开发指导 2.2.1 场景概述 2.2.2 接口说明 2.2.3 开发步骤 2.3(逆)地理编码转化开发指导 2.…...

《目标检测》R-CNN网络基础(RCNN,Fast-RCNN)

文章目录 1.Overfeat模型2.RCNN网络2.1 算法流程2.1.1 候选区域的生成(了解,已经不再使用了)2.1.2 CNN网络提取特征2.1.3 目标分类(SVM)2.1.4 目标回归(线性回归修正坐标)2.1.5 预测过程 2.2 算…...

iOS中的定位实现(逆地理编码)及Info.plist位置权限详解

引言 在现代移动应用开发中,位置服务已经成为不可或缺的一部分。无论是地图导航、社交分享,还是基于位置的个性化推荐,位置数据都为用户提供了更加丰富和智能的体验。然而,随着用户隐私保护的不断加强,iOS对位置权限的…...

【从零开始的LeetCode-算法】3270. 求出数字答案

给你三个 正 整数 num1 &#xff0c;num2 和 num3 。 数字 num1 &#xff0c;num2 和 num3 的数字答案 key 是一个四位数&#xff0c;定义如下&#xff1a; 一开始&#xff0c;如果有数字 少于 四位数&#xff0c;给它补 前导 0 。答案 key 的第 i 个数位&#xff08;1 < …...

Web认证机制 Cookie、Token、Session、JWT、OAuth2 解析

标题 一、Cookie二、Session三、Token四、JWTSSO&#xff08;单点登录&#xff09; 五、OAuth2如何设计权限系统区别总结 Cookie、Token、Session 和 JWT 都是在 Web 开发中常用的身份验证和授权技术&#xff0c;它们各有优缺点&#xff0c;适用于不同的场景。 Cookie 简单易用…...

Docker 基础命令介绍和常见报错解决

介绍一些 docker 可能用到的基础命令&#xff0c;并解决三个常见报错&#xff1a; 权限被拒绝&#xff08;Permission Denied&#xff09;无法连接到 Docker 仓库&#xff08;Timeout Exceeded&#xff09;磁盘空间不足&#xff08;No Space Left on Device&#xff09; 命令以…...

如何轻松导出所有 WordPress URL 为纯文本格式

作为一名多年的 WordPress 使用者&#xff0c;我深知管理一个网站的复杂性。从迁移网站、设置重定向到整理内容结构&#xff0c;每一步都需要精细处理。而拥有所有 URL 的清单&#xff0c;不仅能让这些工作变得更加简单&#xff0c;还能为后续的管理提供极大的便利。其实&#…...

【进程概念精讲】

Susan,在那命运月台前面&#xff0c;再上车&#xff0c;春天开始落叶.................................................................. 文章目录 前言 一、【认识进程】 1、【进程基本概念引入】 2、【进程的描述与组织——进程控制块&#xff08;PCB&#xff09;与进程…...

帽子矩阵--记录

帽子矩阵 H是一个重要的统计工具&#xff0c;用于评估数据点对模型拟合结果的影响。通过计算帽子矩阵的对角线元素&#xff08;杠杆值&#xff09;&#xff0c;我们可以识别出高杠杆点&#xff0c;这些点对模型的影响较大&#xff0c;可能需要特别关注。...

MySQL深入:B+树的演化、索引和索引结构

提示&#xff1a;内容是读《MySQL技术内幕&#xff1a;InnoDB存储引擎》&#xff0c;笔记摘要 文章目录 二叉查找树平衡二叉树(AVL) B树(BTree)B树(BTree)InnoDB B树索引索引结构&#xff08;InnoDB B树&#xff09;B树存放的数据量 二叉查找树 在二叉查找树中&#xff0c;左子…...

axios 实现 无感刷新方案

实现思路 首次登录前端通过接口获取到两个 token&#xff1b;分别是 accessToken、refreshToken; accessToken&#xff1a;正常请求需要传递的 token &#xff1b;refreshToken&#xff1a;当某个请求 401 &#xff0c;就可以通过 refreshToken 获取到新的 accessToken 特殊场…...

Python 三种方式实现自动化任务

在这篇文章中&#xff0c;我们将介绍一些用Python实现机器人过程自动化的包。机器人流程自动化&#xff08;Robotic process automation&#xff0c;简称RPA&#xff09;是指将鼠标点击和键盘按压自动化的过程&#xff0c;即模拟人类用户的操作。RPA用于各种应用程序&#xff0…...

新型创业模式:退休创业。没有工资,不用投资,有时间就干,不强制做,赚钱按贡献分。

这种“退休创业”的创业模式具有独特的吸引力和灵活性&#xff0c;适合那些已退休但希望继续贡献社会价值、赚取额外收入且无需承担太多责任的群体。以下是一个详细的设计思路&#xff1a; 模式概述 目标人群&#xff1a;退休人员&#xff0c;具有一定技能或经验&#xff0c;但…...

Android 项目依赖库无法找到的解决方案

目录 错误信息解析 解决方案 1. 检查依赖版本 2. 检查 Maven 仓库配置 3. 强制刷新 Gradle 缓存 4. 检查网络连接 5. 手动下载依赖 总结 相关推荐 最近&#xff0c;我在编译一个 Android 老项目时遇到了一个问题&#xff0c;错误信息显示无法找到 com.gyf.immersionba…...

在Node.js中如何使用TypeScript

第一步&#xff1a;创建一个Node.js项目的package.json文件 npm init -y第二步&#xff1a;添加TypeScript、添加node.d.ts npm install typescript -D npm install types/node -D第三步&#xff1a;初始化一个tsconfig.json文件 npx tsc --init --rootDir src --outDir lib…...

链表两数加python

一、问题描述 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个…...

免费的可以薅羊毛的cloudflare反向代理教程

cloudflare-reverse-proxy 项目代码: https://github.com/EASTCATV/cloudflare-reverse-proxy 本项目是cloudflare反向代理。在cloudflare网站中新建worker&#xff0c;把worker.js文件中的内容复制进去即可使用。 使用方法为在任意url前面加上https://你的域名/proxy/ 即可…...

【每日刷题】Day155

【每日刷题】Day155 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. LCR 108. 单词接龙 - 力扣&#xff08;LeetCode&#xff09; 2. 675. 为高尔夫球比赛砍树 - 力扣(…...

EXCEL延迟退休公式

如图&#xff1a; A B为手工输入 C2EOMONTH(A2,B2*12) D2EOMONTH(C2,IF(C2>DATEVALUE("2025-1-1"),INT((DATEDIF(DATEVALUE("2025-1-1"),C2,"m")4)/4),0)) E2EOMONTH(A2,B2*12IF(EOMONTH(A2,B2*12)>DATEVALUE("2025-1-1"),INT(…...

开源对象存储新选择:在Docker上部署MinIO并实现远程管理

文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器&#xff0c;可以在各种环境中运行&#xff0c;例如本地、Docker容器、Kubernetes集群等。它兼…...

STM32 ADC实战避坑:轮询、中断、DMA到底怎么选?我的项目血泪经验

STM32 ADC实战避坑&#xff1a;轮询、中断、DMA到底怎么选&#xff1f;我的项目血泪经验 在嵌入式开发中&#xff0c;ADC&#xff08;模数转换器&#xff09;是连接模拟世界与数字世界的关键桥梁。无论是电池电压监测、环境光传感还是工业控制中的各种模拟量采集&#xff0c;AD…...

基于VSCode Remote-SSH的嵌入式Linux开发环境配置与实战

1. 嵌入式开发流程的痛点与优化思路 作为一名在嵌入式行业摸爬滚打了十多年的老工程师&#xff0c;我太清楚传统开发流程里那些让人头疼的环节了。我们最熟悉的模式&#xff0c;就是在PC上写好代码&#xff0c;用交叉编译工具链生成目标板&#xff08;比如ARM架构的开发板&…...

从防御者视角看Fastjson 1.2.24漏洞:如何用Docker+vulhub快速搭建靶场并验证修复方案

防御视角下的Fastjson 1.2.24漏洞实战&#xff1a;Docker靶场搭建与修复方案验证 在当今的软件开发中&#xff0c;JSON处理库的安全性问题日益凸显。作为Java生态中最流行的JSON库之一&#xff0c;Fastjson因其高性能而广受欢迎&#xff0c;但同时也因其历史漏洞频发而备受关注…...

CS188 Note3 学习笔记

更好的阅读体验 Informed Search(启发式搜索) 原文解释 If we have some notion of the direction in which we should focus our search, we can significantly improve performance and “hone in” on a goal much more quickly. This is exactly the focus of informed …...

某大厂尽调底稿又“裸奔”了?干了8年审计,我劝你把连网的AI停掉

上周圈子里那个因为把客户未公开的财务底稿传给某在线AI、导致重组项目提前泄露的瓜&#xff0c;估计大家都吃到了。虽然通报里只写了“某员工违规操作”&#xff0c;但我们私底下聊起来全是后怕。干金融审计第八年&#xff0c;我太懂那种窒息感了。每天都在高压线的边缘试探&a…...

为内部工具集成大模型能力时如何选择与接入 Taotoken

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为内部工具集成大模型能力时如何选择与接入 Taotoken 在企业内部开发数据分析、客服助手、代码生成等工具时&#xff0c;引入大模型…...

从STM32到RISC-V:如何快速将你的4P OLED驱动移植到CH32V307上

从STM32到RISC-V&#xff1a;如何快速将你的4P OLED驱动移植到CH32V307上 对于习惯了STM32标准库开发的工程师来说&#xff0c;第一次接触RISC-V架构的CH32V307系列时&#xff0c;最迫切的需求往往是如何快速复用现有的硬件驱动代码。本文将聚焦4P OLED屏幕的驱动移植&#xff…...

保姆级教程:用Wireshark抓包搞定Velodyne VLP-16激光雷达的IP配置与网络调试

从数据包到点云&#xff1a;Wireshark深度解析Velodyne VLP-16网络配置全流程 当你第一次拿到Velodyne VLP-16激光雷达时&#xff0c;那种兴奋感很快会被网络配置的挫败感取代——明明按照教程设置了IP&#xff0c;却始终ping不通设备&#xff0c;浏览器访问后台更是天方夜谭。…...

Anubis质检报告XTR文件:从数据字段到质量评估的实战解析

1. XTR文件基础&#xff1a;GNSS质检报告的核心载体 第一次拿到Anubis生成的XTR文件时&#xff0c;我盯着满屏的缩写和数据愣了半天。这种看似晦涩的文本文件&#xff0c;实际上是GNSS数据质量的"体检报告单"。就像医院的血常规化验单需要专业解读一样&#xff0c;XT…...

挤馅机性价比选择:企业采购决策关键因素深度解析

挤馅机性价比选择&#xff1a;企业采购决策关键因素深度解析“选挤馅机只看价格&#xff1f;错&#xff01;挤馅机性价比的核心是‘长期使用成本’而非‘单次采购价’”企业采购挤馅机时&#xff0c;常陷入“价格越低越划算”的误区&#xff0c;却忽略了后期维护、产能波动等隐…...