1 | <?php |
---|
2 | |
---|
3 | function base_to_meta($image){ |
---|
4 | $info_meta['lat']=$image['lat']; |
---|
5 | $info_meta['lon']=$image['lon']; |
---|
6 | $info_meta['alt']=$image['alt']; |
---|
7 | //=========================================================================== |
---|
8 | $info_meta['latRef'] = ($image['lat']<0)? 'S' : "N" ; |
---|
9 | $info_meta['GPSLatitudeRef'] = ($image['lat']<0)? 'S' : "N" ; |
---|
10 | $p1=dec2dms($image['lat']); |
---|
11 | |
---|
12 | $info_meta['latDMS']=$p1[0]['Numerator'] . "/" . |
---|
13 | $p1[0]['Denominator'] ." ". |
---|
14 | $p1[1]['Numerator'] . "/" . |
---|
15 | $p1[1]['Denominator'] ." ". |
---|
16 | $p1[2]['Numerator'] . "/" . |
---|
17 | $p1[2]['Denominator'] ; |
---|
18 | |
---|
19 | $info_meta['GPSLatitude']=array( |
---|
20 | $p1[0]['Numerator'] . "/" . |
---|
21 | $p1[0]['Denominator'] , |
---|
22 | $p1[1]['Numerator'] . "/" . |
---|
23 | $p1[1]['Denominator'] , |
---|
24 | $p1[2]['Numerator'] . "/" . |
---|
25 | $p1[2]['Denominator'] |
---|
26 | ); |
---|
27 | |
---|
28 | //=========================================================================== |
---|
29 | $info_meta['GPSLongitudeRef'] = ($image['lon']<0)? 'W' : "E" ; |
---|
30 | $info_meta['lonRef'] = ($image['lon']<0)? 'W' : "E" ; |
---|
31 | $p1=dec2dms($image['lon']); |
---|
32 | $info_meta['lonDMS']=$p1[0]['Numerator'] . "/" . |
---|
33 | $p1[0]['Denominator'] ." ". |
---|
34 | $p1[1]['Numerator'] . "/" . |
---|
35 | $p1[1]['Denominator'] ." ". |
---|
36 | $p1[2]['Numerator'] . "/" . |
---|
37 | $p1[2]['Denominator'] ; |
---|
38 | $info_meta['GPSLongitude']=array( |
---|
39 | $p1[0]['Numerator'] . "/" . |
---|
40 | $p1[0]['Denominator'] , |
---|
41 | $p1[1]['Numerator'] . "/" . |
---|
42 | $p1[1]['Denominator'] , |
---|
43 | $p1[2]['Numerator'] . "/" . |
---|
44 | $p1[2]['Denominator'] |
---|
45 | ); |
---|
46 | //=========================================================================== |
---|
47 | $info_meta['GPSAltitudeRef'] = "0"; |
---|
48 | $p1= round( $image['alt'] * 5000000000 ); |
---|
49 | $info_meta['GPSAltitude']= $p1.'/'."500000000000"; |
---|
50 | $info_meta['altDMS']= $p1.'/'."500000000000"; |
---|
51 | $info_meta['altRef']= "0"; |
---|
52 | return $info_meta ; |
---|
53 | } |
---|
54 | |
---|
55 | /********************************** |
---|
56 | * DECIMAL TO FRACTION * |
---|
57 | **********************************/ |
---|
58 | function dec2frac( $decimal ) { |
---|
59 | $decimal = (string)$decimal; |
---|
60 | $num = ''; |
---|
61 | $den = 1; |
---|
62 | $dec = false; |
---|
63 | |
---|
64 | // find least reduced fractional form of number |
---|
65 | for( $i = 0, $ix = strlen( $decimal ); $i < $ix; $i++ ){ |
---|
66 | // build the denominator as we 'shift' the decimal to the right |
---|
67 | if( $dec ) $den *= 10; |
---|
68 | |
---|
69 | // find the decimal place/ build the numberator |
---|
70 | if( $decimal{$i} == '.' ) $dec = true; |
---|
71 | else $num .= $decimal{$i}; |
---|
72 | } |
---|
73 | $num = (int)$num; |
---|
74 | |
---|
75 | // whole number, just return it |
---|
76 | if( $den == 1 ) return $num; |
---|
77 | |
---|
78 | $num2 = $num; |
---|
79 | $den2 = $den; |
---|
80 | $rem = 1; |
---|
81 | // Euclid's Algorithm (to find the gcd) |
---|
82 | while( $num2 % $den2 ) { |
---|
83 | $rem = $num2 % $den2; |
---|
84 | $num2 = $den2; |
---|
85 | $den2 = $rem; |
---|
86 | } |
---|
87 | if( $den2 != $den ) $rem = $den2; |
---|
88 | |
---|
89 | $ret1->Numerator =($num / $rem ) ; |
---|
90 | $ret1->Denominator=($den / $rem); |
---|
91 | |
---|
92 | // now $rem holds the gcd of the numerator and denominator of our fraction |
---|
93 | return $ret1; |
---|
94 | } |
---|
95 | |
---|
96 | /********************************** |
---|
97 | * Decimal vers Deg Min Sec * |
---|
98 | **********************************/ |
---|
99 | function dec2dms($value) { |
---|
100 | $value= abs($value); |
---|
101 | $degrees= floor($value); |
---|
102 | $tmp=($value-$degrees)*60; |
---|
103 | $minutes= floor($tmp); |
---|
104 | $seconds= round(($tmp-$minutes)*6000)/100; |
---|
105 | |
---|
106 | $sec= dec2frac($seconds); |
---|
107 | |
---|
108 | $ret[0]['Numerator'] =$degrees ; |
---|
109 | $ret[0]['Denominator'] = 1 ; |
---|
110 | $ret[1]['Numerator'] =$minutes ; |
---|
111 | $ret[1]['Denominator']=1; |
---|
112 | $ret[2]['Numerator'] =$sec->Numerator ; |
---|
113 | $ret[2]['Denominator']=$sec->Denominator; |
---|
114 | $ret[3]= " Deg: " . $degrees . " Min: " . $minutes . " Sec: " . $seconds." " ; |
---|
115 | $ret[4]= " " . $degrees . "/1 " . $minutes . "/1 " . $sec->Numerator."/".$sec->Denominator ; |
---|
116 | return( $ret); |
---|
117 | |
---|
118 | } |
---|
119 | |
---|
120 | |
---|
121 | function toFraction($number){ |
---|
122 | |
---|
123 | echo ($number)."<br />" ; |
---|
124 | $numerator = 1; |
---|
125 | $denominator = 0; |
---|
126 | $reste1->min =$number; |
---|
127 | |
---|
128 | |
---|
129 | for( ; $numerator < 100; $numerator++){ |
---|
130 | |
---|
131 | $temp = ($numerator / $number); |
---|
132 | $reste=ceil($temp) - $temp; |
---|
133 | echo "<br /> |
---|
134 | $reste --- $reste1->min " ; |
---|
135 | if ($reste<$reste1->min) { |
---|
136 | $reste1->numerator = $numerator; |
---|
137 | $reste1->min =$reste ; |
---|
138 | $reste1->denominator =$temp ; |
---|
139 | } |
---|
140 | |
---|
141 | if(ceil($temp) - $temp == 0){ |
---|
142 | $denominator = $temp; |
---|
143 | break; |
---|
144 | } |
---|
145 | } |
---|
146 | echo "<br />". $reste1->numerator . " / " .$reste1->denominator ; |
---|
147 | |
---|
148 | return ($denominator > 0) ? $numerator . '/' . $denominator : false; |
---|
149 | } |
---|
150 | //============================================== |
---|
151 | function Parse_Fract( $f ){ |
---|
152 | $nd = explode( '/', $f ); |
---|
153 | return $nd[0]/$nd[1]; |
---|
154 | } |
---|
155 | |
---|
156 | function Parse_Lat_Lon( $arr ) |
---|
157 | { |
---|
158 | $v=0; |
---|
159 | $v += parse_fract( $arr[0] ); |
---|
160 | $v += parse_fract( $arr[1] )/60; |
---|
161 | $v += parse_fract( $arr[2] )/3600; |
---|
162 | return $v; |
---|
163 | } |
---|
164 | ?> |
---|