1、算法3增加对基站的GGA的处理

This commit is contained in:
weidong 2024-05-02 16:50:48 +08:00
parent fd2b4632ed
commit 3e94ac253a
7 changed files with 49 additions and 20 deletions

View File

@ -36,7 +36,7 @@ public class FocusCalculator3 extends FocusCalculator1{
double[] xyz = new double[]{gga.getLongitude()*scale, gga.getLatitude()*scale, gga.getAltitude()*1000, gga.getQuality()};
if(gga.getQuality() == 4) {
if(gga.isFixed()) {
counterFixedResult++;
pointList.add(xyz);
}

View File

@ -17,23 +17,23 @@ public class Gga {
/**
* 纬度
*/
private double latitude;
private double latitude=0;
/**
* 经度
*/
private double longitude;
private double longitude=0;
/**
* 海拔
*/
private double altitude;
private double altitude=0;
/**
* GPS状态0初始化1单点定位2码差分3无效PPS4固定解5浮点解6正在估算7人工输入固定值8模拟模式9WAAS差分
*/
private int quality;
private int satellitesInUsed;
private int quality=0;
private int satellitesInUsed=0;
public Gga() {
}
@ -152,4 +152,9 @@ public class Gga {
this.quality = status;
}
public boolean isFixed(){
//Possible values for quality: 0 = No fix, 1 = autonomous GNSS fix, 2 = differential GNSS fix, 4 = RTK fixed, 5 = RTK float, 6 =
//estimated/dead reckoning fix
return (quality==1 || quality==2 || quality==4);
}
}

View File

@ -89,9 +89,11 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService {
// 读取惯导
Tilt tilt = message.getTilt();
focusCalculator.addTilt(tilt);
if (logger.isDebugEnabled()) {
logger.debug("测站" + deviceId + "惯导单次解析结果:{}", tilt);
if(tilt != null) {
focusCalculator.addTilt(tilt);
if (logger.isDebugEnabled()) {
logger.debug("测站" + deviceId + "惯导单次解析结果:{}", tilt);
}
}
// 延迟
@ -99,9 +101,11 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService {
// 单次b562
double[] doubles = message.getB562_loc();//unit: mm
focusCalculator.addXyz(doubles,message.getCreateTime());
if (logger.isDebugEnabled()) {
logger.debug("测站" + deviceId + "的b562单次解析结果:{}", Arrays.toString(doubles));
if(doubles !=null) {
focusCalculator.addXyz(doubles, message.getCreateTime());
if (logger.isDebugEnabled()) {
logger.debug("测站" + deviceId + "的b562单次解析结果:{}", Arrays.toString(doubles));
}
}
// 单次GGA
@ -256,4 +260,9 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService {
calculatorMap.clear();
logger.info("group paras changed");
}
public void refreshGroupCalc(String deviceId){
calculatorMap.remove(deviceId);
logger.info("device paras changed");
}
}

View File

@ -1,9 +1,12 @@
package com.imdroid.sideslope.executor;
import com.imdroid.common.util.ThreadManager;
import com.imdroid.secapi.client.BeidouClient;
import com.imdroid.secapi.dto.GnssDevice;
import com.imdroid.sideslope.bd.Gga;
import com.imdroid.sideslope.calc.GNSSDataCalcService;
import com.imdroid.sideslope.message.D331RtcmMessage;
import com.imdroid.sideslope.message.D341LocationMessage;
import com.imdroid.sideslope.sal.Device;
import com.imdroid.sideslope.sal.DeviceService;
import com.imdroid.sideslope.server.DeviceChannel;
@ -31,6 +34,8 @@ public class D331RtcmMessageExecutor implements Executor<D331RtcmMessage, Void>
private DeviceService deviceService;
@Autowired
private BeidouClient beidouClient;
@Autowired
private GNSSDataCalcService gnssCalcService;
@Override
public Void execute(D331RtcmMessage message) {
@ -68,17 +73,22 @@ public class D331RtcmMessageExecutor implements Executor<D331RtcmMessage, Void>
Gga gga = message.getGga();
if(gga != null) {
device1.updateSatelitesNum(gga.getSatellitesInUsed());
if(gga.getQuality()>0 && gga.getQuality()<6) {
if(gga.isFixed()) {
device1.setLatitude(gga.getLatitude());
device1.setLongitude(gga.getLongitude());
device1.setAltitude(gga.getAltitude());
}
/*logger.info(message.getId()+
" lat: "+gga.getLatitude()+
" lon:"+gga.getLongitude()+
" alt: "+gga.getAltitude()+
" sat: "+gga.getSatellitesInUsed()+
" quality: "+gga.getQuality());*/
// 借D341做GGA的统计分析
D341LocationMessage d341Message = new D341LocationMessage();
d341Message.setGga(gga);
d341Message.setId(message.getId());
d341Message.setTenantId(message.getTenantId());
d341Message.setPps(message.getPps());
d341Message.setTilt(message.getTilt());
d341Message.setB562_loc(null);
ThreadManager.getFixedThreadPool().submit(() -> {
gnssCalcService.calcSingle(d341Message,true);
});
}
// 收到第一个数据包如果控制通道没连接也通知上线

View File

@ -47,7 +47,7 @@ public class D341LocationMessageExecutor implements Executor<D341LocationMessage
Gga gga = message.getGga();
if(gga != null) {
device.updateSatelitesNum(gga.getSatellitesInUsed());
if(gga.getQuality()>0 && gga.getQuality()<6) {
if(gga.isFixed()) {
device.setLatitude(gga.getLatitude());
device.setLongitude(gga.getLongitude());
device.setAltitude(gga.getAltitude());

View File

@ -1,6 +1,7 @@
package com.imdroid.sideslope.message;
import com.imdroid.sideslope.bd.Gga;
import com.imdroid.sideslope.bd.Tilt;
import io.netty.buffer.ByteBuf;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -12,6 +13,7 @@ import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper=true)
public class D331RtcmMessage extends BaseMessage {
Tilt tilt;
Gga gga;
int packetNum;
@ -38,6 +40,8 @@ public class D331RtcmMessage extends BaseMessage {
String msg = String.format("id[%s],长度字段值[%s]效益包的消息体长度[%s]", id, this.len, src.readableBytes() - 4);
WrongMessageRecorder.INSTANCE.append("receive wrong message," + msg);
}*/
this.pps = src.getUnsignedShort(pos);pos+=2;
tilt = new Tilt(src.getFloat(pos), src.getFloat(pos+4),src.getFloat(pos+8),src.getFloat(pos+12));
gga = Gga.getFrom(src);
this.srcData = new byte[src.readableBytes()];
src.readBytes(this.srcData);

View File

@ -74,6 +74,7 @@ public class ApiController {
public HttpResp deviceParamChanged(String deviceId) {
// 更新设备缓存
localDeviceService.refresh(deviceId);
calcService.refreshGroupCalc(deviceId);
HttpResp resp = new HttpResp();
resp.setResponseMessage("succeed");