@@ -47,6 +47,7 @@ public class GKAFileReader extends SourceFileReader<TreeItem<TreeItemValue>> {
47
47
private boolean isNewStation = false ;
48
48
private String startPointName = null , lastStartPointName = null ;
49
49
private double ih = 0.0 ;
50
+ private Double edmRefractiveIndex = null , edmCarrierWavelength = null ;
50
51
private TreeItem <TreeItemValue > lastTreeItem = null ;
51
52
52
53
private List <TerrestrialObservationRow > horizontalDistances = null ;
@@ -121,6 +122,8 @@ public void parse(String line) throws SQLException {
121
122
if (line .startsWith ("#GNV11" )) {
122
123
this .isNewStation = false ;
123
124
this .startPointName = null ;
125
+ this .edmRefractiveIndex = null ;
126
+ this .edmCarrierWavelength = null ;
124
127
this .ih = 0.0 ;
125
128
}
126
129
@@ -141,9 +144,20 @@ public void parse(String line) throws SQLException {
141
144
// Target height for distance measurement
142
145
try {th = Double .parseDouble (columns [9 ].trim ());} catch (NumberFormatException e ) {th = 0.0 ;};
143
146
144
- double prismConst = 0 ;
147
+ double prismConst = 0 ;
148
+ double scale = 1.0 ;
145
149
if (columns .length > 15 )
146
150
try {prismConst = Double .parseDouble (columns [15 ].trim ());} catch (NumberFormatException e ) {prismConst = 0.0 ;};
151
+
152
+ if (columns .length > 27 ) {
153
+ double pressure = 99.99 ; // 99.99 == Not set
154
+ double temperature = 99.99 ;
155
+
156
+ try {pressure = Double .parseDouble (columns [25 ].trim ());} catch (NumberFormatException e ) {pressure = 99.99 ;};
157
+ try {temperature = Double .parseDouble (columns [26 ].trim ());} catch (NumberFormatException e ) {temperature = 99.99 ;};
158
+
159
+ scale = this .getFirstVelocityCorrection (temperature , pressure );
160
+ }
147
161
148
162
double distance = 0 ;
149
163
try {
@@ -154,7 +168,7 @@ public void parse(String line) throws SQLException {
154
168
obs .setReflectorHeight (th );
155
169
distance = Double .parseDouble (columns [7 ].trim ());
156
170
if (distance > 0 && (distance + prismConst ) > 0 ) {
157
- distance = distance + prismConst ;
171
+ distance = scale * distance + prismConst ;
158
172
obs .setValueApriori (distance );
159
173
obs .setDistanceApriori (distance );
160
174
this .slopeDistances .add (obs );
@@ -202,12 +216,16 @@ public void parse(String line) throws SQLException {
202
216
// P_tach, Tachname, orient, nsatzr, nsatzz, h_tach, I_extach, EX_tach, EY_tach, EZ_tach, ori, J,N, nWeatherFlag, nBattery
203
217
// 38140004,Ost,0,0,0,0.00000000,1,,,,0.0,278.77885605,80.65533842,1,100
204
218
String columns [] = line .split ("," );
205
- if (columns .length < 6 )
219
+ if (columns .length < 13 )
206
220
return ;
207
221
this .startPointName = columns [1 ].trim ();
208
222
if (this .lastStartPointName == null )
209
223
this .lastStartPointName = this .startPointName ;
210
224
try {this .ih = Double .parseDouble (columns [5 ].trim ());} catch (NumberFormatException e ) {this .ih = 0.0 ;};
225
+ // EDM Korrekturwerte fuer 1. Geschwindigkeitskorrektur
226
+ try {this .edmRefractiveIndex = Double .parseDouble (columns [11 ].trim ());} catch (NumberFormatException e ) {this .edmRefractiveIndex = null ;};
227
+ try {this .edmCarrierWavelength = Double .parseDouble (columns [12 ].trim ());} catch (NumberFormatException e ) {this .edmCarrierWavelength = null ;};
228
+
211
229
this .isNewStation = false ;
212
230
}
213
231
@@ -217,6 +235,8 @@ public void parse(String line) throws SQLException {
217
235
this .lastStartPointName = this .startPointName ;
218
236
this .isNewStation = true ;
219
237
this .startPointName = null ;
238
+ this .edmRefractiveIndex = null ;
239
+ this .edmCarrierWavelength = null ;
220
240
this .ih = 0.0 ;
221
241
}
222
242
}
@@ -280,4 +300,11 @@ public static ExtensionFilter[] getExtensionFilters() {
280
300
};
281
301
}
282
302
303
+ private double getFirstVelocityCorrection (double temperature , double pressure ) {
304
+ if (this .edmCarrierWavelength == null || this .edmRefractiveIndex == null || pressure == 99.99 || temperature == 99.99 )
305
+ return 1.0 ;
306
+ // Ferhat, G., Rouillon, H. and Malet J.-P. 2020: Analysis of atmospheric refraction
307
+ // on Electronic Distance Measurements applied to landslide monitoring, Eq. (5)
308
+ return 1.0 + (this .edmCarrierWavelength - this .edmRefractiveIndex * pressure / (temperature + 273.16 )) * 1.0E-6 ;
309
+ }
283
310
}
0 commit comments