云数据库 Redis 使用TairGIS实现用户轨迹监测

By | 2021年4月22日

您可以通过云数据库Redis企业版的TairGIS结构,实现基于点、线、面的用户轨迹监测。

背景信息

基于位置的服务LBS(Location Based Services)使用各种类型的定位技术来获取设备当前的所在位置,通过移动互联网向设备提供信息资源和基础服务。近年来,LBS技术已成为诸多行业应用与研究的热点,在很多应用中起到了举足轻重的作用。

2020年的新冠病毒疫情给全中国乃至世界人民的生命健康带来了巨大威胁,为世界按下了暂停键。中国举全国之力才基本控制住疫情的进一步扩散,暂停的城市开始慢慢复苏,各行各业开始逐步复工、复产、复学。当中国的疫情得到控制时,全球疫情尚未出现拐点,防控形势依然严峻。如果能通过LBS实现用户轨迹监测,不仅可以有效识别风险、保障人群的安全,还可以更好地进行流行病学调查。

云Redis社区版同原生Redis一样,支持Redis Geo命令,可用于描述位置信息,在LBS类应用中能起到一定的作用,但其精度有限,功能较少。相比之下,云Redis企业版(Tair)性能增强系列的TairGIS命令则拥有更全面的功能。

TairGIS是一种使用R-Tree做索引,支持地理信息系统GIS(Geographic Information System)相关接口的数据结构。Redis的原生GEO命令是使用GeoHash和Redis Sorted Set结构完成的,使用1D索引,主要用于点的查询;TairGIS使用2D索引,除了对点的查询,还支持线、面的查询,尤其适合用于判断相交或包含关系,功能更加强大。

TairGIS可以大大降低LBS应用的开发成本。目前常见的儿童和老人的电子围栏安全防护系统,也是TairGIS的典型应用之一。

实现方案

要监测固定人群的行为轨迹,首先要获取用户位置,主要有两种实现方案:

  • 用户在手机上主动开启GPS,通过手机GPS定位确定用户位置。
  • 与运营商合作确定用户位置。

在类似疫情控制的场景中,监测轨迹的目的是确定用户是否到过某些危险区域,例如疫情高发区等,因此一般无需存储用户的历史轨迹信息,只需要在用户进入到危险区域时报警即可,这也在最大程度上保护了用户隐私。

危险区域可以使用WKT(Well-known text)描述为多边形,保存在TairGIS数据中。用户的轨迹可以用WKT描述成点、线或者多边形,同样保存在TairGIS数据中。之后,使用TairGIS命令即可查询用户轨迹和危险区域的交汇情况,从而判断用户是否经过了危险区域。

说明 WKT是一种文本标记语言,用于描述矢量几何对象、空间参照系统及空间参照系统之间的转换。

轨迹交汇示例

使用GPS定位或者通过运营商获取用户位置信息后的业务处理方式有所不同,下文将通过示例详细说明。

方案示例

  • 使用GPS定位用户位置

    获取用户当前的GPS信息后,可以使用TairGIS的GIS.CONTAINS命令确认该点是否在危险范围内。如果用户在道路上,还可以通过GPS信息匹配道路信息,再使用GIS.INTERSECTS命令确认用户是否即将进入危险区域,实现预警。

    用户的GPS信息可以通过WKT描述为POINT(点),例如
    POINT(30 11) 。道路信息可以通过WKT描述为LINESTRING(线),例如
    LINESTRING (30 10, 40 40)。下方的示例代码可以帮助您更好地理解业务的实现逻辑。

    GIS.ADD your_province your_location 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))' //获取用户GPS信息后将其添加到TairGIS中。
    GIS.CONTAINS your_province 'POINT (30 11)' 
    GIS.INTERSECTS your_province 'LINESTRING (30 10, 40 40)'

  • 通过运营商获取用户位置

    如果和运营商合作来获取位置信息,在运营商基站部署不密集的地区,获取到的信息一般是一片区域,可能是整个基站的信号覆盖区域,或者基站某方向的扇形区域,该区域通过WKT描述为POLYGON(多边形),例如POLYGON ((10 22, 30 45, 16 53, 10 22))。之后就可以使用GIS.INTERSECTS命令把该多边形的信息与危险区域进行交汇分析,如下方的示例代码所示。

    GIS.ADD your_province your_location 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))' //通过运营商基站获取用户位置信息后将其添加到TairGIS中。
    GIS.INTERSECTS your_province 'POLYGON ((10 22, 30 45, 16 53, 10 22))'
说明 更多TairGIS命令的说明请参见
TairGIS命令

总结

使用云Redis企业版性能增强系列的TairGIS结构,LBS应用可以方便地实现地理信息相关的存储和计算,同时也能满足大并发场景对高性能的需求。

请关注公众号获取更多资料

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注