基于Kafka和Redis的准实时目标航迹显示方法与流程

    专利2022-07-08  95


    本发明涉及目标航迹显示技术领域,尤其涉及基于kafka和redis的准实时目标航迹显示方法。



    背景技术:

    现有的实时目标航迹显示系统需要同时实现航迹的接收、缓存、加工处理、图形化显示以及用户交互,往往采用较笨重的系统架构,对系统硬件资源要求较高、软件较难维护和部署。



    技术实现要素:

    本发明所解决的技术问题在于提供基于kafka和redis的准实时目标航迹显示方法,该方法通过kafka和redis中间件处理实时目标航迹数据并采用前后端分类的方式显示实时航迹和历史航迹,具有轻量的系统架构和简单的处理步骤,适用于各种航迹数据处理显示的场合。

    本发明提供的基于kafka和redis的准实时目标航迹显示方法,包括以下步骤:

    步骤1,构建前端显示程序和后端处理服务,在所述后端处理服务中构建目标航迹点数据结构,用于存储目标航迹点数据;具体的,本发明中,可以采用b/s或c/s软件架构构建前端显示程序和后端处理服务。

    步骤2,在redis服务中构建目标航迹数据存储类型,用于存储不同类型的目标航迹点数据;本发明中,所述前端显示程序负责信息显示,所述后端处理服务处理数据。后端处理服务将处理好的数据写入redis服务中,前端显示程序从redis中读取处理好的数据并显示。

    步骤3,在所述后端处理服务中建立kafka消费线程,用于实时获取kafka消息队列内部的目标航迹原始数据,所述目标航迹原始数据中包含目标基础信息和航迹参数信息;本发明中,所述kafka数据由外部系统提供的kafka数据生产服务写入kafka消息队列中。

    步骤4,建立异步线程,用于处理所述目标航迹原始数据;

    步骤5,在所述异步线程中解析目标航迹原始数据,并将所述目标航迹原始数据转换为多个目标航迹点数据,所述多个目标航迹点数据中包含不同目标的不同航迹点实时信息;

    步骤6,根据所述多个目标航迹点数据,更新所述redis服务中的每一类型的目标航迹点数据;

    步骤7,所述前端显示程序根据筛选条件定时获取redis服务中的不同类型的目标航迹点数据,对所述目标航迹点数据解析后,在地理信息系统图层上显示最新目标位置信息和航迹路径信息。

    进一步地,在一种实现方式中,所述目标航迹点数据结构中包含目标航迹唯一标识、目标航迹点唯一标识、位置信息数据、运动状态信息、时间信息和目标基本属性信息。

    进一步地,在一种实现方式中,所述步骤2中,在所述redis服务中构建的目标航迹数据存储类型,包括字符串类型、哈希类型和链表类型;具体的,本发明中,所述字符串类型、哈希类型和链表类型即string类型、hash类型和list类型。

    其中,所述字符串类型用于存储同一目标航迹的最新航迹点信息;

    所述哈希类型用于存储同一目标航迹下的所有航迹点数据;

    所述链表类型用于存储所有目标航迹数据;

    所述字符串类型和哈希类型的目标航迹数据存储类型设置有过期时间。

    进一步地,在一种实现方式中,所述步骤2包括:

    当在所述redis服务中构建的目标航迹数据存储类型为字符串类型时,redis数据结构中的key包括固定标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息;具体的,所述string类型的key可以采用trail_{trackid}_{country}_{source}_{attribute}的字符串形式构建。

    所述字符串类型对应的value为目标航迹点数据的json字符串。

    进一步地,在一种实现方式中,所述步骤2包括:

    当在redis数据结构中构建的目标航迹数据存储类型为哈希类型时,redis数据结构中的key包括固定标识和目标航迹唯一标识;其中,同一目标航迹的不同航迹点所对应的目标航迹唯一标识相同;具体的,所述hash类型的key可以采用track_{trackid}的形式构建。

    所述哈希类型中field属性采用包含目标航迹下单个航迹点唯一标识的形式构建,其中,每个所述目标航迹数据中具有唯一的目标航迹下单个航迹点唯一标识;具体的,所述hash类型中field属性可以采用{trailid}的形式构建。

    所述哈希类型对应的value为目标航迹点数据的json字符串,同一所述redis数据结构中的key下包含多个目标航迹唯一标识,每个所述目标航迹唯一标识对应一个目标航迹点数据的json字符串。本发明中,同一track_{trackid}下包含多个{trailid},每个{trailid}对应一个目标航迹点t的json字符串。

    进一步地,在一种实现方式中,所述步骤2包括:

    当在redis数据结构中构建的目标航迹数据存储类型为链表类型时,所述链表类型存储所有目标航迹的所有目标航迹点数据的json字符串数据,且采用先入先出的存储策略。

    进一步地,在一种实现方式中,所述步骤6包括:

    更新所述redis服务中的字符串类型、哈希类型和链表类型的目标航迹点数据:

    将所述多个目标航迹点数据序列化存入链表类型的目标航迹点数据中;

    遍历所述目标航迹点数据中的航迹点,获取所述航迹点中目标航迹点唯一标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息,组合成字符串,并采用所述航迹点序列化后的字符串数据更新字符串类型中key为对应的value值;本发明中,本步骤所述的组合获得的字符串可表示为trail_{trackid}_{country}_{source}_{attribute}。

    同时,采用所述航迹点序列化后的字符串数据,更新哈希类型中key为固定标识和目标航迹唯一标识的字符串,field为目标航迹点唯一标识的value值。

    进一步地,在一种实现方式中,所述步骤6,包括:

    在更新字符串类型中的固定标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息的数据时,先获取所述redis服务中的已有数据,将所述已有数据和当前的目标航迹数据中时间信息进行比较;

    如果所述已有数据的时间早于当前的目标航迹数据中的时间信息,则更新所述固定标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息对应value值,否则不进行更新。

    进一步地,在一种实现方式中,所述步骤6,包括:

    在更新字符串类型中的固定标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息数据时,获取当前的目标航迹数据中的目标航向信息;

    如果所述目标航向信息为非法值或空值,则根据所述redis服务中已有数据位置信息和当前目标航迹数据位置信息计算理论航向,所述理论航向为已有数据位置点和当前的目标航迹数据位置点形成的向量的方向,并将航向信息更新到当前的目标航迹数据中,再将所述当前的目标航迹数据序列化后更新到固定标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息对应的value值。

    进一步地,在一种实现方式中,所述步骤7包括:

    采用所述redis服务的keystrail_*命令获取所有同一目标的最新航迹点数据;

    所述所有最新航迹点数据表示为list<k>,其中k为满足预设样式的所有字符串类型数据key;所述预设样式为固定标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息;

    本发明中,所述预设样式可以表示为trail_{trackid}_{country}_{source}_{attribute}字符串。

    遍历所述所有最新航迹点数据,根据用户选择的国家信息、数据源信息、目标属性信息对所述所有最新航迹点数据进行筛选;

    所述筛选条件为任一最新航迹点数据中,预设样式的国家信息、数据源信息、目标属性信息均包含在用户选择的国家集合、数据源集合、目标属性集合中;

    若所述任一最新航迹点数据满足筛选条件,则根据预设样式,获取所述最新航迹点数据对应的value值,对所述value值反序列化后即为满足条件的所述同一目标的最新航迹点数据;

    同时根据所述固定标识和目标航迹唯一标识获取哈希数据类型对应的所有field数据,对所述所有field数据对应的value值反序列化后,形成所述同一目标对应的所有历史航迹点,将所述同一目标的所有历史航迹点连接并在地理信息系统中显示,即为所述同一目标对应的历史航迹。

    由以上技术方案可知,本发明实施例提供基于kafka和redis的准实时目标航迹显示方法,包括:步骤1,构建前端显示程序和后端处理服务,在所述后端处理服务中构建目标航迹点数据结构,用于存储目标航迹点数据;步骤2,在redis服务中构建目标航迹数据存储类型,用于存储不同类型的目标航迹点数据;步骤3,在所述后端处理服务中建立kafka消费线程,用于实时获取kafka消息队列内部的目标航迹原始数据,所述目标航迹原始数据中包含目标基础信息和航迹参数信息;步骤4,建立异步线程,用于处理所述目标航迹原始数据;步骤5,在所述异步线程中解析目标航迹原始数据,并将所述目标航迹原始数据转换为多个目标航迹点数据,所述多个目标航迹点数据中包含不同目标的不同航迹点实时信息;步骤6,根据所述多个目标航迹点数据,更新所述redis服务中的每一类型的目标航迹点数据;步骤7,所述前端显示程序根据筛选条件定时获取redis服务中的不同类型的目标航迹点数据,对所述目标航迹点数据解析后,在地理信息系统图层上显示最新目标位置信息和航迹路径信息。

    现有技术中,实时目标航迹显示系统需要同时实现航迹的接收、缓存、加工处理、图形化显示以及用户交互,往往采用较笨重的系统架构,对系统硬件资源要求较高、软件较难维护和部署。对数据的接受、缓存不采用kafka和redis的方法则需要系统本身实现类似kafka的消息分发和redis的数据缓存功能,此两项功能实现复杂,需要稳定可靠的计算机软硬件环境。而采用前述方法,通过kafka和redis中间件处理实时目标航迹数据并采用前后端分类的方式显示实时航迹和历史航迹,系统前后端独立工作,大大简化了系统架构。因此相较于现有技术,本发明提供的基于kafka和redis的准实时目标航迹显示方法,具有轻量的系统架构和简单的处理步骤,适用于各种航迹数据处理显示的场合。同时,本发明对系统硬件资源要求低,便于软件的维护和部署。

    附图说明

    为了更清楚地说明本发明的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

    图1是本发明实施例部分提供的基于kafka和redis的准实时目标航迹显示方法中处理航迹数据的结构示意图;

    图2是本发明实施例部分提供的基于kafka和redis的准实时目标航迹显示方法的工作流程示意图。

    具体实施方式

    为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

    本发明实施例公开基于kafka和redis的准实时目标航迹显示方法,本方法应用于航空监控和/或军事领域。

    kafka是一个开源流处理平台,属于一种高吞吐量的分布式发布订阅消息系统。在大数据平台中,kafka的目的是通过hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时消息。kafka具有高性能、持久化、多副本备份和横向扩展能力。生产者往队列里写消息,消费者从队列里取消息进行业务逻辑。在实时航迹处理中,前端采集系统作为生产者产生实时航迹数据并写入kafka消息队列中;本发明从kafka中消费航迹数据并进行业务处理。

    redis是一个key-value存储系统,支持存储的value类型包括string(字符串)、list(链表)、set(集合)、zset(有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove等操作。redis还能周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。redis具有很高的读写性能同时,所有操作都是原子性的,这些性能都让redis作为实时航迹数据的缓存具有很强的优势。通过redis的不同数据结构,分别处理最新航迹点数据和历史航迹点数据,为应用系统的航迹显示提供支撑。

    而本发明采用kafka和redis实现目标航迹数据的一系列处理,系统前后端独立工作,大大简化了系统架构。

    如图1和图2所示,本发明实施例提供基于kafka和redis的准实时目标航迹显示方法,包括以下步骤:

    步骤1,构建前端显示程序和后端处理服务,在所述后端处理服务中构建目标航迹点数据结构,用于存储目标航迹点数据;具体的,本实施例中,可以采用b/s或c/s软件架构构建前端显示程序和后端处理服务。

    本实施例中,所述目标航迹点数据结构的具体结构如下:

    publicclasst{

    privatestringtrailid;//航迹点唯一标识

    privatestringtrackid;//航迹唯一标识

    privatestringname;//目标名称

    privatestringcountry;//目标国家

    privatestringattribute;//目标属性

    privatestringsource;//数据来源

    privatedatetime;//位置时间

    privatedoublelongitude;//经度

    privatedoublelatitude;//纬度

    privatestringspeed;//速度

    privatedoubledirection;//移动方向

    privatedoublealtitude;//高度

    privatestringextended;//扩展信息

    }

    步骤2,在redis服务中构建目标航迹数据存储类型,用于存储不同类型的目标航迹点数据;本实施例中,所述前端显示程序负责信息显示,所述后端处理服务处理数据。后端处理服务将处理好的数据写入redis服务中,前端显示程序从redis中读取处理好的数据并显示。

    具体的,本实施例中,所述目标航迹数据存储类型分别选取string类型、hash类型和list类型。string类型存储同一目标航迹的最新目标航迹点信息。hash类型数据存储同一目标航迹下的所有目标航迹点数据。list类型存储所有目标航迹数据。对string和hash数据类型通过redis提供的操作接口设置过期时间为半小时,即当目标在半小时内没有最新航迹点更新时,该目标对应的string和hash类型数据被redis服务自动从缓存中清除。本实施例中,航迹点信息包括时间参数,对于相同的飞机的航迹点信息,时间参数与当前时刻最接近的为最新航迹点。

    步骤3,在所述后端处理服务中建立kafka消费线程,用于实时获取kafka消息队列内部的目标航迹原始数据,所述目标航迹原始数据中包含目标基础信息和航迹参数信息;本实施例中,所述kafka数据由外部系统提供的kafka数据生产服务写入kafka消息队列中。具体的,所述目标基础信息是飞机的型号、国家等信息,所述航迹参数信息是经纬度、速度等信息,所述目标基础信息和航迹参数信息都用于飞机图标的显示,保证在地图上可采用飞机图标对当前飞行位置进行标注。

    步骤4,建立异步线程,用于处理所述目标航迹原始数据;

    步骤5,在所述异步线程中解析目标航迹原始数据,并将所述目标航迹原始数据转换为多个目标航迹点数据,所述多个目标航迹点数据中包含不同目标的不同航迹点实时信息;本步骤中,所述在所述异步线程中解析目标航迹原始数据为通过现有技术可实现的,具体即对数据进行格式转换,将原始数据格式中需要的信息提取出来,组成本系统规定的数据格式。

    本实施例中,通过所述步骤5在异步线程中解析目标航迹原始数据,例如从目标航迹原始数据中解析出三个目标实时航迹点数据,如表1所示:

    表1目标实时航迹点数据

    步骤6,根据所述多个目标航迹点数据,更新所述redis服务中的每一类型的目标航迹点数据;

    步骤7,所述前端显示程序根据筛选条件定时获取redis服务中的不同类型的目标航迹点数据,对所述目标航迹点数据解析后,在地理信息系统图层上显示最新目标位置信息和航迹路径信息。

    具体的,本发明实施例所述的准实时表示kafka中有数据后不会立即推送到前台显示,而是先写入redis中后,前台定时获取redis中的数据进行显示。定时时间可根据情况设定。例如5秒一次刷新,所以数据不是实际的实时,而是有最大5s的滞后,即所述“准实时”。

    此外,如图1所示,除了通过步骤1至步骤7实现准实时目标航迹显示,本发明实施例还公开了一种外部告警处理程序,通过从redis服务的list类型数据中消费数据,对数据进行告警判断,再通过向list类型数据中写入航迹数据,实现了向外部告警处理程序提供航迹信息的功能。

    本实施例所述的基于kafka和redis的准实时目标航迹显示方法中,所述目标航迹点数据结构中包含目标航迹唯一标识、目标航迹点唯一标识、位置信息数据、运动状态信息、时间信息和目标基本属性信息。

    本实施例所述的基于kafka和redis的准实时目标航迹显示方法中,所述步骤2中,在所述redis服务中构建的目标航迹数据存储类型,包括字符串类型、哈希类型和链表类型;具体的,本实施例中,所述字符串类型、哈希类型和链表类型即string类型、hash类型和list类型。

    其中,所述字符串类型用于存储同一目标航迹的最新航迹点信息;

    所述哈希类型用于存储同一目标航迹下的所有航迹点数据;

    所述链表类型用于存储所有目标航迹数据;

    所述字符串类型和哈希类型的目标航迹数据存储类型设置有过期时间。

    本实施例所述的基于kafka和redis的准实时目标航迹显示方法中,所述步骤2包括:

    当在所述redis服务中构建的目标航迹数据存储类型为字符串类型时,redis数据结构中的key包括固定标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息;具体的,所述string类型的key可以采用trail_{trackid}_{country}_{source}_{attribute}的字符串形式构建。其中,trail表示固定标识,{trackid}表示目标航迹唯一标识,同一目标的不同航迹点具有同样的{trackid},{country}表示国家信息,{source}表示数据源信息,{attribute}表示目标属性信息。

    所述字符串类型对应的value为目标航迹点数据的json字符串。

    本实施例所述的基于kafka和redis的准实时目标航迹显示方法中,所述步骤2包括:

    当在redis数据结构中构建的目标航迹数据存储类型为哈希类型时,redis数据结构中的key包括固定标识和目标航迹唯一标识;其中,同一目标航迹的不同航迹点所对应的目标航迹唯一标识相同;具体的,所述hash类型的key可以采用track_{trackid}的形式构建。

    所述哈希类型中field属性采用包含目标航迹下单个航迹点唯一标识的形式构建,其中,每个所述目标航迹数据中具有唯一的目标航迹下单个航迹点唯一标识;具体的,所述hash类型中field属性可以采用{trailid}的形式构建,{trailid}为目标航迹下单个航迹点唯一标识,每个目标航迹数据中具有唯一的trailid。

    此外,本实施例中,包含花括号的字符如{trailid}表示一个变量,而花括号内的字符如trailid表示一个值,该值根据与变量相关的参数而改变。

    所述哈希类型对应的value为目标航迹点数据的json字符串,同一所述redis数据结构中的key下包含多个目标航迹唯一标识,每个所述目标航迹唯一标识对应一个目标航迹点数据的json字符串。本实施例中,同一track_{trackid}下包含多个{trailid},每个{trailid}对应一个目标航迹点t的json字符串。

    本实施例所述的基于kafka和redis的准实时目标航迹显示方法中,所述步骤2包括:

    当在redis数据结构中构建的目标航迹数据存储类型为链表类型时,所述链表类型存储所有目标航迹的所有目标航迹点数据的json字符串数据,且采用先入先出的存储策略。

    本实施例所述的基于kafka和redis的准实时目标航迹显示方法中,所述步骤6包括:

    更新所述redis服务中的字符串类型、哈希类型和链表类型的目标航迹点数据:

    将所述多个目标航迹点数据序列化存入链表类型的目标航迹点数据中;具体的,本步骤中,可以采用rput方法存入。所述rput方法是redis中固定的命令,即右端加入数据。

    遍历所述目标航迹点数据中的航迹点,获取所述航迹点中目标航迹点唯一标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息,组合成字符串,并采用所述航迹点序列化后的字符串数据更新字符串类型中key为对应的value值;本实施例中,本步骤所述的组合获得的字符串可表示为trail_{trackid}_{country}_{source}_{attribute}。

    具体的,本实施例中,对于所述步骤5和表1中提及的三个目标数据,其对应的字符串类型中的key分别为:

    trail_track00001_c00001_s00001_a00001;

    trail_track00002_c00001_s00001_a00002;

    trail_track00003_c00002_s00001_a00003。

    同时,采用所述航迹点序列化后的字符串数据,更新哈希类型中key为固定标识和目标航迹唯一标识的字符串,field为目标航迹点唯一标识的value值。

    具体的,本实施例中,对于所述步骤5和表1中提及的三个目标数据,其对应的hash类型key及field为:

    key:track_track00001,field:trail0000a;

    key:track_track00002,field:trail0000b;

    key:track_track00003,field:trail0000c。

    value值为所述表1中数据的json字符串。

    本实施例所述的基于kafka和redis的准实时目标航迹显示方法中,所述步骤6,包括:

    在更新字符串类型中的固定标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息的数据时,先获取所述redis服务中的已有数据,将所述已有数据和当前的目标航迹数据中时间信息进行比较;

    如果所述已有数据的时间早于当前的目标航迹数据中的时间信息,则更新所述固定标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息对应value值,否则不进行更新。

    本实施例所述的基于kafka和redis的准实时目标航迹显示方法中,所述步骤6,包括:

    在更新字符串类型中的固定标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息数据时,获取当前的目标航迹数据中的目标航向信息;

    如果所述目标航向信息为非法值或空值,则根据所述redis服务中已有数据位置信息和当前目标航迹数据位置信息计算理论航向,所述理论航向为已有数据位置点和当前的目标航迹数据位置点形成的向量的方向,并将航向信息更新到当前的目标航迹数据中,再将所述当前的目标航迹数据序列化后更新到固定标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息对应的value值。本实施例中,通过对所述理论航向的计算,能够替换非法的目标航向信息。当所述目标航向信息不是非法值且不是空值时即采用当前值,且不做计算理论航线。

    具体的,对于表1中目标2数据,其对应目标航迹数据中目标航向信息为非法值或空值,则根据redis中已有数据位置信息和当前目标航迹数据位置信息计算理论航向,理论航向为两点连接的矢量箭头的方向。并将航向信息更新到当前目标航迹数据中,再将目标航迹数据序列化后更新到trail_track00002_c00001_s00001_a00002对应的value值。具体的,本实施例中,所述value值的合法值为0-360度。

    本实施例所述的基于kafka和redis的准实时目标航迹显示方法中,所述步骤7包括:

    采用所述redis服务的keystrail_*命令获取所有同一目标的最新航迹点数据;本实施例中,keys为redis中的命令,trail_*为参数,keystrail_*表示获取以trail_字符串开头的所有key值,*表示通配符,匹配所有字符。此处key值对应的数据就是目标的最新所有航迹点数据。此外,此处获取所有同一目标的最新航迹点数据,新的航迹点数据将覆盖老的航迹点数据,因为同一目标航迹点数据key值相同。

    所述所有最新航迹点数据表示为list<k>,其中k为满足预设样式的所有字符串类型数据key;所述预设样式为固定标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息;

    本发明中,所述预设样式可以表示为trail_{trackid}_{country}_{source}_{attribute}字符串。

    遍历所述所有最新航迹点数据,根据用户选择的国家信息、数据源信息、目标属性信息对所述所有最新航迹点数据进行筛选;

    所述筛选条件为任一最新航迹点数据中,预设样式的国家信息、数据源信息、目标属性信息均包含在用户选择的国家集合、数据源集合、目标属性集合中;

    若所述任一最新航迹点数据满足筛选条件,则根据预设样式,获取所述最新航迹点数据对应的value值,对所述value值反序列化后即为满足条件的所述同一目标的最新航迹点数据;

    同时根据所述固定标识和目标航迹唯一标识获取哈希数据类型对应的所有field数据,对所述所有field数据对应的value值反序列化后,形成所述同一目标对应的所有历史航迹点,将所述同一目标的所有历史航迹点连接并在地理信息系统(geographicinformationsystem,gis)中显示,即为所述同一目标对应的历史航迹。

    本实施例中,所述步骤7中前端显示程序定时获取redis服务中的数据,并对数据进行过滤的方法为:

    采用redis服务的keystrail_*命令获取所有最新航迹点数据list<k>,其中k为满足trail_{trackid}_{country}_{source}_{attribute}样式的所有string类型数据key,遍历list<k>,根据用户选择的国家set<c>、数据源set<s>、目标属性set<a>等集合信息对list<k>进行过滤,过滤规则为trail_{trackid}_{country}_{source}_{attribute}中country、source、attribute均包含在用户选择的国家set<c>、数据源set<s>、目标属性set<a>集合中。满足条件则根据trail_{trackid}_{country}_{source}_{attribute}获取其对应的value值,对value值反序列化后及为满足条件的目标最新航迹点,通过航迹点中位置信息、运动状态信息和属性信息对目标最新位置进行绘制。

    同时从trail_{trackid}_{country}_{source}_{attribute}中获取trackid信息,通过组合成的track_{trackid}获取hash数据类型对应的所有field数据,对所有field对应的value值反序列化后形成该目标对应的所有历史航迹点,所有历史航迹点连接并在gis中显示即为该目标对应的历史航迹。前端显示程序定时执行航迹显示的操作,定时显示时间根据业务场景选择在1-20秒,并将上一次显示的信息清除,实现实时航迹的定时刷新,满足准实时显示要求。

    由以上技术方案可知,本发明实施例提供基于kafka和redis的准实时目标航迹显示方法,包括:步骤1,构建前端显示程序和后端处理服务,在所述后端处理服务中构建目标航迹点数据结构,用于存储目标航迹点数据;步骤2,在redis服务中构建目标航迹数据存储类型,用于存储不同类型的目标航迹点数据;步骤3,在所述后端处理服务中建立kafka消费线程,用于实时获取kafka消息队列内部的目标航迹原始数据,所述目标航迹原始数据中包含目标基础信息和航迹参数信息;步骤4,建立异步线程,用于处理所述目标航迹原始数据;步骤5,在所述异步线程中解析目标航迹原始数据,并将所述目标航迹原始数据转换为多个目标航迹点数据,所述多个目标航迹点数据中包含不同目标的不同航迹点实时信息;步骤6,根据所述多个目标航迹点数据,更新所述redis服务中的每一类型的目标航迹点数据;步骤7,所述前端显示程序根据筛选条件定时获取redis服务中的不同类型的目标航迹点数据,对所述目标航迹点数据解析后,在地理信息系统图层上显示最新目标位置信息和航迹路径信息。

    现有技术中,实时目标航迹显示系统需要同时实现航迹的接收、缓存、加工处理、图形化显示以及用户交互,往往采用较笨重的系统架构,对系统硬件资源要求较高、软件较难维护和部署。对数据的接受、缓存不采用kafka和redis的方法则需要系统本身实现类似kafka的消息分发和redis的数据缓存功能,此两项功能实现复杂,需要稳定可靠的计算机软硬件环境。而采用前述方法,通过kafka和redis中间件处理实时目标航迹数据并采用前后端分类的方式显示实时航迹和历史航迹,系统前后端独立工作,大大简化了系统架构。因此相较于现有技术,本发明提供的基于kafka和redis的准实时目标航迹显示方法,具有轻量的系统架构和简单的处理步骤,适用于各种航迹数据处理显示的场合。同时,本发明对系统硬件资源要求低,便于软件的维护和部署。

    具体实现中,本发明还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时可包括本发明提供的基于kafka和redis的准实时目标航迹显示方法的各实施例中的部分或全部步骤。所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。

    本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。

    本说明书中各个实施例之间相同相似的部分互相参见即可。以上所述的本发明实施方式并不构成对本发明保护范围的限定。


    技术特征:

    1.基于kafka和redis的准实时目标航迹显示方法,其特征在于,包括以下步骤:

    步骤1,构建前端显示程序和后端处理服务,在所述后端处理服务中构建目标航迹点数据结构,用于存储目标航迹点数据;

    步骤2,在redis服务中构建目标航迹数据存储类型,用于存储不同类型的目标航迹点数据;

    步骤3,在所述后端处理服务中建立kafka消费线程,用于实时获取kafka消息队列内部的目标航迹原始数据,所述目标航迹原始数据中包含目标基础信息和航迹参数信息;

    步骤4,建立异步线程,用于处理所述目标航迹原始数据;

    步骤5,在所述异步线程中解析目标航迹原始数据,并将所述目标航迹原始数据转换为多个目标航迹点数据,所述多个目标航迹点数据中包含不同目标的不同航迹点实时信息;

    步骤6,根据所述多个目标航迹点数据,更新所述redis服务中的每一类型的目标航迹点数据;

    步骤7,所述前端显示程序根据筛选条件定时获取redis服务中的不同类型的目标航迹点数据,对所述目标航迹点数据解析后,在地理信息系统图层上显示最新目标位置信息和航迹路径信息。

    2.根据权利要求1所述的基于kafka和redis的准实时目标航迹显示方法,其特征在于,所述目标航迹点数据结构中包含目标航迹唯一标识、目标航迹点唯一标识、位置信息数据、运动状态信息、时间信息和目标基本属性信息。

    3.根据权利要求1所述的基于kafka和redis的准实时目标航迹显示方法,其特征在于,所述步骤2中,在所述redis服务中构建的目标航迹数据存储类型,包括字符串类型、哈希类型和链表类型;

    其中,所述字符串类型用于存储同一目标航迹的最新航迹点信息;

    所述哈希类型用于存储同一目标航迹下的所有航迹点数据;

    所述链表类型用于存储所有目标航迹数据;

    所述字符串类型和哈希类型的目标航迹数据存储类型设置有过期时间。

    4.根据权利要求1所述的基于kafka和redis的准实时目标航迹显示方法,其特征在于,所述步骤2包括:

    当在所述redis服务中构建的目标航迹数据存储类型为字符串类型时,redis数据结构中的key包括固定标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息;

    所述字符串类型对应的value为目标航迹点数据的json字符串。

    5.根据权利要求1所述的基于kafka和redis的准实时目标航迹显示方法,其特征在于,所述步骤2包括:

    当在redis数据结构中构建的目标航迹数据存储类型为哈希类型时,redis数据结构中的key包括固定标识和目标航迹唯一标识;其中,同一目标航迹的不同航迹点所对应的目标航迹唯一标识相同;

    所述哈希类型中field属性采用包含目标航迹下单个航迹点唯一标识的形式构建,其中,每个所述目标航迹数据中具有唯一的目标航迹下单个航迹点唯一标识;

    所述哈希类型对应的value为目标航迹点数据的json字符串,同一所述redis数据结构中的key下包含多个目标航迹唯一标识,每个所述目标航迹唯一标识对应一个目标航迹点数据的json字符串。

    6.根据权利要求1所述的基于kafka和redis的准实时目标航迹显示方法,其特征在于,所述步骤2包括:

    当在redis数据结构中构建的目标航迹数据存储类型为链表类型时,所述链表类型存储所有目标航迹的所有目标航迹点数据的json字符串数据,且采用先入先出的存储策略。

    7.根据权利要求1所述的基于kafka和redis的准实时目标航迹显示方法,其特征在于,所述步骤6包括:

    更新所述redis服务中的字符串类型、哈希类型和链表类型的目标航迹点数据:

    将所述多个目标航迹点数据序列化存入链表类型的目标航迹点数据中;

    遍历所述目标航迹点数据中的航迹点,获取所述航迹点中目标航迹点唯一标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息,组合成字符串,并采用所述航迹点序列化后的字符串数据更新字符串类型中key为对应的value值;

    同时,采用所述航迹点序列化后的字符串数据,更新哈希类型中key为固定标识和目标航迹唯一标识的字符串,field为目标航迹点唯一标识的value值。

    8.根据权利要求7所述的基于kafka和redis的准实时目标航迹显示方法,其特征在于,所述步骤6,包括:

    在更新字符串类型中的固定标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息的数据时,先获取所述redis服务中的已有数据,将所述已有数据和当前的目标航迹数据中时间信息进行比较;

    如果所述已有数据的时间早于当前的目标航迹数据中的时间信息,则更新所述固定标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息对应value值,否则不进行更新。

    9.根据权利要求8所述的基于kafka和redis的准实时目标航迹显示方法,其特征在于,所述步骤6,包括:

    在更新字符串类型中的固定标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息数据时,获取当前的目标航迹数据中的目标航向信息;

    如果所述目标航向信息为非法值或空值,则根据所述redis服务中已有数据位置信息和当前目标航迹数据位置信息计算理论航向,所述理论航向为已有数据位置点和当前的目标航迹数据位置点形成的向量的方向,并将航向信息更新到当前的目标航迹数据中,再将所述当前的目标航迹数据序列化后更新到固定标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息对应的value值。

    10.根据权利要求1所述的基于kafka和redis的准实时目标航迹显示方法,其特征在于,所述步骤7包括:

    采用所述redis服务的keystrail_*命令获取所有同一目标的最新航迹点数据;

    所述所有最新航迹点数据表示为list<k>,其中k为满足预设样式的所有字符串类型数据key;所述预设样式为固定标识、目标航迹唯一标识、国家信息、数据源信息和目标属性信息;

    遍历所述所有最新航迹点数据,根据用户选择的国家信息、数据源信息、目标属性信息对所述所有最新航迹点数据进行筛选;

    所述筛选条件为任一最新航迹点数据中,预设样式的国家信息、数据源信息、目标属性信息均包含在用户选择的国家集合、数据源集合、目标属性集合中;

    若所述任一最新航迹点数据满足筛选条件,则根据预设样式,获取所述最新航迹点数据对应的value值,对所述value值反序列化后即为满足条件的所述同一目标的最新航迹点数据;

    同时根据所述固定标识和目标航迹唯一标识获取哈希数据类型对应的所有field数据,对所述所有field数据对应的value值反序列化后,形成所述同一目标对应的所有历史航迹点,将所述同一目标的所有历史航迹点连接并在地理信息系统中显示,即为所述同一目标对应的历史航迹。

    技术总结
    本发明提供基于Kafka和Redis的准实时目标航迹显示方法,包括:构建前端显示程序和后端处理服务,在后端处理服务中构建目标航迹点数据结构,存储目标航迹点数据;在Redis服务中构建目标航迹数据存储类型,存储不同类型的目标航迹点数据;在后端处理服务中建立Kafka消费线程,实时获取Kafka消息队列内部的目标航迹原始数据,转换获取多个目标航迹点数据,更新Redis服务中的目标航迹点数据;前端显示程序根据筛选条件定时获取并解析目标航迹点数据后,在地理信息系统图层上显示最新目标位置信息和航迹路径信息。相较于现有技术,具有轻量的系统架构和简单的处理步骤,适用于各种航迹数据处理显示的场合,对硬件资源要求低,便于软件的维护和部署。

    技术研发人员:于志伟;王妍妍;王楠;杨增;路奎;王利军;李招
    受保护的技术使用者:中国电子科技集团公司第二十八研究所
    技术研发日:2020.11.30
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-23458.html

    最新回复(0)