File: proj_transform2.t

package info (click to toggle)
pdl 1%3A2.4.7%2Bdfsg-2
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 10,128 kB
  • ctags: 5,821
  • sloc: perl: 26,328; fortran: 13,113; ansic: 9,378; makefile: 71; sh: 50; sed: 6
file content (383 lines) | stat: -rw-r--r-- 10,873 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
#!/usr/bin/perl

#
# t/proj_transform.t
#
# Test program for the PDL::Transform::Proj4 library
#
# Judd Taylor, Orbital Systems, Ltd.
# judd.t@orbtialsystems.com
#
# 17 April 2008
#

use PDL;
use Test::More;

BEGIN
{   
    eval( " use PDL::Transform::Proj4; " );
    if( !($@) )
    {
       if ( $PDL::Bad::Status ) {
          plan tests => 20;
       }
       else {
          plan skip_all => "PDL::Transform::Proj4 requires the PDL::Bad module!";
       }
    }
    else
    {
        plan skip_all => "PDL::Transform::Proj4 requires the PDL::Transform::Proj4 module!";
    }
}

#
# Test integration with PDL::Transform
#

my $im = sequence(2048,1024)/2048/1024*255.99;
$im = $im->byte;
my $h = $im->fhdr;

$h->{SIMPLE} = 'T';
$h->{NAXIS} = 3;
$h->{NAXIS1}=2048;          $h->{CRPIX1}=1024.5;    $h->{CRVAL1}=0;
$h->{NAXIS2}=1024;          $h->{CRPIX2}=512.5;     $h->{CRVAL2}=0;
$h->{NAXIS3}=3,             $h->{CRPIX3}=1;         $h->{CRVAL3}=0;
$h->{CTYPE1}='Longitude';   $h->{CUNIT1}='degrees'; $h->{CDELT1}=180/1024.0;
$h->{CTYPE2}='Latitude';    $h->{CUNIT2}='degrees'; $h->{CDELT2}=180/1024.0;
$h->{CTYPE3}='RGB';         $h->{CUNIT3}='index';   $h->{CDELT3}=1.0;
$h->{COMMENT}='Plate Caree Projection';
$h->{HISTORY}='PDL Distribution Image, derived from NASA/MODIS data',

$im->hdrcpy(1);
$im->badflag(1);

SKIP: {

   my $map = $im->copy;

   my $map_size = [500,500];

   my @slices = ( 
      "245:254,68:77,(0)",
      "128:137,272:281,(0)",
      "245:254,262:271,(0)",
      "390:399,245:254,(0)",
      "271:280,464:473,(0)" 
   );


   ##############
   # TESTS 3-7: #
   ##############
   # Get EQC reference data:
   my @ref_eqc_slices = get_ref_eqc_slices();

   # Check EQC map against reference:
   my $eqc_opts = "+proj=eqc +lon_0=0";
   my $eqc = $map->map( t_proj( proj_params => $eqc_opts ), $map_size );
   foreach my $i ( 0 .. $#slices )
   {
      my $str = $slices[$i];
      my $slice = $eqc->slice($str);
      # ok( "$slice" eq $ref_eqc_slices[$i], "check ref_eqc for slices[$i]" );
      is( "$slice", $ref_eqc_slices[$i], "check ref_eqc for slices[$i]" );
   }

   ###############
   # TESTS 8-12: #
   ###############
   # Get Ortho reference data:
   my @ref_ortho_slices = get_ref_ortho_slices();

   # Check Ortho map against reference:
   my $ortho_opts = "+proj=ortho +ellps=WGS84 +lon_0=-90 +lat_0=40";
   my $ortho = $map->map( t_proj( proj_params => $ortho_opts ), $map_size );
   foreach my $i ( 0 .. $#slices )
   {
      my $str = $slices[$i];
      my $slice = $ortho->slice($str);
      # ok( "$slice" eq $ref_ortho_slices[$i], "check ref_ortho for slices[$i]" );
      is( "$slice", $ref_ortho_slices[$i], "check ref_ortho for slices[$i]" );
   }

   #
   # Test the auto-generated methods:
   #
   ################
   # TESTS 13-17: #
   ################
   my $ortho2 = $map->map( t_proj_ortho( ellps => 'WGS84', lon_0 => -90, lat_0 => 40 ), $map_size );
   foreach my $i ( 0 .. $#slices )
   {
      my $str = $slices[$i];
      my $slice = $ortho2->slice($str);
      # ok( "$slice" eq $ref_ortho_slices[$i], "check ref_ortho2 for slices[$i]" );
      is( "$slice", $ref_ortho_slices[$i], "check ref_ortho2 for slices[$i]" );
   }

   ################
   # TESTS 18-22: #
   ################
   # Get Robinson reference data:
   my @ref_robin_slices = get_ref_robin_slices();

   # Check Robinson map against reference:
   my $robin = $map->map( t_proj_robin( ellps => 'WGS84', over => 1 ), $map_size );
   foreach my $i ( 0 .. $#slices )
   {
      my $str = $slices[$i];
      my $slice = $robin->slice($str);
      # ok( "$slice" eq $ref_robin_slices[$i], "check ref_robin for slices[$i]" );
      is( "$slice", $ref_robin_slices[$i], "check ref_robin for slices[$i]" );
   }

}

exit(0);


sub get_ref_robin_slices
{
    my @slices = ();
    push(@slices, <<"END");

[
 [43 43 43 43 43 43 43 43 43 43]
 [44 44 44 44 44 44 44 44 44 44]
 [44 44 44 44 44 44 44 44 44 44]
 [45 45 45 45 45 45 45 45 45 45]
 [45 45 45 45 45 45 45 45 45 45]
 [46 46 46 46 46 46 46 46 46 46]
 [46 46 46 46 46 46 46 46 46 46]
 [47 47 47 47 47 47 47 47 47 47]
 [47 47 47 47 47 47 47 47 47 47]
 [48 48 48 48 48 48 48 48 48 48]
]
END
    push(@slices, <<"END");

[
 [138 138 138 138 138 138 138 138 138 138]
 [138 138 138 138 138 138 138 138 138 138]
 [139 139 139 139 139 139 139 139 139 139]
 [139 139 139 139 139 139 139 139 139 139]
 [140 140 140 140 140 140 140 140 140 140]
 [140 140 140 140 140 140 140 140 140 140]
 [141 141 141 141 141 141 141 141 141 141]
 [141 141 141 141 141 141 141 141 141 141]
 [142 142 142 142 142 142 142 142 142 142]
 [142 142 142 142 142 142 142 142 142 142]
]
END
    push(@slices, <<"END");

[
 [133 133 133 133 133 133 133 133 133 133]
 [134 134 134 134 134 134 134 134 134 134]
 [134 134 134 134 134 134 134 134 134 134]
 [135 135 135 135 135 135 135 135 135 135]
 [135 135 135 135 135 135 135 135 135 135]
 [136 136 136 136 136 136 136 136 136 136]
 [136 136 136 136 136 136 136 136 136 136]
 [136 136 136 136 136 136 136 136 136 136]
 [137 137 137 137 137 137 137 137 137 137]
 [137 137 137 137 137 137 137 137 137 137]
]
END
    push(@slices, <<"END");

[
 [125 125 125 125 125 125 125 125 125 125]
 [126 126 126 126 126 126 126 126 126 126]
 [126 126 126 126 126 126 126 126 126 126]
 [127 127 127 127 127 127 127 127 127 127]
 [127 127 127 127 127 127 127 127 127 127]
 [128 128 128 128 128 128 128 128 128 128]
 [128 128 128 128 128 128 128 128 128 128]
 [129 129 129 129 129 129 129 129 129 129]
 [129 129 129 129 129 129 129 129 129 129]
 [130 130 130 130 130 130 130 130 130 130]
]
END
    push(@slices, <<"END");

[
 [229 229 229 229 229 229 229 229 229 229]
 [230 230 230 230 230 230 230 230 230 230]
 [230 230 230 230 230 230 230 230 230 230]
 [231 231 231 231 231 231 231 231 231 231]
 [231 231 231 231 231 231 231 231 231 231]
 [232 232 232 232 232 232 232 232 232 232]
 [232 232 232 232 232 232 232 232 232 232]
 [233 233 233 233 233 233 233 233 233 233]
 [234 234 234 234 234 234 234 234 234 234]
 [234 234 234 234 234 234 234 234 234 234]
]
END
    return @slices;
} # End of get_ref_robin_slices()...

sub get_ref_ortho_slices
{
    my @slices = ();
    push(@slices, <<"END");

[
 [118 118 118 118 118 118 118 118 118 118]
 [119 119 119 119 119 119 119 119 119 119]
 [119 119 119 119 119 119 119 119 119 119]
 [120 120 120 120 120 120 120 120 120 120]
 [120 120 120 120 120 120 120 120 120 120]
 [121 121 121 121 121 121 121 121 121 121]
 [121 121 121 121 121 121 121 121 121 121]
 [121 121 121 121 121 121 121 121 121 121]
 [122 122 122 122 122 122 122 122 122 122]
 [122 122 122 122 122 122 122 122 122 122]
]
END
    push(@slices, <<"END");

[
 [183 183 183 183 183 184 184 184 184 184]
 [183 183 183 184 184 184 184 184 184 184]
 [183 184 184 184 184 184 184 184 185 185]
 [184 184 184 184 184 184 185 185 185 185]
 [184 184 184 184 185 185 185 185 185 185]
 [184 184 185 185 185 185 185 185 185 186]
 [185 185 185 185 185 185 185 186 186 186]
 [185 185 185 185 185 186 186 186 186 186]
 [185 185 185 186 186 186 186 186 186 186]
 [185 186 186 186 186 186 186 186 187 187]
]
END
    push(@slices, <<"END");

[
 [188 188 188 188 188 188 188 188 188 188]
 [189 189 189 189 189 189 189 189 189 189]
 [189 189 189 189 189 189 189 189 189 189]
 [189 189 189 189 189 189 189 189 189 189]
 [190 190 190 190 190 190 190 190 190 190]
 [190 190 190 190 190 190 190 190 190 190]
 [190 190 190 190 190 190 190 190 190 190]
 [191 191 191 191 191 191 191 191 191 191]
 [191 191 191 191 191 191 191 191 191 191]
 [191 191 191 191 191 191 191 191 191 191]
]
END
    push(@slices, <<"END");

[
 [172 172 172 171 171 171 171 171 170 170]
 [172 172 172 172 171 171 171 171 171 171]
 [172 172 172 172 172 172 171 171 171 171]
 [173 173 172 172 172 172 172 172 171 171]
 [173 173 173 173 172 172 172 172 172 171]
 [173 173 173 173 173 172 172 172 172 172]
 [174 173 173 173 173 173 173 172 172 172]
 [174 174 174 173 173 173 173 173 173 172]
 [174 174 174 174 174 173 173 173 173 173]
 [175 174 174 174 174 174 173 173 173 173]
]
END
    push(@slices, <<"END");

[
 [240 240 240 240 240 239 239 239 239 238]
 [240 240 239 239 239 239 239 238 238 238]
 [239 239 239 239 238 238 238 238 238 237]
 [239 238 238 238 238 238 237 237 237 237]
 [238 238 238 237 237 237 237 237 236 236]
 [237 237 237 237 237 236 236 236 236 236]
 [237 237 236 236 236 236 236 235 235 235]
 [236 236 236 236 235 235 235 235 234 234]
 [235 235 235 235 235 234 234 234 234 234]
 [235 235 234 234 234 234 234 233 233 233]
]
END
    return @slices;
} # End of get_ref_ortho_slices()...

sub get_ref_eqc_slices
{
    my @slices = ();
    push(@slices, <<"END");

[
 [35 35 35 35 35 35 35 35 35 35]
 [36 36 36 36 36 36 36 36 36 36]
 [36 36 36 36 36 36 36 36 36 36]
 [37 37 37 37 37 37 37 37 37 37]
 [37 37 37 37 37 37 37 37 37 37]
 [38 38 38 38 38 38 38 38 38 38]
 [38 38 38 38 38 38 38 38 38 38]
 [39 39 39 39 39 39 39 39 39 39]
 [39 39 39 39 39 39 39 39 39 39]
 [40 40 40 40 40 40 40 40 40 40]
]
END
    push(@slices, <<"END");

[
 [139 139 139 139 139 139 139 139 139 139]
 [140 140 140 140 140 140 140 140 140 140]
 [140 140 140 140 140 140 140 140 140 140]
 [141 141 141 141 141 141 141 141 141 141]
 [141 141 141 141 141 141 141 141 141 141]
 [142 142 142 142 142 142 142 142 142 142]
 [142 142 142 142 142 142 142 142 142 142]
 [143 143 143 143 143 143 143 143 143 143]
 [143 143 143 143 143 143 143 143 143 143]
 [144 144 144 144 144 144 144 144 144 144]
]
END
    push(@slices, <<"END");

[
 [134 134 134 134 134 134 134 134 134 134]
 [135 135 135 135 135 135 135 135 135 135]
 [135 135 135 135 135 135 135 135 135 135]
 [136 136 136 136 136 136 136 136 136 136]
 [136 136 136 136 136 136 136 136 136 136]
 [137 137 137 137 137 137 137 137 137 137]
 [137 137 137 137 137 137 137 137 137 137]
 [138 138 138 138 138 138 138 138 138 138]
 [138 138 138 138 138 138 138 138 138 138]
 [139 139 139 139 139 139 139 139 139 139]
]
END
    push(@slices, <<"END");

[
 [125 125 125 125 125 125 125 125 125 125]
 [126 126 126 126 126 126 126 126 126 126]
 [126 126 126 126 126 126 126 126 126 126]
 [127 127 127 127 127 127 127 127 127 127]
 [127 127 127 127 127 127 127 127 127 127]
 [128 128 128 128 128 128 128 128 128 128]
 [128 128 128 128 128 128 128 128 128 128]
 [129 129 129 129 129 129 129 129 129 129]
 [129 129 129 129 129 129 129 129 129 129]
 [130 130 130 130 130 130 130 130 130 130]
]
END
    push(@slices, <<"END");

[
 [237 237 237 237 237 237 237 237 237 237]
 [238 238 238 238 238 238 238 238 238 238]
 [238 238 238 238 238 238 238 238 238 238]
 [239 239 239 239 239 239 239 239 239 239]
 [239 239 239 239 239 239 239 239 239 239]
 [240 240 240 240 240 240 240 240 240 240]
 [240 240 240 240 240 240 240 240 240 240]
 [241 241 241 241 241 241 241 241 241 241]
 [241 241 241 241 241 241 241 241 241 241]
 [242 242 242 242 242 242 242 242 242 242]
]
END
    return @slices;
} # End of get_ref_eqc_slices()...