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()}; double[] xyz = new double[]{gga.getLongitude()*scale, gga.getLatitude()*scale, gga.getAltitude()*1000, gga.getQuality()};
if(gga.getQuality() == 4) { if(gga.isFixed()) {
counterFixedResult++; counterFixedResult++;
pointList.add(xyz); 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差分 * GPS状态0初始化1单点定位2码差分3无效PPS4固定解5浮点解6正在估算7人工输入固定值8模拟模式9WAAS差分
*/ */
private int quality; private int quality=0;
private int satellitesInUsed; private int satellitesInUsed=0;
public Gga() { public Gga() {
} }
@ -152,4 +152,9 @@ public class Gga {
this.quality = status; 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(); Tilt tilt = message.getTilt();
focusCalculator.addTilt(tilt); if(tilt != null) {
if (logger.isDebugEnabled()) { focusCalculator.addTilt(tilt);
logger.debug("测站" + deviceId + "惯导单次解析结果:{}", tilt); if (logger.isDebugEnabled()) {
logger.debug("测站" + deviceId + "惯导单次解析结果:{}", tilt);
}
} }
// 延迟 // 延迟
@ -99,9 +101,11 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService {
// 单次b562 // 单次b562
double[] doubles = message.getB562_loc();//unit: mm double[] doubles = message.getB562_loc();//unit: mm
focusCalculator.addXyz(doubles,message.getCreateTime()); if(doubles !=null) {
if (logger.isDebugEnabled()) { focusCalculator.addXyz(doubles, message.getCreateTime());
logger.debug("测站" + deviceId + "的b562单次解析结果:{}", Arrays.toString(doubles)); if (logger.isDebugEnabled()) {
logger.debug("测站" + deviceId + "的b562单次解析结果:{}", Arrays.toString(doubles));
}
} }
// 单次GGA // 单次GGA
@ -256,4 +260,9 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService {
calculatorMap.clear(); calculatorMap.clear();
logger.info("group paras changed"); 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; package com.imdroid.sideslope.executor;
import com.imdroid.common.util.ThreadManager;
import com.imdroid.secapi.client.BeidouClient; import com.imdroid.secapi.client.BeidouClient;
import com.imdroid.secapi.dto.GnssDevice; import com.imdroid.secapi.dto.GnssDevice;
import com.imdroid.sideslope.bd.Gga; import com.imdroid.sideslope.bd.Gga;
import com.imdroid.sideslope.calc.GNSSDataCalcService;
import com.imdroid.sideslope.message.D331RtcmMessage; import com.imdroid.sideslope.message.D331RtcmMessage;
import com.imdroid.sideslope.message.D341LocationMessage;
import com.imdroid.sideslope.sal.Device; import com.imdroid.sideslope.sal.Device;
import com.imdroid.sideslope.sal.DeviceService; import com.imdroid.sideslope.sal.DeviceService;
import com.imdroid.sideslope.server.DeviceChannel; import com.imdroid.sideslope.server.DeviceChannel;
@ -31,6 +34,8 @@ public class D331RtcmMessageExecutor implements Executor<D331RtcmMessage, Void>
private DeviceService deviceService; private DeviceService deviceService;
@Autowired @Autowired
private BeidouClient beidouClient; private BeidouClient beidouClient;
@Autowired
private GNSSDataCalcService gnssCalcService;
@Override @Override
public Void execute(D331RtcmMessage message) { public Void execute(D331RtcmMessage message) {
@ -68,17 +73,22 @@ public class D331RtcmMessageExecutor implements Executor<D331RtcmMessage, Void>
Gga gga = message.getGga(); Gga gga = message.getGga();
if(gga != null) { if(gga != null) {
device1.updateSatelitesNum(gga.getSatellitesInUsed()); device1.updateSatelitesNum(gga.getSatellitesInUsed());
if(gga.getQuality()>0 && gga.getQuality()<6) { if(gga.isFixed()) {
device1.setLatitude(gga.getLatitude()); device1.setLatitude(gga.getLatitude());
device1.setLongitude(gga.getLongitude()); device1.setLongitude(gga.getLongitude());
device1.setAltitude(gga.getAltitude()); device1.setAltitude(gga.getAltitude());
} }
/*logger.info(message.getId()+ // 借D341做GGA的统计分析
" lat: "+gga.getLatitude()+ D341LocationMessage d341Message = new D341LocationMessage();
" lon:"+gga.getLongitude()+ d341Message.setGga(gga);
" alt: "+gga.getAltitude()+ d341Message.setId(message.getId());
" sat: "+gga.getSatellitesInUsed()+ d341Message.setTenantId(message.getTenantId());
" quality: "+gga.getQuality());*/ 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(); Gga gga = message.getGga();
if(gga != null) { if(gga != null) {
device.updateSatelitesNum(gga.getSatellitesInUsed()); device.updateSatelitesNum(gga.getSatellitesInUsed());
if(gga.getQuality()>0 && gga.getQuality()<6) { if(gga.isFixed()) {
device.setLatitude(gga.getLatitude()); device.setLatitude(gga.getLatitude());
device.setLongitude(gga.getLongitude()); device.setLongitude(gga.getLongitude());
device.setAltitude(gga.getAltitude()); device.setAltitude(gga.getAltitude());

View File

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

View File

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