| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package Alien::Proj4; |
|
2
|
|
|
|
|
|
|
|
|
3
|
4
|
|
|
4
|
|
445490
|
use strict; |
|
|
4
|
|
|
|
|
32
|
|
|
|
4
|
|
|
|
|
126
|
|
|
4
|
4
|
|
|
4
|
|
21
|
use warnings; |
|
|
4
|
|
|
|
|
8
|
|
|
|
4
|
|
|
|
|
121
|
|
|
5
|
4
|
|
|
4
|
|
870
|
use parent qw( Alien::Base ); |
|
|
4
|
|
|
|
|
657
|
|
|
|
4
|
|
|
|
|
28
|
|
|
6
|
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
our $VERSION = '2.019113'; |
|
8
|
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
# most of the following are for compat with PDLA Makefiles |
|
10
|
|
|
|
|
|
|
# and should not be used by other code |
|
11
|
0
|
|
|
0
|
0
|
0
|
sub installed {1} |
|
12
|
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
sub import { |
|
14
|
|
|
|
|
|
|
# do nothing |
|
15
|
4
|
|
|
4
|
|
3746
|
return; |
|
16
|
|
|
|
|
|
|
} |
|
17
|
|
|
|
|
|
|
|
|
18
|
|
|
|
|
|
|
sub default_lib { |
|
19
|
0
|
|
|
0
|
0
|
0
|
return; |
|
20
|
|
|
|
|
|
|
} |
|
21
|
|
|
|
|
|
|
|
|
22
|
|
|
|
|
|
|
sub default_inc { |
|
23
|
0
|
|
|
0
|
0
|
0
|
return; |
|
24
|
|
|
|
|
|
|
} |
|
25
|
|
|
|
|
|
|
|
|
26
|
|
|
|
|
|
|
sub libflags { |
|
27
|
0
|
|
|
0
|
0
|
0
|
my ($class) = @_; |
|
28
|
0
|
|
|
|
|
0
|
my $flags = join ' ', $class->libs; |
|
29
|
0
|
|
|
|
|
0
|
return $flags; |
|
30
|
|
|
|
|
|
|
} |
|
31
|
|
|
|
|
|
|
|
|
32
|
|
|
|
|
|
|
sub incflags { |
|
33
|
0
|
|
|
0
|
0
|
0
|
my ($class) = @_; |
|
34
|
0
|
|
|
|
|
0
|
my $flags = $class->cflags; |
|
35
|
0
|
|
|
|
|
0
|
return $flags; |
|
36
|
|
|
|
|
|
|
} |
|
37
|
|
|
|
|
|
|
|
|
38
|
|
|
|
|
|
|
# dup of code currently in PDLA::GIS::Proj |
|
39
|
|
|
|
|
|
|
sub load_projection_descriptions { |
|
40
|
1
|
|
|
1
|
0
|
3
|
my ($class) = @_; |
|
41
|
1
|
|
|
|
|
3
|
my $incflags = $class->cflags; |
|
42
|
1
|
|
|
|
|
148
|
my $libflags = $class->libs; |
|
43
|
|
|
|
|
|
|
|
|
44
|
1
|
|
|
|
|
820
|
require Inline; |
|
45
|
1
|
50
|
|
|
|
39561
|
Inline->bind(C => <<'EOF', inc => $incflags, libs => $libflags) unless defined &list_projections; |
|
46
|
|
|
|
|
|
|
#include "projects.h" |
|
47
|
|
|
|
|
|
|
HV *list_projections() { |
|
48
|
|
|
|
|
|
|
struct PJ_LIST *lp; |
|
49
|
|
|
|
|
|
|
SV* scalar_val; |
|
50
|
|
|
|
|
|
|
HV *hv = newHV(); |
|
51
|
|
|
|
|
|
|
for (lp = pj_get_list_ref() ; lp->id ; ++lp) { |
|
52
|
|
|
|
|
|
|
scalar_val = newSVpv( *lp->descr, 0 ); |
|
53
|
|
|
|
|
|
|
hv_store( hv, lp->id, strlen( lp->id ), scalar_val, 0 ); |
|
54
|
|
|
|
|
|
|
} |
|
55
|
|
|
|
|
|
|
return hv; |
|
56
|
|
|
|
|
|
|
} |
|
57
|
|
|
|
|
|
|
EOF |
|
58
|
1
|
|
|
|
|
1530284
|
list_projections(); |
|
59
|
|
|
|
|
|
|
} |
|
60
|
|
|
|
|
|
|
|
|
61
|
|
|
|
|
|
|
# dup of code currently in PDLA::GIS::Proj |
|
62
|
|
|
|
|
|
|
sub load_projection_information { |
|
63
|
1
|
|
|
1
|
0
|
41615
|
my ($class) = @_; |
|
64
|
1
|
|
|
|
|
3
|
my $descriptions = $class->load_projection_descriptions(); |
|
65
|
1
|
|
|
|
|
36
|
my $info = {}; |
|
66
|
1
|
|
|
|
|
32
|
foreach my $projection ( keys %$descriptions ) { |
|
67
|
143
|
|
|
|
|
274
|
my $description = $descriptions->{$projection}; |
|
68
|
143
|
|
|
|
|
329
|
my @lines = split( /\n/, $description ); |
|
69
|
143
|
|
|
|
|
227
|
chomp @lines; |
|
70
|
|
|
|
|
|
|
# skip conversion entries if they appear |
|
71
|
143
|
50
|
|
|
|
300
|
next if !defined $lines[1]; |
|
72
|
|
|
|
|
|
|
|
|
73
|
143
|
|
|
|
|
211
|
my $hash = {}; |
|
74
|
143
|
|
|
|
|
284
|
$hash->{CODE} = $projection; |
|
75
|
|
|
|
|
|
|
# Full name of this projection: |
|
76
|
143
|
|
|
|
|
224
|
$hash->{NAME} = $lines[0]; |
|
77
|
|
|
|
|
|
|
# The second line is usually a list of projection types this one is: |
|
78
|
143
|
|
|
|
|
198
|
my $temp = $lines[1]; |
|
79
|
143
|
|
|
|
|
277
|
$temp =~ s/no inv\.*,*//; |
|
80
|
143
|
|
|
|
|
208
|
$temp =~ s/or//; |
|
81
|
143
|
|
|
|
|
643
|
my @temp_types = split(/[,&\s]/, $temp ); |
|
82
|
143
|
|
|
|
|
555
|
my @types = grep( /.+/, @temp_types ); |
|
83
|
143
|
|
|
|
|
264
|
$hash->{CATEGORIES} = \@types; |
|
84
|
|
|
|
|
|
|
# If there's more than 2 lines, then it usually is a listing of parameters: |
|
85
|
|
|
|
|
|
|
# General parameters for all projections: |
|
86
|
|
|
|
|
|
|
$hash->{PARAMS}->{GENERAL} = |
|
87
|
143
|
|
|
|
|
567
|
[ qw( x_0 y_0 lon_0 units init no_defs geoc over ) ]; |
|
88
|
|
|
|
|
|
|
# Earth Figure Parameters: |
|
89
|
|
|
|
|
|
|
$hash->{PARAMS}->{EARTH} = |
|
90
|
143
|
|
|
|
|
593
|
[ qw( ellps b f rf e es R R_A R_V R_a R_g R_h R_lat_g ) ]; |
|
91
|
|
|
|
|
|
|
# Projection Specific Parameters: |
|
92
|
143
|
|
|
|
|
270
|
my @proj_params = (); |
|
93
|
143
|
100
|
|
|
|
285
|
if( $#lines >= 2 ) { |
|
94
|
49
|
|
|
|
|
117
|
foreach my $i ( 2 .. $#lines ) { |
|
95
|
54
|
|
|
|
|
92
|
my $text = $lines[$i]; |
|
96
|
54
|
|
|
|
|
239
|
my @temp2 = split( /\s+/, $text ); |
|
97
|
54
|
|
|
|
|
212
|
my @params = grep( /.+/, @temp2 ); |
|
98
|
54
|
|
|
|
|
97
|
foreach my $param (@params) { |
|
99
|
138
|
|
|
|
|
281
|
$param =~ s/=//; |
|
100
|
138
|
|
|
|
|
256
|
$param =~ s/[,\[\]]//sg; |
|
101
|
138
|
100
|
|
|
|
417
|
next if $param =~ /^and|or|Special|for|Madagascar|fixed|Earth|For|CH1903$/; |
|
102
|
118
|
|
|
|
|
275
|
push(@proj_params, $param); |
|
103
|
|
|
|
|
|
|
} |
|
104
|
|
|
|
|
|
|
} |
|
105
|
|
|
|
|
|
|
} |
|
106
|
143
|
|
|
|
|
253
|
$hash->{PARAMS}->{PROJ} = \@proj_params; |
|
107
|
|
|
|
|
|
|
# Can this projection do inverse? |
|
108
|
143
|
100
|
|
|
|
340
|
$hash->{INVERSE} = ( $description =~ /no inv/ ) ? 0 : 1; |
|
109
|
143
|
|
|
|
|
462
|
$info->{$projection} = $hash; |
|
110
|
|
|
|
|
|
|
} |
|
111
|
|
|
|
|
|
|
# A couple of overrides: |
|
112
|
|
|
|
|
|
|
$info->{ob_tran}->{PARAMS}->{PROJ} = |
|
113
|
1
|
|
|
|
|
27
|
[ 'o_proj', 'o_lat_p', 'o_lon_p', 'o_alpha', 'o_lon_c', |
|
114
|
|
|
|
|
|
|
'o_lat_c', 'o_lon_1', 'o_lat_1', 'o_lon_2', 'o_lat_2' ]; |
|
115
|
1
|
|
|
|
|
13
|
$info->{nzmg}->{CATEGORIES} = [ 'fixed Earth' ]; |
|
116
|
1
|
|
|
|
|
12
|
return $info; |
|
117
|
|
|
|
|
|
|
} |
|
118
|
|
|
|
|
|
|
|
|
119
|
|
|
|
|
|
|
|
|
120
|
|
|
|
|
|
|
1; |
|
121
|
|
|
|
|
|
|
|
|
122
|
|
|
|
|
|
|
__END__ |