@awarns/geofencing
AwarNS 框架包,启用地理围栏近距离检测
npm i --save @awarns/geofencing

@awarns/geofencing

npm (scoped) npm

此模块允许根据在@awarns/geolocation包中声明的任务获取的位置执行基于基本地理围栏分析的。它还兼容任何其他符合GeolocationLike接口的定制实体(例如,由定制室内定位系统产生的实体)。

此包内部的地理围栏机制允许检测对已注册兴趣区域的多个接近程度。

使用以下命令行指令安装插件

ns plugin add @awarns/geofencing

用法

安装并配置此插件后,您将获得两种交互机制来与之交互

  1. 插件 API。通过它,您将能够配置和更新与应用程序相关的相关兴趣区域。
  2. 地理围栏任务,允许检测刚刚获取的位置是否接近一个或多个已注册的兴趣区域。当检测到接近度变化时,此任务将发出以下描述的AoIProximityChange记录。

API

areasOfInterest

areasOfInterest单例对象是主要插件入口点。通过它,您可以设置和管理兴趣区域。这是完整的 API

方法 返回类型 描述
insert(aois: Array<AreaOfInterest>) Promise<void> 将给定的兴趣区域列表插入到本地数据库中。有关AreaOfInterest接口的详细信息,请参见下表
getById(id: string) Promise<AreaOfInterest> 允许通过其 id 检索存储的兴趣区域
getAll() Promise<Array<AreaOfInterest>> 允许一次性检索所有存储的兴趣区域
list() Observable<Array<AreaOfInterest>> 允许观察所有存储的兴趣区域的变化。建议安装 RxJS 包以操作此方法的输出
deleteAll() Promise<void> 允许一次性清除所有存储的兴趣区域

AreaOfInterest

属性 类型 描述
id string 区域的唯一标识符
name string 区域的显示名称
longitude number 区域中心的经度
latitude number 区域中心的纬度
radius number 从中心的经纬度计算的区域半径
category string (可选) 自由文本字段,可以用于将区域分类到任意类别
level number (可选) 可以用于对区域进行排名

任务

任务名称 描述
checkAreaOfInterestProximity 给定一个或多个包含在触发任务的事件的负载中的位置,此任务检查它们相对于一组已注册兴趣区域的接近程度
filterGeolocationByAoIProximity 给定一个或多个包含在事件调用任务有效载荷中的位置,该任务将检查它们与一组注册的兴趣区域之间的邻近度,并且只输出那些位于附近或在其半径内的区域

检查兴趣区域邻近度

要注册此任务以供使用,您只需将其导入并在应用程序的任务列表中调用其生成器函数即可

import { Task } from '@awarns/core/tasks';
import { checkAreaOfInterestProximityTask } from '@awarns/geofencing';

export const demoTasks: Array<Task> = [
checkAreaOfInterestProximityTask(),
];

任务生成器参数

任务生成器不接收任何参数。

任务输出事件

在应用程序任务图中示例使用

on(
'startEvent',
run('acquirePhoneGeolocation')
.every(1, 'minutes')
.cancelOn('stopEvent')
);

on(
'geolocationAcquired',
run('checkAreaOfInterestProximity', {
nearbyRange: 100, // Area approximation radius, in meters (defaults to 100)
offset: 15, // Optional distance calculation offset, in meters. Can help mitigating location error (defaults to 0)
})
);

on('movedCloseToAreaOfInterest', run('writeRecords'));
on('movedInsideAreaOfInterest', run('writeRecords'));
on('movedOutsideAreaOfInterest', run('writeRecords'));
on('movedAwayFromAreaOfInterest', run('writeRecords'));

注意:要使用 acquirePhoneGeolocationwriteRecords 任务,必须安装并配置地理位置和持久化包。请参阅 地理位置包持久化包 文档。

基于兴趣区域邻近度过滤地理位置

要注册此任务以供使用,您只需将其导入并在应用程序的任务列表中调用其生成器函数即可

import { Task } from '@awarns/core/tasks';
import { filterGeolocationByAoIProximityTask } from '@awarns/geofencing';

export const demoTasks: Array<Task> = [
filterGeolocationByAoIProximityTask(),
];

任务生成器参数

任务生成器不接收任何参数。

任务输出事件

在应用程序任务图中示例使用

on(
'startEvent',
run('acquirePhoneGeolocation')
.every(1, 'minutes')
.cancelOn('stopEvent')
);

on(
'geolocationAcquired',
run('filterGeolocationByAoIProximity', {
nearbyRange: 100, // Area approximation radius, in meters (defaults to 100)
offset: 15, // Optional distance calculation offset, in meters. Can help mitigating location error (defaults to 0)
includeNearby: true // Optional indicate if points nearby an area should be taken into consideration (defaults to false)
})
);

on('geolocationCloseToAoIAcquired', run('writeRecords')); // Just write the locations captured nearby an area of interest

注意:要使用 acquirePhoneGeolocationwriteRecords 任务,必须安装并配置地理位置和持久化包。请参阅 地理位置包持久化包 文档。

事件

名称 有效载荷 描述
movedCloseToAreaOfInterest Array<AoIProximityChange> 检测到给定位置之一或多个代表对已注册兴趣区域周边的近似。近似半径可以在应用程序工作流中配置。请参阅下表中的示例
movedInsideAreaOfInterest Array<AoIProximityChange> 检测到给定位置之一或多个刚刚位于一个或多个注册区域中心和它们的半径之间
movedOutsideAreaOfInterest Array<AoIProximityChange> 检测到给定位置之一或多个刚刚位于一个或多个区域半径之外,但仍然在它们的近似半径内。如果有位置仍然在区域内部,则不会触发此事件
movedAwayFromAreaOfInterest Array<AoIProximityChange> 检测到给定位置之一或多个刚刚完全位于一个或多个区域近似半径之外。如果有位置仍然在区域近似半径内,则不会触发此事件
geolocationCloseToAoIAcquired 'Geolocation' | 'Array' 一个或多个通过兴趣区域过滤的位置或位置列表(附近或位于已知区域内部)

记录

AoIProximityChange

属性 类型 描述
id string 记录的唯一ID
类型 string 始终 aoi-proximity-change
更改 更改 可以是 startend。前者表示过渡到记录指示的邻近度,而后者表示不再处于报告的邻近度级别
时间戳 日期 检测到邻近度变化时的本地时间
aoi AreaOfInterest 检测到邻近度变化兴趣区域
邻近度 GeofencingProximity 表示相对于区域的相对邻近度。查看更改属性以确定更改是朝向邻近度还是相反。查看以下所有邻近度选项

GeofencingProximity

选项 描述
INSIDE 一个或多个位置位于区域的中心和半径内
NEARBY 一个或多个位置位于区域中心和半径之外,但位于其近似半径内
OUTSIDE 一个或多个位置完全位于区域和其近似半径之外。此选项永远不会在 AoIProximityChange 记录中使用

许可证

Apache License Version 2.0