lambert_ruby 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +6 -14
- data/ext/lambert_ruby/lambert.c +81 -27
- data/ext/lambert_ruby/lambert.h +61 -11
- data/ext/lambert_ruby/lambert/src/lambert.c +81 -27
- data/ext/lambert_ruby/lambert/src/lambert.h +61 -11
- data/ext/lambert_ruby/lambert/src/rgf93.c +206 -0
- data/ext/lambert_ruby/lambert/src/rgf93.h +7 -0
- data/ext/lambert_ruby/lambert/tests/test_lambert_cunit.c +45 -14
- data/ext/lambert_ruby/lambert_ruby.c +4 -4
- metadata +10 -11
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
YmI2ZmIwNDkxMjk2YjMwYTQzY2I3OTY0MTE0MmI1NWNjNjVhMjg3M2QyYmVh
|
10
|
-
MmY5ODVkNjQ0M2IwMzE0ZmQzYjcxZDJhNjU2ZDQzNGI3NTA5YTNiODE1MTc4
|
11
|
-
YzA5YzQ3MGY5YTI0ZGViZWEzNjBiZTg1YmNkNDU3OGVhYWQxOWE=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NTUzODYwZmQyYzQ2YTMwY2I4MDE2ZjRjOThlOTVhN2YxYzQwYWQyMDUwZjIw
|
14
|
-
YmU5MzRkN2EzNWU1N2VkNzBhMjU3ZGY0ZTE4MmY4M2IxM2IyOGFhY2ZjMDJi
|
15
|
-
ODVjMTg4NjM4Zjk3YWUyOWYwOTgxOTJlOTgwZWNhNzYzMzM0MWE=
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f6d21e2b9e2e9f9adc7d68c49b8b7815d5e79d46
|
4
|
+
data.tar.gz: ead3cb60d5d7fe04da12c7365e00af6340a27bba
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a885864daeb46f4bc2dbb4e28cef5619f64694724e59f81fcf489c251de4bb67a450bc057f87ad8ce3d31c919075a592b392a392e401db3c0aaa5282b3ce3d50
|
7
|
+
data.tar.gz: 93b944cb36c7078d73438e8edb4578680cde8b159c8fe475834e9ab950a7ede8d993462d92581e1f5e6ed11b627fede29e4e24b0b462cbe8d6e28369512855dd
|
data/ext/lambert_ruby/lambert.c
CHANGED
@@ -17,8 +17,31 @@ static double lambert_c[6] = {11603796.98, 11745793.39, 11947992.52, 12136281.99
|
|
17
17
|
static double lambert_xs[6]= {600000.0, 600000.0, 600000.0, 234.358, 600000.0, 700000.0};
|
18
18
|
static double lambert_ys[6]= {5657616.674, 6199695.768, 6791905.085, 7239161.542, 8199695.768, 12655612.050};
|
19
19
|
|
20
|
+
YGPoint pointToDegree(YGPoint p)
|
21
|
+
{
|
22
|
+
|
23
|
+
p.x = p.x * 180/M_PI;
|
24
|
+
p.y = p.y * 180/M_PI;
|
25
|
+
p.z = p.z * 180/M_PI;
|
26
|
+
|
27
|
+
return p;
|
28
|
+
}
|
20
29
|
|
21
|
-
|
30
|
+
YGPoint pointToRadian(YGPoint p)
|
31
|
+
{
|
32
|
+
p.x = p.x * M_PI/180;
|
33
|
+
p.y = p.y * M_PI/180;
|
34
|
+
p.z = p.z * M_PI/180;
|
35
|
+
|
36
|
+
return p;
|
37
|
+
}
|
38
|
+
|
39
|
+
double latitude_iso_from_lat(double lat, double e)
|
40
|
+
{
|
41
|
+
return log(tan(M_PI_4+lat/2)*pow((1-e*sin(lat))/(1+e*sin(lat)),e/2));
|
42
|
+
}
|
43
|
+
|
44
|
+
/*
|
22
45
|
* ALGO0002
|
23
46
|
*/
|
24
47
|
|
@@ -41,7 +64,7 @@ double lat_from_lat_iso(double lat_iso, double e,double eps)
|
|
41
64
|
* ALGO0004 - Lambert vers geographiques
|
42
65
|
*/
|
43
66
|
|
44
|
-
void lambert_to_geographic(const
|
67
|
+
void lambert_to_geographic(const YGPoint * org,YGPoint *dest, YGLambertZone zone, double lon_merid, double e, double eps)
|
45
68
|
{
|
46
69
|
double n = lambert_n[zone];
|
47
70
|
double C = lambert_c[zone];
|
@@ -85,11 +108,11 @@ double lambert_normal(double lat, double a, double e)
|
|
85
108
|
*
|
86
109
|
*/
|
87
110
|
|
88
|
-
|
111
|
+
YGPoint geographic_to_cartesian(double lon, double lat, double he, double a, double e)
|
89
112
|
{
|
90
113
|
double N = lambert_normal(lat,a,e);
|
91
114
|
|
92
|
-
|
115
|
+
YGPoint pt = {0,0,0};
|
93
116
|
pt.x = (N+he)*cos(lat)*cos(lon);
|
94
117
|
|
95
118
|
pt.y = (N+he)*cos(lat)*sin(lon);
|
@@ -104,7 +127,7 @@ double lambert_normal(double lat, double a, double e)
|
|
104
127
|
* ALGO0012 - Passage des coordonnées cartésiennes aux coordonnées géographiques
|
105
128
|
*/
|
106
129
|
|
107
|
-
|
130
|
+
YGPoint cartesian_to_geographic(YGPoint org, double meridien, double a, double e , double eps)
|
108
131
|
{
|
109
132
|
double x = org.x, y = org.y, z = org.z;
|
110
133
|
|
@@ -124,7 +147,7 @@ double lambert_normal(double lat, double a, double e)
|
|
124
147
|
|
125
148
|
double he = module/cos(phi_i) - a/sqrt(1-e*e*sin(phi_i)*sin(phi_i));
|
126
149
|
|
127
|
-
|
150
|
+
YGPoint pt;
|
128
151
|
pt.x = lon;
|
129
152
|
pt.y = phi_i;
|
130
153
|
pt.z = he;
|
@@ -132,40 +155,71 @@ double lambert_normal(double lat, double a, double e)
|
|
132
155
|
return pt;
|
133
156
|
}
|
134
157
|
|
135
|
-
|
136
|
-
|
137
158
|
/*
|
138
159
|
* Convert Lambert -> WGS84
|
139
160
|
* http://geodesie.ign.fr/contenu/fichiers/documentation/pedagogiques/transfo.pdf
|
140
161
|
*
|
141
162
|
*/
|
142
163
|
|
143
|
-
void lambert_to_wgs84(const
|
164
|
+
void lambert_to_wgs84(const YGPoint * org, YGPoint *dest,YGLambertZone zone){
|
165
|
+
|
166
|
+
|
167
|
+
|
168
|
+
if(LAMBERT_93 == zone)
|
169
|
+
{
|
170
|
+
lambert_to_geographic(org,dest,zone,LON_MERID_IERS,E_WGS84,DEFAULT_EPS);
|
171
|
+
}
|
172
|
+
else
|
173
|
+
{
|
174
|
+
lambert_to_geographic(org,dest,zone,LON_MERID_PARIS,E_CLARK_IGN,DEFAULT_EPS);
|
175
|
+
YGPoint temp = geographic_to_cartesian(dest->x,dest->y,dest->z,A_CLARK_IGN,E_CLARK_IGN);
|
176
|
+
|
177
|
+
temp.x= temp.x - 168;
|
178
|
+
temp.y= temp.y - 60;
|
179
|
+
temp.z= temp.z + 320;
|
180
|
+
|
181
|
+
//WGS84 refers to greenwich
|
182
|
+
temp = cartesian_to_geographic(temp, LON_MERID_IERS, A_WGS84,E_WGS84,DEFAULT_EPS);
|
183
|
+
|
184
|
+
dest->x = temp.x;
|
185
|
+
dest->y = temp.y;
|
186
|
+
}
|
187
|
+
}
|
188
|
+
|
144
189
|
|
145
|
-
|
190
|
+
void lambert_to_wgs84_deg(const YGPoint * org, YGPoint *dest, YGLambertZone zone)
|
191
|
+
{
|
192
|
+
YGPoint temp = {0,0,0};
|
193
|
+
|
194
|
+
lambert_to_wgs84(org,&temp,zone);
|
195
|
+
*dest = pointToDegree(temp);
|
196
|
+
}
|
146
197
|
|
147
|
-
|
198
|
+
double lat_iso(double lat, double e)
|
199
|
+
{
|
200
|
+
return log(tan(M_PI_4 + lat/2)*pow((1-e*sin(lat))/(1+e*sin(lat)),e/2));
|
201
|
+
}
|
148
202
|
|
149
|
-
|
150
|
-
|
151
|
-
|
203
|
+
YGPoint coord_transform(double e, double n, double c, double lambda_c, double x_s, double y_s , double lon, double lat)
|
204
|
+
{
|
205
|
+
YGPoint dest = {0,0,0};
|
152
206
|
|
153
|
-
|
154
|
-
|
207
|
+
double latiso = lat_iso(lat,e);
|
208
|
+
dest.x = x_s + e*exp(-n*latiso)*sin(n*(lon-lambda_c));
|
209
|
+
dest.y = y_s + e*exp(n*latiso)*cos(n*(lon-lambda_c));
|
155
210
|
|
156
|
-
|
157
|
-
dest->y = temp.y;
|
211
|
+
return dest;
|
158
212
|
|
159
213
|
}
|
160
214
|
|
161
|
-
|
162
|
-
void lambert_to_wgs84_deg(const YGLambertPoint * org, YGLambertPoint *dest, LambertZone zone)
|
215
|
+
YGPoint switch_geodesic_system(YGPoint u, Vector t, double d, Vector r)
|
163
216
|
{
|
164
|
-
|
165
|
-
|
166
|
-
lambert_to_wgs84(org,&temp,zone);
|
217
|
+
YGPoint v = {0,0,0};
|
167
218
|
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
219
|
+
v.x = t.x + u.x*(1+d) + u.z * r.y - u.y * r.z;
|
220
|
+
v.y = t.y + u.y*(1+d) + u.x * r.z - u.y * r.z;
|
221
|
+
v.z = t.z +u.z*(1+d) + u.y*r.x -u.x*r.y;
|
222
|
+
|
223
|
+
return v;
|
224
|
+
|
225
|
+
}
|
data/ext/lambert_ruby/lambert.h
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
#ifndef __LAMBERT_H
|
2
|
+
#define __LAMBERT_H
|
3
|
+
|
4
|
+
|
1
5
|
#define DEFAULT_EPS 1e-10
|
2
6
|
#define E_CLARK_IGN 0.08248325676
|
3
7
|
#define E_WGS84 0.08181919106
|
@@ -7,9 +11,15 @@
|
|
7
11
|
|
8
12
|
#define LON_MERID_PARIS 0
|
9
13
|
#define LON_MERID_GREENWICH 0.04079234433
|
14
|
+
#define LON_MERID_IERS (3*M_PI/180)
|
15
|
+
#define AUTOCOMEIQUE_FIRST 44*M_PI/180
|
16
|
+
#define AUTOCOMEIQUE_SECOND 49*M_PI/180
|
17
|
+
#define LAT_ORIG 46.5*M_PI/180
|
18
|
+
#define ct_x0 700000.0
|
19
|
+
#define ct_y0 6600000.0
|
10
20
|
|
11
|
-
#define
|
12
|
-
#define
|
21
|
+
#define DISPLAY_YGPoint(YGPoint) printf(#YGPoint" X:%f | Y:%f | Z:%f\n",YGPoint.x,YGPoint.y,YGPoint.z);
|
22
|
+
#define DISPLAY_YGPoint_REF(YGPoint) printf(#YGPoint" X:%f | Y:%f | Z:%f\n",YGPoint->x,YGPoint->y,YGPoint->z);
|
13
23
|
|
14
24
|
typedef enum {
|
15
25
|
LAMBERT_I=0,
|
@@ -18,14 +28,32 @@ typedef enum {
|
|
18
28
|
LAMBERT_IV=3,
|
19
29
|
LAMBERT_II_E=4,
|
20
30
|
LAMBERT_93= 5
|
21
|
-
}
|
31
|
+
} YGLambertZone;
|
32
|
+
|
33
|
+
typedef enum {
|
34
|
+
DEGREE,
|
35
|
+
GRAD,
|
36
|
+
RADIAN
|
37
|
+
} CoordUnit;
|
22
38
|
|
23
39
|
typedef struct {
|
24
40
|
double x;
|
25
41
|
double y;
|
26
42
|
double z;
|
27
|
-
|
43
|
+
CoordUnit unit;
|
44
|
+
} YGPoint;
|
28
45
|
|
46
|
+
typedef struct
|
47
|
+
{
|
48
|
+
double tx;
|
49
|
+
double ty;
|
50
|
+
double tz;
|
51
|
+
} YGTransform;
|
52
|
+
|
53
|
+
typedef YGPoint Vector;
|
54
|
+
|
55
|
+
YGPoint pointToRadian(YGPoint p);
|
56
|
+
YGPoint pointToDegree(YGPoint p);
|
29
57
|
|
30
58
|
/*
|
31
59
|
* ALGO0021 - Calcul de la grande Normale
|
@@ -34,16 +62,16 @@ typedef struct {
|
|
34
62
|
double lambert_normal(double lat, double a, double e);
|
35
63
|
|
36
64
|
/*
|
37
|
-
* Convert a
|
65
|
+
* Convert a YGPoint struct from one lambert zone to WGS84 (Rad)
|
38
66
|
*
|
39
67
|
*/
|
40
|
-
void lambert_to_wgs84(const
|
68
|
+
void lambert_to_wgs84(const YGPoint * org, YGPoint *dest, YGLambertZone zone);
|
41
69
|
|
42
70
|
/*
|
43
|
-
* Convert a
|
71
|
+
* Convert a YGPoint struct from one lambert zone to WGS84 (Deg)
|
44
72
|
*
|
45
73
|
*/
|
46
|
-
void lambert_to_wgs84_deg(const
|
74
|
+
void lambert_to_wgs84_deg(const YGPoint * org, YGPoint *dest, YGLambertZone zone);
|
47
75
|
|
48
76
|
/*
|
49
77
|
* ALGO0002
|
@@ -55,12 +83,12 @@ double lat_from_lat_iso(double lat_iso, double e, double eps);
|
|
55
83
|
* ALGO0012
|
56
84
|
*/
|
57
85
|
|
58
|
-
|
86
|
+
YGPoint cartesian_to_geographic(YGPoint org, double meridien, double a, double e , double eps);
|
59
87
|
|
60
88
|
/*
|
61
89
|
* ALGO004
|
62
90
|
*/
|
63
|
-
void lambert_to_geographic(const
|
91
|
+
void lambert_to_geographic(const YGPoint * org,YGPoint *dest, YGLambertZone zone, double lon_merid, double e, double eps);
|
64
92
|
|
65
93
|
/**
|
66
94
|
* ALGO0009 - Transformations geographiques -> cartésiennes
|
@@ -68,4 +96,26 @@ void lambert_to_geographic(const YGLambertPoint * org,YGLambertPoint *dest, Lamb
|
|
68
96
|
*
|
69
97
|
*/
|
70
98
|
|
71
|
-
|
99
|
+
YGPoint geographic_to_cartesian(double lon, double lat, double he, double a, double e);
|
100
|
+
|
101
|
+
/**
|
102
|
+
* ALGO13 Transformation de Coordonnées à 7 paramètres entre deux systèmes géodésiques
|
103
|
+
*/
|
104
|
+
|
105
|
+
YGPoint switch_geodesic_system(YGPoint u, Vector t, double d, Vector r);
|
106
|
+
|
107
|
+
/**
|
108
|
+
* Algo0001 Calcul de la latitude isomérique
|
109
|
+
*/
|
110
|
+
double lat_iso(double lat, double e);
|
111
|
+
|
112
|
+
/**
|
113
|
+
* Algo003
|
114
|
+
*/
|
115
|
+
YGPoint coord_transform(double e, double n, double c, double lambda_c, double x_s, double y_s , double lon, double lat);
|
116
|
+
|
117
|
+
/**
|
118
|
+
* Algo 01
|
119
|
+
*/
|
120
|
+
double latitude_iso_from_lat(double lat, double e);
|
121
|
+
#endif
|
@@ -17,8 +17,31 @@ static double lambert_c[6] = {11603796.98, 11745793.39, 11947992.52, 12136281.99
|
|
17
17
|
static double lambert_xs[6]= {600000.0, 600000.0, 600000.0, 234.358, 600000.0, 700000.0};
|
18
18
|
static double lambert_ys[6]= {5657616.674, 6199695.768, 6791905.085, 7239161.542, 8199695.768, 12655612.050};
|
19
19
|
|
20
|
+
YGPoint pointToDegree(YGPoint p)
|
21
|
+
{
|
22
|
+
|
23
|
+
p.x = p.x * 180/M_PI;
|
24
|
+
p.y = p.y * 180/M_PI;
|
25
|
+
p.z = p.z * 180/M_PI;
|
26
|
+
|
27
|
+
return p;
|
28
|
+
}
|
20
29
|
|
21
|
-
|
30
|
+
YGPoint pointToRadian(YGPoint p)
|
31
|
+
{
|
32
|
+
p.x = p.x * M_PI/180;
|
33
|
+
p.y = p.y * M_PI/180;
|
34
|
+
p.z = p.z * M_PI/180;
|
35
|
+
|
36
|
+
return p;
|
37
|
+
}
|
38
|
+
|
39
|
+
double latitude_iso_from_lat(double lat, double e)
|
40
|
+
{
|
41
|
+
return log(tan(M_PI_4+lat/2)*pow((1-e*sin(lat))/(1+e*sin(lat)),e/2));
|
42
|
+
}
|
43
|
+
|
44
|
+
/*
|
22
45
|
* ALGO0002
|
23
46
|
*/
|
24
47
|
|
@@ -41,7 +64,7 @@ double lat_from_lat_iso(double lat_iso, double e,double eps)
|
|
41
64
|
* ALGO0004 - Lambert vers geographiques
|
42
65
|
*/
|
43
66
|
|
44
|
-
void lambert_to_geographic(const
|
67
|
+
void lambert_to_geographic(const YGPoint * org,YGPoint *dest, YGLambertZone zone, double lon_merid, double e, double eps)
|
45
68
|
{
|
46
69
|
double n = lambert_n[zone];
|
47
70
|
double C = lambert_c[zone];
|
@@ -85,11 +108,11 @@ double lambert_normal(double lat, double a, double e)
|
|
85
108
|
*
|
86
109
|
*/
|
87
110
|
|
88
|
-
|
111
|
+
YGPoint geographic_to_cartesian(double lon, double lat, double he, double a, double e)
|
89
112
|
{
|
90
113
|
double N = lambert_normal(lat,a,e);
|
91
114
|
|
92
|
-
|
115
|
+
YGPoint pt = {0,0,0};
|
93
116
|
pt.x = (N+he)*cos(lat)*cos(lon);
|
94
117
|
|
95
118
|
pt.y = (N+he)*cos(lat)*sin(lon);
|
@@ -104,7 +127,7 @@ double lambert_normal(double lat, double a, double e)
|
|
104
127
|
* ALGO0012 - Passage des coordonnées cartésiennes aux coordonnées géographiques
|
105
128
|
*/
|
106
129
|
|
107
|
-
|
130
|
+
YGPoint cartesian_to_geographic(YGPoint org, double meridien, double a, double e , double eps)
|
108
131
|
{
|
109
132
|
double x = org.x, y = org.y, z = org.z;
|
110
133
|
|
@@ -124,7 +147,7 @@ double lambert_normal(double lat, double a, double e)
|
|
124
147
|
|
125
148
|
double he = module/cos(phi_i) - a/sqrt(1-e*e*sin(phi_i)*sin(phi_i));
|
126
149
|
|
127
|
-
|
150
|
+
YGPoint pt;
|
128
151
|
pt.x = lon;
|
129
152
|
pt.y = phi_i;
|
130
153
|
pt.z = he;
|
@@ -132,40 +155,71 @@ double lambert_normal(double lat, double a, double e)
|
|
132
155
|
return pt;
|
133
156
|
}
|
134
157
|
|
135
|
-
|
136
|
-
|
137
158
|
/*
|
138
159
|
* Convert Lambert -> WGS84
|
139
160
|
* http://geodesie.ign.fr/contenu/fichiers/documentation/pedagogiques/transfo.pdf
|
140
161
|
*
|
141
162
|
*/
|
142
163
|
|
143
|
-
void lambert_to_wgs84(const
|
164
|
+
void lambert_to_wgs84(const YGPoint * org, YGPoint *dest,YGLambertZone zone){
|
165
|
+
|
166
|
+
|
167
|
+
|
168
|
+
if(LAMBERT_93 == zone)
|
169
|
+
{
|
170
|
+
lambert_to_geographic(org,dest,zone,LON_MERID_IERS,E_WGS84,DEFAULT_EPS);
|
171
|
+
}
|
172
|
+
else
|
173
|
+
{
|
174
|
+
lambert_to_geographic(org,dest,zone,LON_MERID_PARIS,E_CLARK_IGN,DEFAULT_EPS);
|
175
|
+
YGPoint temp = geographic_to_cartesian(dest->x,dest->y,dest->z,A_CLARK_IGN,E_CLARK_IGN);
|
176
|
+
|
177
|
+
temp.x= temp.x - 168;
|
178
|
+
temp.y= temp.y - 60;
|
179
|
+
temp.z= temp.z + 320;
|
180
|
+
|
181
|
+
//WGS84 refers to greenwich
|
182
|
+
temp = cartesian_to_geographic(temp, LON_MERID_IERS, A_WGS84,E_WGS84,DEFAULT_EPS);
|
183
|
+
|
184
|
+
dest->x = temp.x;
|
185
|
+
dest->y = temp.y;
|
186
|
+
}
|
187
|
+
}
|
188
|
+
|
144
189
|
|
145
|
-
|
190
|
+
void lambert_to_wgs84_deg(const YGPoint * org, YGPoint *dest, YGLambertZone zone)
|
191
|
+
{
|
192
|
+
YGPoint temp = {0,0,0};
|
193
|
+
|
194
|
+
lambert_to_wgs84(org,&temp,zone);
|
195
|
+
*dest = pointToDegree(temp);
|
196
|
+
}
|
146
197
|
|
147
|
-
|
198
|
+
double lat_iso(double lat, double e)
|
199
|
+
{
|
200
|
+
return log(tan(M_PI_4 + lat/2)*pow((1-e*sin(lat))/(1+e*sin(lat)),e/2));
|
201
|
+
}
|
148
202
|
|
149
|
-
|
150
|
-
|
151
|
-
|
203
|
+
YGPoint coord_transform(double e, double n, double c, double lambda_c, double x_s, double y_s , double lon, double lat)
|
204
|
+
{
|
205
|
+
YGPoint dest = {0,0,0};
|
152
206
|
|
153
|
-
|
154
|
-
|
207
|
+
double latiso = lat_iso(lat,e);
|
208
|
+
dest.x = x_s + e*exp(-n*latiso)*sin(n*(lon-lambda_c));
|
209
|
+
dest.y = y_s + e*exp(n*latiso)*cos(n*(lon-lambda_c));
|
155
210
|
|
156
|
-
|
157
|
-
dest->y = temp.y;
|
211
|
+
return dest;
|
158
212
|
|
159
213
|
}
|
160
214
|
|
161
|
-
|
162
|
-
void lambert_to_wgs84_deg(const YGLambertPoint * org, YGLambertPoint *dest, LambertZone zone)
|
215
|
+
YGPoint switch_geodesic_system(YGPoint u, Vector t, double d, Vector r)
|
163
216
|
{
|
164
|
-
|
165
|
-
|
166
|
-
lambert_to_wgs84(org,&temp,zone);
|
217
|
+
YGPoint v = {0,0,0};
|
167
218
|
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
219
|
+
v.x = t.x + u.x*(1+d) + u.z * r.y - u.y * r.z;
|
220
|
+
v.y = t.y + u.y*(1+d) + u.x * r.z - u.y * r.z;
|
221
|
+
v.z = t.z +u.z*(1+d) + u.y*r.x -u.x*r.y;
|
222
|
+
|
223
|
+
return v;
|
224
|
+
|
225
|
+
}
|
@@ -1,3 +1,7 @@
|
|
1
|
+
#ifndef __LAMBERT_H
|
2
|
+
#define __LAMBERT_H
|
3
|
+
|
4
|
+
|
1
5
|
#define DEFAULT_EPS 1e-10
|
2
6
|
#define E_CLARK_IGN 0.08248325676
|
3
7
|
#define E_WGS84 0.08181919106
|
@@ -7,9 +11,15 @@
|
|
7
11
|
|
8
12
|
#define LON_MERID_PARIS 0
|
9
13
|
#define LON_MERID_GREENWICH 0.04079234433
|
14
|
+
#define LON_MERID_IERS (3*M_PI/180)
|
15
|
+
#define AUTOCOMEIQUE_FIRST 44*M_PI/180
|
16
|
+
#define AUTOCOMEIQUE_SECOND 49*M_PI/180
|
17
|
+
#define LAT_ORIG 46.5*M_PI/180
|
18
|
+
#define ct_x0 700000.0
|
19
|
+
#define ct_y0 6600000.0
|
10
20
|
|
11
|
-
#define
|
12
|
-
#define
|
21
|
+
#define DISPLAY_YGPoint(YGPoint) printf(#YGPoint" X:%f | Y:%f | Z:%f\n",YGPoint.x,YGPoint.y,YGPoint.z);
|
22
|
+
#define DISPLAY_YGPoint_REF(YGPoint) printf(#YGPoint" X:%f | Y:%f | Z:%f\n",YGPoint->x,YGPoint->y,YGPoint->z);
|
13
23
|
|
14
24
|
typedef enum {
|
15
25
|
LAMBERT_I=0,
|
@@ -18,14 +28,32 @@ typedef enum {
|
|
18
28
|
LAMBERT_IV=3,
|
19
29
|
LAMBERT_II_E=4,
|
20
30
|
LAMBERT_93= 5
|
21
|
-
}
|
31
|
+
} YGLambertZone;
|
32
|
+
|
33
|
+
typedef enum {
|
34
|
+
DEGREE,
|
35
|
+
GRAD,
|
36
|
+
RADIAN
|
37
|
+
} CoordUnit;
|
22
38
|
|
23
39
|
typedef struct {
|
24
40
|
double x;
|
25
41
|
double y;
|
26
42
|
double z;
|
27
|
-
|
43
|
+
CoordUnit unit;
|
44
|
+
} YGPoint;
|
28
45
|
|
46
|
+
typedef struct
|
47
|
+
{
|
48
|
+
double tx;
|
49
|
+
double ty;
|
50
|
+
double tz;
|
51
|
+
} YGTransform;
|
52
|
+
|
53
|
+
typedef YGPoint Vector;
|
54
|
+
|
55
|
+
YGPoint pointToRadian(YGPoint p);
|
56
|
+
YGPoint pointToDegree(YGPoint p);
|
29
57
|
|
30
58
|
/*
|
31
59
|
* ALGO0021 - Calcul de la grande Normale
|
@@ -34,16 +62,16 @@ typedef struct {
|
|
34
62
|
double lambert_normal(double lat, double a, double e);
|
35
63
|
|
36
64
|
/*
|
37
|
-
* Convert a
|
65
|
+
* Convert a YGPoint struct from one lambert zone to WGS84 (Rad)
|
38
66
|
*
|
39
67
|
*/
|
40
|
-
void lambert_to_wgs84(const
|
68
|
+
void lambert_to_wgs84(const YGPoint * org, YGPoint *dest, YGLambertZone zone);
|
41
69
|
|
42
70
|
/*
|
43
|
-
* Convert a
|
71
|
+
* Convert a YGPoint struct from one lambert zone to WGS84 (Deg)
|
44
72
|
*
|
45
73
|
*/
|
46
|
-
void lambert_to_wgs84_deg(const
|
74
|
+
void lambert_to_wgs84_deg(const YGPoint * org, YGPoint *dest, YGLambertZone zone);
|
47
75
|
|
48
76
|
/*
|
49
77
|
* ALGO0002
|
@@ -55,12 +83,12 @@ double lat_from_lat_iso(double lat_iso, double e, double eps);
|
|
55
83
|
* ALGO0012
|
56
84
|
*/
|
57
85
|
|
58
|
-
|
86
|
+
YGPoint cartesian_to_geographic(YGPoint org, double meridien, double a, double e , double eps);
|
59
87
|
|
60
88
|
/*
|
61
89
|
* ALGO004
|
62
90
|
*/
|
63
|
-
void lambert_to_geographic(const
|
91
|
+
void lambert_to_geographic(const YGPoint * org,YGPoint *dest, YGLambertZone zone, double lon_merid, double e, double eps);
|
64
92
|
|
65
93
|
/**
|
66
94
|
* ALGO0009 - Transformations geographiques -> cartésiennes
|
@@ -68,4 +96,26 @@ void lambert_to_geographic(const YGLambertPoint * org,YGLambertPoint *dest, Lamb
|
|
68
96
|
*
|
69
97
|
*/
|
70
98
|
|
71
|
-
|
99
|
+
YGPoint geographic_to_cartesian(double lon, double lat, double he, double a, double e);
|
100
|
+
|
101
|
+
/**
|
102
|
+
* ALGO13 Transformation de Coordonnées à 7 paramètres entre deux systèmes géodésiques
|
103
|
+
*/
|
104
|
+
|
105
|
+
YGPoint switch_geodesic_system(YGPoint u, Vector t, double d, Vector r);
|
106
|
+
|
107
|
+
/**
|
108
|
+
* Algo0001 Calcul de la latitude isomérique
|
109
|
+
*/
|
110
|
+
double lat_iso(double lat, double e);
|
111
|
+
|
112
|
+
/**
|
113
|
+
* Algo003
|
114
|
+
*/
|
115
|
+
YGPoint coord_transform(double e, double n, double c, double lambda_c, double x_s, double y_s , double lon, double lat);
|
116
|
+
|
117
|
+
/**
|
118
|
+
* Algo 01
|
119
|
+
*/
|
120
|
+
double latitude_iso_from_lat(double lat, double e);
|
121
|
+
#endif
|
@@ -0,0 +1,206 @@
|
|
1
|
+
|
2
|
+
#include "rgf93.h"
|
3
|
+
#include "config.h"
|
4
|
+
|
5
|
+
#include<stdio.h>
|
6
|
+
#include<stdlib.h>
|
7
|
+
#include<limits.h>
|
8
|
+
#include <string.h>
|
9
|
+
#include <math.h>
|
10
|
+
|
11
|
+
#define MAX_LINE_BUFFER 1024
|
12
|
+
#define MAX_PATH_SIZE 1024
|
13
|
+
#define DELTA_REALLOCATION 10
|
14
|
+
|
15
|
+
|
16
|
+
typedef struct {
|
17
|
+
|
18
|
+
double lon;
|
19
|
+
double lat;
|
20
|
+
double tx;
|
21
|
+
double ty;
|
22
|
+
double tz;
|
23
|
+
double precision;
|
24
|
+
} NTV2Reg;
|
25
|
+
|
26
|
+
static char currentNTVPath[OPEN_MAX];
|
27
|
+
static FILE * gridFD = NULL;
|
28
|
+
static char grd3dparams[4][MAX_LINE_BUFFER] = {{0}};
|
29
|
+
|
30
|
+
static NTV2Reg *regcache = NULL;
|
31
|
+
static int lastRegPos = 0;
|
32
|
+
static int regcacheSize = 0;
|
33
|
+
|
34
|
+
static int lastReadedLine;
|
35
|
+
|
36
|
+
|
37
|
+
NTV2Reg regFromLine(const char * line)
|
38
|
+
{
|
39
|
+
char *sep = " ";
|
40
|
+
char *buffer = malloc(strlen(line)* sizeof(char));
|
41
|
+
strcpy(buffer, line);
|
42
|
+
|
43
|
+
NTV2Reg reg = {0};
|
44
|
+
|
45
|
+
strtok(buffer, sep);
|
46
|
+
|
47
|
+
reg.lon = strtod(strtok(NULL, sep), NULL);
|
48
|
+
reg.lat = strtod(strtok(NULL, sep), NULL);
|
49
|
+
reg.tx = strtod(strtok(NULL, sep), NULL);
|
50
|
+
reg.ty = strtod(strtok(NULL, sep), NULL);
|
51
|
+
reg.tz = strtod(strtok(NULL, sep), NULL);
|
52
|
+
reg.precision = strtod(strtok(NULL, sep), NULL);
|
53
|
+
|
54
|
+
return reg;
|
55
|
+
}
|
56
|
+
|
57
|
+
void addRegToCache(NTV2Reg reg)
|
58
|
+
{
|
59
|
+
if(!regcache)
|
60
|
+
{
|
61
|
+
regcache = malloc(DELTA_REALLOCATION*sizeof(NTV2Reg));
|
62
|
+
regcacheSize = DELTA_REALLOCATION;
|
63
|
+
lastRegPos = 0;
|
64
|
+
}
|
65
|
+
|
66
|
+
if(lastRegPos > regcacheSize-1)
|
67
|
+
{
|
68
|
+
|
69
|
+
NTV2Reg * newLoc =realloc(regcache, (regcacheSize+DELTA_REALLOCATION)*sizeof(NTV2Reg));
|
70
|
+
|
71
|
+
regcache = newLoc;
|
72
|
+
regcacheSize+=DELTA_REALLOCATION;
|
73
|
+
|
74
|
+
}
|
75
|
+
|
76
|
+
regcache[lastRegPos] = reg;
|
77
|
+
lastRegPos++;
|
78
|
+
}
|
79
|
+
|
80
|
+
|
81
|
+
int loadGrid()
|
82
|
+
{
|
83
|
+
snprintf(currentNTVPath,50,"%s/%s",resource_file_path,"gr3df97a.txt");
|
84
|
+
lastReadedLine = 0;
|
85
|
+
|
86
|
+
gridFD = fopen(currentNTVPath,"r");
|
87
|
+
|
88
|
+
if(!gridFD)
|
89
|
+
{
|
90
|
+
printf("Could not open grid file at path :%s\n", currentNTVPath);
|
91
|
+
return -1;
|
92
|
+
}
|
93
|
+
|
94
|
+
char line[MAX_LINE_BUFFER];
|
95
|
+
while(lastReadedLine < 4)
|
96
|
+
{
|
97
|
+
fgets(line, MAX_LINE_BUFFER, gridFD);
|
98
|
+
++lastReadedLine;
|
99
|
+
}
|
100
|
+
char line_buffer[MAX_LINE_BUFFER] = {0};
|
101
|
+
|
102
|
+
while(NULL != fgets(line_buffer, MAX_LINE_BUFFER, gridFD))
|
103
|
+
{
|
104
|
+
NTV2Reg reg = regFromLine(line_buffer);
|
105
|
+
addRegToCache(reg);
|
106
|
+
}
|
107
|
+
|
108
|
+
return 0;
|
109
|
+
}
|
110
|
+
|
111
|
+
|
112
|
+
void printParameters()
|
113
|
+
{
|
114
|
+
printf("===== Parameters =====\n");
|
115
|
+
printf("%s\n", grd3dparams[0]);
|
116
|
+
printf("%s\n", grd3dparams[1]);
|
117
|
+
printf("%s\n", grd3dparams[2]);
|
118
|
+
printf("%s\n", grd3dparams[3]);
|
119
|
+
|
120
|
+
}
|
121
|
+
|
122
|
+
void printReg(NTV2Reg reg)
|
123
|
+
{
|
124
|
+
printf("LON:%f - LAT:%f - TX:%f - TY:%f - TZ:%f - PRE:%f\n",reg.lon,reg.lat,reg.tx,reg.ty,reg.tz,reg.precision);
|
125
|
+
}
|
126
|
+
void unloadGrid()
|
127
|
+
{
|
128
|
+
fclose(gridFD);
|
129
|
+
free(regcache);
|
130
|
+
}
|
131
|
+
|
132
|
+
void regToBuff(double *buf,NTV2Reg reg)
|
133
|
+
{
|
134
|
+
buf[0] = reg.tx;
|
135
|
+
buf[1] = reg.ty;
|
136
|
+
buf[2] = reg.tz;
|
137
|
+
}
|
138
|
+
|
139
|
+
void ntvreg_around_point(const YGPoint pt, NTV2Reg *t1, NTV2Reg *t2, NTV2Reg * t3, NTV2Reg * t4)
|
140
|
+
{
|
141
|
+
|
142
|
+
NTV2Reg *a = regcache,*b = regcache+1;
|
143
|
+
|
144
|
+
while(!(pt.x >= a->lon && pt.x <= b->lon))
|
145
|
+
{
|
146
|
+
++a;
|
147
|
+
++b;
|
148
|
+
}
|
149
|
+
|
150
|
+
NTV2Reg *searchReg = a;
|
151
|
+
|
152
|
+
while (searchReg->lat > pt.y)
|
153
|
+
{
|
154
|
+
searchReg--;
|
155
|
+
}
|
156
|
+
|
157
|
+
*t1 = *searchReg;
|
158
|
+
*t2 = *(++searchReg);
|
159
|
+
|
160
|
+
searchReg = b;
|
161
|
+
|
162
|
+
while (searchReg->lat < pt.y)
|
163
|
+
{
|
164
|
+
searchReg++;
|
165
|
+
}
|
166
|
+
|
167
|
+
*t4 = *(searchReg);
|
168
|
+
*t3 = *(--searchReg);
|
169
|
+
|
170
|
+
}
|
171
|
+
YGTransform ntf_to_rgf93(YGPoint pt)
|
172
|
+
{
|
173
|
+
if(!gridFD)
|
174
|
+
loadGrid();
|
175
|
+
|
176
|
+
NTV2Reg t1,t2,t3,t4;
|
177
|
+
|
178
|
+
|
179
|
+
ntvreg_around_point(pt, &t1, &t2, &t3, &t4);
|
180
|
+
|
181
|
+
double x = (pt.x - t1.lon)/(t3.lon - t1.lon);
|
182
|
+
double y = (pt.y - t1.lat)/(t2.lat - t1.lat);
|
183
|
+
|
184
|
+
|
185
|
+
double d[3], t1Buf[3], t2Buf[3], t3Buf[3], t4Buf[3];
|
186
|
+
|
187
|
+
regToBuff(t1Buf,t1);
|
188
|
+
regToBuff(t2Buf,t2);
|
189
|
+
regToBuff(t3Buf,t3);
|
190
|
+
regToBuff(t4Buf,t4);
|
191
|
+
|
192
|
+
for(int i = 0; i< 3; ++i)
|
193
|
+
{
|
194
|
+
d[i] = (1-x)*(1-y)*t1Buf[i] + (1-x)*y*t2Buf[i] + (1-y)*x*t3Buf[i] + x*y*t4Buf[i];
|
195
|
+
}
|
196
|
+
|
197
|
+
YGTransform tm ={d[0],d[1],d[2]};
|
198
|
+
return tm;
|
199
|
+
}
|
200
|
+
|
201
|
+
YGTransform rgf93_to_ntf(YGPoint pt)
|
202
|
+
{
|
203
|
+
YGTransform tm = ntf_to_rgf93(pt);
|
204
|
+
YGTransform val = {-1*tm.tx,-1*tm.ty,-1*tm.tz};
|
205
|
+
return val;
|
206
|
+
}
|
@@ -4,6 +4,7 @@
|
|
4
4
|
#include <math.h>
|
5
5
|
#include <stdlib.h>
|
6
6
|
#include "../src/lambert.h"
|
7
|
+
#include "../src/rgf93.h"
|
7
8
|
|
8
9
|
#define DISPLAY_POINT(point) printf(#point" X:%f | Y:%f | Z:%f\n",point.x,point.y,point.z);
|
9
10
|
|
@@ -30,9 +31,9 @@ double rounded_down(double val,int n){
|
|
30
31
|
|
31
32
|
void test_lambert_deg(void)
|
32
33
|
{
|
33
|
-
|
34
|
-
|
35
|
-
|
34
|
+
YGPoint org = {994300.623,113409.981,0};
|
35
|
+
YGPoint dest = {0,0,0};
|
36
|
+
YGLambertZone zone = LAMBERT_I;
|
36
37
|
|
37
38
|
lambert_to_wgs84_deg(&org, &dest, zone);
|
38
39
|
printf("(Deg)Lon:%.11f - Lat:%.11f - H:%.11f\n",dest.x,dest.y,dest.z);
|
@@ -41,12 +42,11 @@ void test_lambert_deg(void)
|
|
41
42
|
void test_lambert(void)
|
42
43
|
{
|
43
44
|
|
44
|
-
|
45
|
-
|
46
|
-
|
45
|
+
YGPoint org = {999534.581,112186.569,0};
|
46
|
+
YGPoint dest = {0,0,0};
|
47
|
+
YGLambertZone zone = LAMBERT_I;
|
47
48
|
|
48
49
|
lambert_to_wgs84(&org, &dest, zone);
|
49
|
-
|
50
50
|
}
|
51
51
|
|
52
52
|
void test_algo009(void)
|
@@ -61,7 +61,7 @@ void test_algo009(void)
|
|
61
61
|
unsigned int i;
|
62
62
|
for (i =0; i < 3;++i)
|
63
63
|
{
|
64
|
-
|
64
|
+
YGPoint pt = geographic_to_cartesian(lon[i],lat[i],he[i],a[i],e[i]);
|
65
65
|
DISPLAY_POINT(pt);
|
66
66
|
}
|
67
67
|
|
@@ -122,8 +122,8 @@ void test_algo0012(void)
|
|
122
122
|
double ign_eps = 1e-11;
|
123
123
|
for(i=0; i < 3;++i)
|
124
124
|
{
|
125
|
-
|
126
|
-
|
125
|
+
YGPoint sample = {x[i],y[i],z[i]};
|
126
|
+
YGPoint val ;
|
127
127
|
val = cartesian_to_geographic(sample,LON_MERID_PARIS,a[i],e[i],eps[i]);
|
128
128
|
|
129
129
|
// printf("X Computed:%.11f - Expected:%.11f\n",val.x,lon[i]);
|
@@ -139,9 +139,9 @@ void test_algo0012(void)
|
|
139
139
|
void test_algo004(void)
|
140
140
|
{
|
141
141
|
|
142
|
-
|
143
|
-
|
144
|
-
|
142
|
+
YGPoint org = {1029705.083,272723.849,0};
|
143
|
+
YGPoint dest = {0,0,0};
|
144
|
+
YGPoint expected = {0.145512099,0.872664626};
|
145
145
|
|
146
146
|
|
147
147
|
lambert_to_geographic(&org,&dest, LAMBERT_I, LON_MERID_GREENWICH,E_CLARK_IGN,1e-9);
|
@@ -150,6 +150,35 @@ void test_algo004(void)
|
|
150
150
|
CU_ASSERT(fabs(dest.y - expected.y) <= 1e-9);
|
151
151
|
}
|
152
152
|
|
153
|
+
|
154
|
+
void testBug2(void)
|
155
|
+
{
|
156
|
+
YGPoint org = {668832.5384,6950138.7285,0};
|
157
|
+
YGPoint dest = {0,0,0};
|
158
|
+
YGLambertZone zone= LAMBERT_93;
|
159
|
+
|
160
|
+
lambert_to_wgs84_deg(&org,&dest,zone);
|
161
|
+
printf("Lat:%.9f - Lon:%.9f",dest.y,dest.x);
|
162
|
+
|
163
|
+
}
|
164
|
+
void testOpenGrid(void)
|
165
|
+
{
|
166
|
+
YGPoint org = {.x=2.424971108, .y=48.844445839,.z=0,.unit=DEGREE};
|
167
|
+
|
168
|
+
YGTransform tr = rgf93_to_ntf(org);
|
169
|
+
|
170
|
+
YGPoint t = {tr.tx,tr.ty,tr.tz};
|
171
|
+
YGPoint null= {0,0,0};
|
172
|
+
|
173
|
+
org = pointToRadian(org);
|
174
|
+
org = geographic_to_cartesian(org.x,org.y,org.z,A_WGS84,E_WGS84);
|
175
|
+
|
176
|
+
org = switch_geodesic_system(org, t, 0, null);
|
177
|
+
org = cartesian_to_geographic(org, LON_MERID_PARIS, A_CLARK_IGN, E_CLARK_IGN, DEFAULT_EPS);
|
178
|
+
|
179
|
+
org = pointToDegree(org);
|
180
|
+
}
|
181
|
+
|
153
182
|
int main(int argc, char **argv){
|
154
183
|
|
155
184
|
CU_pSuite pSuite = NULL;
|
@@ -171,7 +200,9 @@ int main(int argc, char **argv){
|
|
171
200
|
NULL == CU_add_test(pSuite,"Test Algo004",test_algo004) ||
|
172
201
|
NULL == CU_add_test(pSuite,"Test algo0021",test_algo0021) ||
|
173
202
|
NULL == CU_add_test(pSuite,"test_algo009",test_algo009) ||
|
174
|
-
NULL == CU_add_test(pSuite,"
|
203
|
+
NULL == CU_add_test(pSuite,"test_lambert_deg",test_lambert_deg) ||
|
204
|
+
NULL == CU_add_test(pSuite,"testBug2",testBug2) ||
|
205
|
+
NULL == CU_add_test(pSuite,"testNTFRGF93",testOpenGrid) ||
|
175
206
|
NULL == CU_add_test(pSuite, "Test lambert", test_lambert)
|
176
207
|
)
|
177
208
|
{
|
@@ -30,14 +30,14 @@ static VALUE p_init(int argc, VALUE* argv, VALUE self)
|
|
30
30
|
static VALUE p_convert(VALUE self,VALUE zone){
|
31
31
|
|
32
32
|
double x, y, z;
|
33
|
-
|
33
|
+
YGLambertZone cZone = NUM2INT(zone);
|
34
34
|
|
35
35
|
x = NUM2DBL(rb_iv_get(self,"@x"));
|
36
36
|
y = NUM2DBL(rb_iv_get(self,"@y"));
|
37
37
|
z = NUM2DBL(rb_iv_get(self,"@z"));
|
38
38
|
|
39
|
-
|
40
|
-
|
39
|
+
YGPoint org = {x,y,z};
|
40
|
+
YGPoint dest = {0,0,0};
|
41
41
|
|
42
42
|
lambert_to_wgs84_deg(&org,&dest,cZone);
|
43
43
|
|
@@ -66,4 +66,4 @@ void Init_lambert_ruby(void) {
|
|
66
66
|
rb_define_const(rb_mLambert,"LambertIV",INT2NUM(LAMBERT_IV));
|
67
67
|
rb_define_const(rb_mLambert,"LambertIIExtended",INT2NUM(LAMBERT_II_E));
|
68
68
|
rb_define_const(rb_mLambert,"Lambert93",INT2NUM(LAMBERT_93));
|
69
|
-
}
|
69
|
+
}
|
metadata
CHANGED
@@ -1,17 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lambert_ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yannick Heinrich
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description: Ruby wrapper for the lambert library
|
14
|
-
to WGS84. It wraps the original C files with a basic Ruby interface.
|
13
|
+
description: Ruby wrapper for the lambert library
|
15
14
|
email: yannick.heinrich@gmail.com
|
16
15
|
executables: []
|
17
16
|
extensions:
|
@@ -20,15 +19,16 @@ extra_rdoc_files: []
|
|
20
19
|
files:
|
21
20
|
- lib/lambert_ruby.rb
|
22
21
|
- ext/lambert_ruby/lambert/src/lambert.c
|
22
|
+
- ext/lambert_ruby/lambert/src/rgf93.c
|
23
23
|
- ext/lambert_ruby/lambert/tests/test_lambert_cunit.c
|
24
24
|
- ext/lambert_ruby/lambert.c
|
25
25
|
- ext/lambert_ruby/lambert_ruby.c
|
26
26
|
- ext/lambert_ruby/lambert/src/lambert.h
|
27
|
+
- ext/lambert_ruby/lambert/src/rgf93.h
|
27
28
|
- ext/lambert_ruby/lambert.h
|
28
29
|
- ext/lambert_ruby/extconf.rb
|
29
|
-
homepage:
|
30
|
-
licenses:
|
31
|
-
- GPL-2
|
30
|
+
homepage: http://rubygems.org/gems/lambert_ruby
|
31
|
+
licenses: []
|
32
32
|
metadata: {}
|
33
33
|
post_install_message:
|
34
34
|
rdoc_options: []
|
@@ -36,12 +36,12 @@ require_paths:
|
|
36
36
|
- lib
|
37
37
|
required_ruby_version: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
42
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
|
-
- -
|
44
|
+
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '0'
|
47
47
|
requirements: []
|
@@ -49,6 +49,5 @@ rubyforge_project:
|
|
49
49
|
rubygems_version: 2.0.3
|
50
50
|
signing_key:
|
51
51
|
specification_version: 4
|
52
|
-
summary: Ruby wrapper for the lambert library
|
53
|
-
WGS84
|
52
|
+
summary: Ruby wrapper for the lambert library
|
54
53
|
test_files: []
|