Hi, all,
I am using sp3 file provided by ILRS ACs, ASI,BKG,DGFI,ESA,GFZ,JCET,NSGF, and ilrsa, ilrsb (see details, ftp://edc.dgfi.tum.de/pub/slr/products/orbits/).
The are somewhat flaws according to the sp3 file format.
Is there need to enhance the SP3Parser
to be more SMART?
(1) ilrsa and ilrsb: (a) “%/*” is used as an HEADER_COMMENTS
, instead of “/*”; (b) no ‘EOF’.
%i 0 0 0 0 0 0 0 0 0
%/* ilrsa.orb.lageos1.160709.v35.sp3 Reference TRF: SLRF2008
%/* Input orbits: ASI v35, DGFI v35, ESA v35, GFZ v35,
%/* JCET v35, NSGF v35,
%/* Combination details in README_CC.ilrsa
* 2016 7 3 0 0 0.00000000
PL51 -3935.038756 5359.461638 -10292.322587 999999.999999
VL51 10627.335527 54038.852939 24357.640751 999999.999999
(2) asi and dgfi: (a) the minute may be ‘60’, the hour may be ‘24’ (which should be 0).
* 2016 7 6 16 60 0.00000000
PL51 11948.228978 2986.113872 -538.901114 999999.999999
VL51 4605.419303 -27972.588048 -53316.820671 999999.999999
* 2016 7 6 17 2 0.00000000
PL51 11982.652569 2645.786926 -1177.549463 999999.999999
VL51 1128.248622 -28724.293303 -53097.358387 999999.999999
* 2016 7 6 23 58 0.00000000
PL51 3215.382310 -7958.586164 8812.395707
VL51 -18058.659942 -45834.335707 -34496.540437
* 2016 7 7 24 0 0.00000000
PL51 2989.229334 -8494.421415 8385.068555
VL51 -19617.027447 -43444.824985 -36706.159070
* 2016 7 7 0 2 0.00000000
PL51 2744.983592 -9000.639164 7931.904779
VL51 -21072.925764 -40899.633288 -38801.567078
(3) gfz: (a) the second in DATA_EPOCH
is just 4 digits, which should be 8 digits (F11.8).
* 2016 7 3 0 0 0.0000
PL51 -3935.038808 5359.461691 -10292.322543
VL51 10627.335290 54038.853128 24357.641280
(4) jcet: (a) no clock record but left some blank (space) in DATA_POSITION
and DATA_VELOCITY
.
* 2016 7 3 0 0 0.00000000
PL51 -3935.038648 5359.461640 -10292.322619
VL51 10627.335826 54038.852638 24357.640559
So, the suggested enhancements are followings:
(1) DATA_EPOCH: use the rest as seconds.
final double second = Double.parseDouble(line.substring(20, 31).trim());
==>
final double second = Double.parseDouble(line.substring(20).trim());
(2) HEADER_COMMENTS: both “%/*” and “/*”
HEADER_COMMENTS("^/\\*.*")
==>
HEADER_COMMENTS("^[%]/\\*.*")
(3) clock record in DATA_POSITION and DATA_VELOCITY:
// clock (microsec)
pi.latestClock = line.length() <= 46 ?
DEFAULT_CLOCK_VALUE :
Double.parseDouble(line.substring(46, 60).trim()) * 1e-6;
==>
// clock (microsec)
pi.latestClock = line.trim().length() <= 46 ?
DEFAULT_CLOCK_VALUE :
Double.parseDouble(line.substring(46, 60).trim()) * 1e-6;
There are much more complicate about handling the case of minute=60 and hour=24, and no EOF.
Any idea?
Best regards,
LiRW