|
@@ -107,28 +107,19 @@ public class UdpDataUtils {
|
|
|
// 目标集群数据长度
|
|
|
int len = 22;
|
|
|
// 目标集群数据的起始位置
|
|
|
- int start = 3;
|
|
|
+ int start = 2;
|
|
|
byte[] mainData = BitUtils.copyFrom(data, start, len);
|
|
|
- //System.out.println(BitUtils.toHexString(mainData));
|
|
|
List<Aircraft> aircrafts = new ArrayList<>();
|
|
|
- Aircraft aircraft = parseTargetSubData(mainData);
|
|
|
- if (aircraft != null) {
|
|
|
- aircraft.setAircraftNumber("1");
|
|
|
- aircraft.setPiloted(true);
|
|
|
- aircrafts.add(aircraft);
|
|
|
- }
|
|
|
+ Aircraft aircraft = null;
|
|
|
// 目标 2~30 的引导数据
|
|
|
- Aircraft temp = null;
|
|
|
- for (int i = 1; i < 31; i++) {
|
|
|
+ for (int i = 0; i < 31; i++) {
|
|
|
byte[] subData = BitUtils.copyFrom(data, start + len * i, len);
|
|
|
//System.out.println(BitUtils.toHexString(subData));
|
|
|
- temp = parseTargetSubData(subData);
|
|
|
- if (temp == null) {
|
|
|
+ aircraft = parseTargetSubData(subData);
|
|
|
+ if (aircraft == null) {
|
|
|
break;
|
|
|
} else {
|
|
|
- temp.setAircraftNumber(String.valueOf(i + 1));
|
|
|
- temp.setPiloted(false);
|
|
|
- aircrafts.add(temp);
|
|
|
+ aircrafts.add(aircraft);
|
|
|
}
|
|
|
}
|
|
|
return aircrafts;
|
|
@@ -138,28 +129,17 @@ public class UdpDataUtils {
|
|
|
// 噪声目标数据的长度
|
|
|
int len = 32;
|
|
|
// 噪声目标数据的起始位置
|
|
|
- int start = 3;
|
|
|
- byte[] mainData = BitUtils.copyFrom(data, start, len);
|
|
|
- //System.out.println(BitUtils.toHexString(mainData));
|
|
|
+ int start = 2;
|
|
|
List<Aircraft> aircrafts = new ArrayList<>();
|
|
|
- Aircraft aircraft = parseNoiseSubData(mainData);
|
|
|
- if (aircraft != null) {
|
|
|
- aircraft.setAircraftNumber("1");
|
|
|
- aircraft.setPiloted(true);
|
|
|
- aircrafts.add(aircraft);
|
|
|
- }
|
|
|
+ Aircraft aircraft = null;
|
|
|
// 目标 2~30 的引导数据
|
|
|
- Aircraft temp = null;
|
|
|
- for (int i = 1; i < 31; i++) {
|
|
|
+ for (int i = 0; i < 31; i++) {
|
|
|
byte[] subData = BitUtils.copyFrom(data, start + len * i, len);
|
|
|
- //System.out.println(BitUtils.toHexString(subData));
|
|
|
- temp = parseNoiseSubData(subData);
|
|
|
- if (temp == null) {
|
|
|
+ aircraft = parseNoiseSubData(subData);
|
|
|
+ if (aircraft == null) {
|
|
|
break;
|
|
|
} else {
|
|
|
- temp.setAircraftNumber(String.valueOf(i + 1));
|
|
|
- temp.setPiloted(false);
|
|
|
- aircrafts.add(temp);
|
|
|
+ aircrafts.add(aircraft);
|
|
|
}
|
|
|
}
|
|
|
return aircrafts;
|
|
@@ -220,70 +200,83 @@ public class UdpDataUtils {
|
|
|
// byte[] millisecondByte = BitUtils.copyFrom(data, 31, 1);
|
|
|
// int millisecond = BitUtils.toInt(millisecondByte);
|
|
|
// platformAircraft.setUtcTime(String.format("%04d/%02d/%02d %02d:%02d:%02d %03d", year, month, day, hour, min, second, millisecond));
|
|
|
+// byte[] IdByte = BitUtils.copyFrom(data, 32, 4);
|
|
|
+// Long id = BitUtils.toLong(IdByte);
|
|
|
+// byte[] endByte = BitUtils.copyFrom(data, 37, 1);
|
|
|
+// Integer end = BitUtils.toInt(endByte);
|
|
|
+ byte[] targetNumberByte = BitUtils.copyFrom(data, 38, 2);
|
|
|
+ short targetAircraftNumber = BitUtils.toShort(targetNumberByte);
|
|
|
+ if (targetAircraftNumber != 0){
|
|
|
+ platformAircraft.setTargetAircraftNumber(targetAircraftNumber + "");
|
|
|
+ }
|
|
|
+
|
|
|
return platformAircraft;
|
|
|
}
|
|
|
|
|
|
public static Aircraft parseTargetSubData(byte[] data) {
|
|
|
- byte[] idByte = BitUtils.copyFrom(data, 0, 2);
|
|
|
- //System.out.println(BitUtils.toHexString(idByte));
|
|
|
+ byte[] afTypeByte = BitUtils.copyFrom(data, 0, 1);
|
|
|
+ String aircraftType = String.format("%01x", afTypeByte[0]);
|
|
|
+ byte[] idByte = BitUtils.copyFrom(data, 1, 2);
|
|
|
short id = BitUtils.toShort(idByte);
|
|
|
if (id == 0) return null;
|
|
|
Aircraft af = new Aircraft();
|
|
|
+ af.setAircraftNumber(id+"");
|
|
|
af.setType("R");
|
|
|
- byte[] xByte = BitUtils.copyFrom(data, 2, 4);
|
|
|
+ af.setAircraftType(aircraftType);
|
|
|
+ byte[] xByte = BitUtils.copyFrom(data, 3, 4);
|
|
|
//System.out.println(BitUtils.toHexString(xByte));
|
|
|
double x = BitUtils.toInt(xByte) * 0.0000001;
|
|
|
af.setLongitude(x);
|
|
|
- byte[] yByte = BitUtils.copyFrom(data, 6, 4);
|
|
|
+ byte[] yByte = BitUtils.copyFrom(data, 7, 4);
|
|
|
//System.out.println(BitUtils.toHexString(yByte));
|
|
|
double y = BitUtils.toInt(yByte) * 0.0000001;
|
|
|
double[] xy = WebMercator.lonLatToMeters(x, y);
|
|
|
af.setCoordinateX(doubleToFloat(xy[0]));
|
|
|
af.setCoordinateY(doubleToFloat(xy[1]));
|
|
|
af.setLatitude(y);
|
|
|
- byte[] hByte = BitUtils.copyFrom(data, 10, 2);
|
|
|
+ byte[] hByte = BitUtils.copyFrom(data, 11, 2);
|
|
|
//System.out.println(BitUtils.toHexString(hByte));
|
|
|
short h = BitUtils.toShort(hByte);
|
|
|
af.setCoordinateZ(doubleToFloat(h));
|
|
|
af.setAltitude(h);
|
|
|
- byte[] dvByte = BitUtils.copyFrom(data, 12, 2);
|
|
|
+ byte[] dvByte = BitUtils.copyFrom(data, 13, 2);
|
|
|
//System.out.println(BitUtils.toHexString(dvByte));
|
|
|
double dv = BitUtils.toShort(dvByte) * 0.1;
|
|
|
af.setVelocityX(doubleToFloat(dv));
|
|
|
af.setEastSpeed(dv);
|
|
|
- byte[] bvByte = BitUtils.copyFrom(data, 14, 2);
|
|
|
+ byte[] bvByte = BitUtils.copyFrom(data, 15, 2);
|
|
|
//System.out.println(BitUtils.toHexString(bvByte));
|
|
|
double bv = BitUtils.toShort(bvByte) * 0.1;
|
|
|
af.setVelocityY(doubleToFloat(bv));
|
|
|
af.setNorthSpeed(bv);
|
|
|
- byte[] tvByte = BitUtils.copyFrom(data, 16, 2);
|
|
|
+ byte[] tvByte = BitUtils.copyFrom(data, 17, 2);
|
|
|
//System.out.println(BitUtils.toHexString(tvByte));
|
|
|
double tv = BitUtils.toShort(tvByte) * 0.1;
|
|
|
af.setVelocityZ(doubleToFloat(tv));
|
|
|
af.setSkySpeed(tv);
|
|
|
- //byte[] timeByte = BitUtils.copyFrom(data, 18, 4);
|
|
|
- //System.out.println(BitUtils.toHexString(timeByte));
|
|
|
- //int time = BitUtils.toInt(timeByte);
|
|
|
- //System.out.println("real>> " + id + " " + x + " " + y + " " + h + " " + dv + " " + bv + " " + tv + " ");
|
|
|
return af;
|
|
|
}
|
|
|
|
|
|
public static Aircraft parseNoiseSubData(byte[] data) {
|
|
|
- byte[] idByte = BitUtils.copyFrom(data, 0, 2);
|
|
|
+ byte[] afTypeByte = BitUtils.copyFrom(data, 0, 1);
|
|
|
+ String aircraftType = String.format("%01x", afTypeByte[0]);
|
|
|
+ byte[] idByte = BitUtils.copyFrom(data, 1, 2);
|
|
|
//System.out.println(BitUtils.toHexString(idByte));
|
|
|
short id = BitUtils.toShort(idByte);
|
|
|
//System.out.println(id);
|
|
|
if (id == 0) return null;
|
|
|
Aircraft af = new Aircraft();
|
|
|
+ af.setAircraftNumber(id+"");
|
|
|
af.setType("N");
|
|
|
- byte[] xByte = BitUtils.copyFrom(data, 4, 4);
|
|
|
+ af.setAircraftType(aircraftType);
|
|
|
+ byte[] xByte = BitUtils.copyFrom(data, 5, 4);
|
|
|
//System.out.println(BitUtils.toHexString(xByte));
|
|
|
int ix = BitUtils.toInt(xByte);
|
|
|
double x = ix * 0.0000001;
|
|
|
//System.out.println(x);
|
|
|
//af.setCoordinateX(doubleToFloat(x));
|
|
|
af.setLongitude(x);
|
|
|
- byte[] yByte = BitUtils.copyFrom(data, 8, 4);
|
|
|
+ byte[] yByte = BitUtils.copyFrom(data, 9, 4);
|
|
|
//System.out.println(BitUtils.toHexString(yByte));
|
|
|
int iy = BitUtils.toInt(yByte);
|
|
|
double y = iy * 0.0000001;
|
|
@@ -293,25 +286,25 @@ public class UdpDataUtils {
|
|
|
double[] xy = WebMercator.lonLatToMeters(x, y);
|
|
|
af.setCoordinateX(doubleToFloat(xy[0]));
|
|
|
af.setCoordinateY(doubleToFloat(xy[1]));
|
|
|
- byte[] hByte = BitUtils.copyFrom(data, 12, 2);
|
|
|
+ byte[] hByte = BitUtils.copyFrom(data, 13, 2);
|
|
|
//System.out.println(BitUtils.toHexString(hByte));
|
|
|
short h = BitUtils.toShort(hByte);
|
|
|
//System.out.println(h);
|
|
|
af.setCoordinateZ(doubleToFloat(h));
|
|
|
af.setAltitude(h);
|
|
|
- byte[] dvByte = BitUtils.copyFrom(data, 22, 2);
|
|
|
+ byte[] dvByte = BitUtils.copyFrom(data, 23, 2);
|
|
|
//System.out.println(BitUtils.toHexString(dvByte));
|
|
|
double dv = BitUtils.toShort(dvByte) * 0.1;
|
|
|
af.setVelocityX(doubleToFloat(dv));
|
|
|
//System.out.println(dv);
|
|
|
af.setEastSpeed(dv);
|
|
|
- byte[] bvByte = BitUtils.copyFrom(data, 24, 2);
|
|
|
+ byte[] bvByte = BitUtils.copyFrom(data, 25, 2);
|
|
|
//System.out.println(BitUtils.toHexString(bvByte));
|
|
|
double bv = BitUtils.toShort(bvByte) * 0.1;
|
|
|
af.setVelocityY(doubleToFloat(bv));
|
|
|
af.setNorthSpeed(bv);
|
|
|
//System.out.println(bv);
|
|
|
- byte[] tvByte = BitUtils.copyFrom(data, 26, 2);
|
|
|
+ byte[] tvByte = BitUtils.copyFrom(data, 27, 2);
|
|
|
//System.out.println(BitUtils.toHexString(tvByte));
|
|
|
double tv = BitUtils.toShort(tvByte) * 0.1;
|
|
|
af.setVelocityZ(doubleToFloat(tv));
|