您可以通过Tair(企业版)的TairGIS结构,轻松实现基于点、线、面的用户轨迹监测。
背景信息
基于位置的服务LBS(Location Based Services)使用各种类型的定位技术来获取设备当前的所在位置,通过移动互联网向设备提供信息资源和基础服务。近年来,LBS技术已成为诸多行业应用与研究的热点,在很多应用中起到了举足轻重的作用。
Redis提供了Redis Geo功能,仅能查询点与点之间的关系,或者查询某半径范围内的点,整体精度较粗,可实现的功能也比较少。
相比较Redis Geo,Tair自研的GIS不仅支持点与点之间的查询,还支持点、线和多边形三者之间的相互查询,大大降低了LBS应用的开发成本。例如,当前常见的儿童和老人的电子围栏安全防护,是TairGIS的典型应用。
儿童电子围栏方案示例
方案概述:添加学校位置为电子围栏,若儿童在指定时间点离开学校区域时,则进行预警操作(通知监护人等)。
可通过GIS.ADD命令,将学校区域通过WKT(Well-known text)格式,存入GIS中,示例如下。
GIS.ADD test_app school_location 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'
获取目标位置,并判断是否在电子围栏内。
使用GPS定位目标位置
获取目标的当前GPS信息后,可以使用GIS.CONTAINS命令判断该坐标是否在电子围栏内,示例如下。
GIS.CONTAINS test_app 'POINT (40.086631 30.138141)'
通过运营商获取目标位置
由于运营商部署的基站密度不一定相同,您获取到的位置信息可能是该基站信号覆盖的整个区域,也可能是基站某方向的扇形区域,您可以将获取到的区域信息通过WKT描述为POLYGON(多边形),例如
POLYGON ((10 22, 30 45, 16 53, 10 22))
。获取后就可以使用GIS.CONTAINS命令该当前目标位置所在的基站区域是否与电子围栏有重叠,重叠表示目标仍在电子围栏内或电子围栏附近,不重叠则表示目标已离开电子围栏。
GIS.CONTAINS test_app 'POLYGON ((10 22, 30 45, 16 53, 10 22))'
您也可以通过GIS.WITHIN、GIS.INTERSECTS命令判断目标位置与电子围栏的关系,更多命令说明请参见GIS。
总结
使用Tair自研的GIS结构,可以方便地实现LBS应用的地理信息存储和计算,同时也能满足高并发场景对高性能的需求。