没有合适的资源?快使用搜索试试~ 我知道了~
5.GPS采集搜索与数据透传1
需积分: 0 0 下载量 78 浏览量
2022-08-04
16:02:54
上传
评论
收藏 797KB PDF 举报
温馨提示
试读
33页
第5章 GPS采集搜索与数据透传产品原型地址:1. 设备GPS信息采集1.1 需求分析我们需要将设备上报上来的GPS信息存储到Elasticsearch中。1.
资源详情
资源评论
资源推荐
第5章 GPS采集搜索与数据透传
产品原型地址:
https://app.mockplus.cn/run/prototype/wDiGCuki3_/iLu4KtCQ8ew/1Bv0BoAUyv
1. 设备GPS信息采集
1.1 需求分析
我们需要将设备上报上来的GPS信息存储到Elasticsearch中。
1.2 实现思路
(1)通过解析设备报文解析判断是否是GPS指标数据
(2)如果是GPS指标数据则解析并存储到Elasticsearch中
1.3 ElasticSearch地理位置保存
地理坐标点是指地球表面可以用经纬度描述的一个点。 地理坐标点可以用来计算两个坐
标间的距离,还可以判断一个坐标是否在一个区域中,或在聚合中。
地理坐标点不能被动态映射自动检测,需要显式声明对应字段类型为 geo‐point :
需要显示指定location的类型为 geo_point 。
经纬度在ElasticSearch中的保存时的形式可以是字符串、数组或者对象。
字符串形式以半角逗号分割,如 "lat,lon"
对象形式显式命名为 lat 和 lon
数组形式表示为 [lon,lat]
PUT/gps
{
"mappings":{
"properties":{
"location":{
"type":"geo_point"
}
}
}
}
PUT/gps/_doc/100001
{
"location":"40.715,‐74.011"
}
PUT/gps/_doc/100002
{
"location":{
"lat":40.722,
"lon":‐73.989
}
}
PUT/gps/_doc/100003
{
"location":[‐73.983,40.719]
}
可能所有人都至少一次踩过这个坑:地理坐标点用字符串形式表示时是纬度在前,经度
在后( "latitude,longitude" ),而数组形式表示时是经度在前,纬度在后(
[longitude,latitude] )—顺序刚好相反。
1.4 代码实现
1.4.1 GPS主题订阅
我们现在查看一下gps表的结构
表中有数据
(1)修改GpsServiceImpl的update方法,在用户修改gps定义时重新订阅主题
(2)修改Monitor的init方法,订阅GPS主题
@Autowired
privateEmqClientemqClient;
@Override
publicbooleanupdate(GPSEntitygpsEntity){
//订阅主题
try{
emqClient.subscribe("$queue/"+gpsEntity.getSubject());
}catch(MqttExceptione){
log.error("subscribeerror",e);
}
gpsEntity.setId(1);
returnthis.updateById(gpsEntity);
}
1.4.2 GPS数据解析
(1)定义DTO
@Autowired
privateGpsServicegpsService;
/**
*自动订阅主题
*/
publicvoidinit(){
quotaService
.getAllSubject()
.forEach(s‐>{
try{
//通过共享订阅以免影响其他系统接收消息,并且可以通过负载均衡实
现消息的接收处理,以免客户端发过来的消息频率过大,服务端被击垮
emqClient.subscribe("$queue/"+s);
System.out.println("订阅主题:"+s);
}catch(MqttExceptione){
log.error("订阅主题出错:"+s,e);
}
});
//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐订阅gps主题数据‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
GPSEntitygpsEntity=gpsService.getGps();
if(gpsEntity==null)return;
try{
if(Strings.isNotEmpty(gpsEntity.getSubject())){//如果主题不为空
emqClient.subscribe("$queue/"+gpsEntity.getSubject());
}
}catch(MqttExceptione){
log.error("订阅主题出错:",e);
}
}
(2)GpsService新增方法定义,用于解析报文
GpsServiceImpl实现该方法
packagecom.yikekong.dto;
importlombok.Data;
importjava.io.Serializable;
@Data
publicclassDeviceLocationimplementsSerializable{
privateStringdeviceId;
privateStringlocation;
}
/**
*解析报文获得GPS信息
*@parampayloadMap报文内容
*@returngps
*/
DeviceLocationanalysis(Stringtopic,Map<String,Object>payloadMap);
剩余32页未读,继续阅读
MurcielagoS
- 粉丝: 16
- 资源: 320
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0