Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitcf35b42

Browse files
committed
Implement geoid offset computation.
1 parent0b72fac commitcf35b42

File tree

7 files changed

+9598
-0
lines changed

7 files changed

+9598
-0
lines changed

‎CMakeLists.txt‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ set(HDRS
4646
include/swiftnav/edc.h
4747
include/swiftnav/ephemeris.h
4848
include/swiftnav/fifo_byte.h
49+
include/swiftnav/geoid_model.h
4950
include/swiftnav/glo_map.h
5051
include/swiftnav/glonass_phase_biases.h
5152
include/swiftnav/gnss_time.h
@@ -72,6 +73,7 @@ set(SRCS
7273
src/edc.c
7374
src/ephemeris.c
7475
src/fifo_byte.c
76+
src/geoid_model.c
7577
src/glo_map.c
7678
src/glonass_phase_biases.c
7779
src/gnss_time.c

‎include/swiftnav/geoid_model.h‎

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*------------------------------------------------------------------------------
2+
* Reproduced from https://github.com/swift-nav/RTKLIB/blob/master/src/geoid.c
3+
* according to the RTKLib licence
4+
*
5+
* Copyright (C) 2007-2013 by T.TAKASU, All rights reserved.
6+
*-----------------------------------------------------------------------------*/
7+
8+
#ifndefGEOID_MODEL_H
9+
#defineGEOID_MODEL_H
10+
11+
#include<stdint.h>
12+
13+
#ifdef__cplusplus
14+
extern"C" {
15+
#endif/* __cplusplus */
16+
17+
#defineMIN_LON 0
18+
#defineMAX_LON 360
19+
#defineMIN_LAT (-90)
20+
#defineMAX_LAT 90
21+
22+
#defineLAT_GRID_SPACING_DEG 1
23+
#defineLON_GRID_SPACING_DEG 1
24+
25+
externconstfloatGEOID[(MAX_LON-MIN_LON) /LON_GRID_SPACING_DEG+1]
26+
[(MAX_LAT-MIN_LAT) /LAT_GRID_SPACING_DEG+1];
27+
28+
floatget_geoid_offset(doublelat_rad,doublelon_rad);
29+
30+
#ifdef__cplusplus
31+
}
32+
#endif/* __cplusplus */
33+
34+
#endif/* GEOID_MODEL_H */

‎src/geoid_model.c‎

Lines changed: 9481 additions & 0 deletions
Large diffs are not rendered by default.

‎tests/CMakeLists.txt‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ if(libswiftnav_BUILD_TESTS)
1212
check_decode_glo.c
1313
check_edc.c
1414
check_ephemeris.c
15+
check_geoid_model.c
1516
check_glo_map.c
1617
check_gnss_time.c
1718
check_gnss_time_cpp.cc

‎tests/check_geoid_model.c‎

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*------------------------------------------------------------------------------
2+
* Reproduced from https://github.com/swift-nav/RTKLIB/blob/master/src/geoid.c
3+
*according to the RTKLib licence
4+
*
5+
* Copyright (C) 2007-2013 by T.TAKASU, All rights reserved.
6+
*-----------------------------------------------------------------------------*/
7+
8+
#include<check.h>
9+
10+
#include<swiftnav/constants.h>
11+
#include<swiftnav/geoid_model.h>
12+
13+
#include"check_suites.h"
14+
15+
staticconstdoublerange[4];/* embedded geoid area range {W,E,S,N} (deg) */
16+
17+
staticconstdoublerange[]= {0.00,360.00,-90.00,90.00};
18+
19+
/* bilinear interpolation ----------------------------------------------------*/
20+
staticdoubleinterpb(constdouble*y,doublea,doubleb) {
21+
returny[0]* (1.0-a)* (1.0-b)+y[1]*a* (1.0-b)+
22+
y[2]* (1.0-a)*b+y[3]*a*b;
23+
}
24+
/* embedded geoid model ------------------------------------------------------*/
25+
staticdoublegeoidh_emb(constdouble*pos) {
26+
constdoubledlon=1.0,dlat=1.0;
27+
doublea,b,y[4];
28+
inti1,i2,j1,j2;
29+
30+
if (pos[1]<range[0]||range[1]<pos[1]||pos[0]<range[2]||
31+
range[3]<pos[0]) {
32+
return0.0;
33+
}
34+
a= (pos[1]-range[0]) /dlon;
35+
b= (pos[0]-range[2]) /dlat;
36+
i1= (int)a;
37+
a-=i1;
38+
i2=i1<360 ?i1+1 :i1;
39+
j1= (int)b;
40+
b-=j1;
41+
j2=j1<180 ?j1+1 :j1;
42+
y[0]=GEOID[i1][j1];
43+
y[1]=GEOID[i2][j1];
44+
y[2]=GEOID[i1][j2];
45+
y[3]=GEOID[i2][j2];
46+
returninterpb(y,a,b);
47+
}
48+
49+
START_TEST(test_geoid_model) {
50+
for (intlat=0;lat<314;++lat) {
51+
for (intlon=0;lon<628;++lon) {
52+
doublertk_lib_pos[2]= {R2D* (lat /100-M_PI /2),
53+
R2D* (float)(lon /100)};
54+
doublertk_lib=geoidh_emb(rtk_lib_pos);
55+
56+
doublepos[2]= {lat /100-M_PI /2,lon /100-M_PI};
57+
floatgeoid_offset=get_geoid_offset(pos[0],pos[1]);
58+
59+
fail_unless(fabs(geoid_offset-rtk_lib)<1e-4,
60+
"Sanity test fail at lat, lon %0.5f, %0.5f. : difference "
61+
"was %.5f\n",
62+
pos[0],
63+
pos[1],
64+
fabs(geoid_offset-rtk_lib));
65+
}
66+
}
67+
}
68+
END_TEST
69+
70+
Suite*geoid_model_suite_suite(void) {
71+
Suite*s=suite_create("Geoid_model");
72+
73+
TCase*tc_core=tcase_create("Core");
74+
tcase_add_test(tc_core,test_geoid_model);
75+
suite_add_tcase(s,tc_core);
76+
77+
returns;
78+
}

‎tests/check_main.c‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ int main(void) {
2222
srunner_add_suite(sr,decode_glo_suite());
2323
srunner_add_suite(sr,set_suite());
2424
srunner_add_suite(sr,signal_test_suite());
25+
srunner_add_suite(sr,geoid_model_suite_suite());
2526
srunner_add_suite(sr,glo_map_test_suite());
2627
srunner_add_suite(sr,shm_suite());
2728
srunner_add_suite(sr,pvt_test_suite());

‎tests/check_suites.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Suite* set_suite(void);
1717
Suite*gnss_time_test_suite(void);
1818
Suite*gnss_time_cpp_test_suite(void);
1919
Suite*signal_test_suite(void);
20+
Suite*geoid_model_suite_suite(void);
2021
Suite*glo_map_test_suite(void);
2122
Suite*shm_suite(void);
2223
Suite*troposphere_suite(void);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp