1 | <?php |
---|
2 | // |
---|
3 | // DECIMAL TO FRACTION |
---|
4 | // |
---|
5 | function dec2frac( $decimal ) { |
---|
6 | $decimal = (string)$decimal; |
---|
7 | $num = ''; |
---|
8 | $den = 1; |
---|
9 | $dec = false; |
---|
10 | |
---|
11 | // find least reduced fractional form of number |
---|
12 | for( $i = 0, $ix = strlen( $decimal ); $i < $ix; $i++ ) |
---|
13 | { |
---|
14 | // build the denominator as we 'shift' the decimal to the right |
---|
15 | if( $dec ) $den *= 10; |
---|
16 | |
---|
17 | // find the decimal place/ build the numberator |
---|
18 | if( $decimal{$i} == '.' ) $dec = true; |
---|
19 | else $num .= $decimal{$i}; |
---|
20 | } |
---|
21 | $num = (int)$num; |
---|
22 | |
---|
23 | // whole number, just return it |
---|
24 | if( $den == 1 ) return $num; |
---|
25 | |
---|
26 | $num2 = $num; |
---|
27 | $den2 = $den; |
---|
28 | $rem = 1; |
---|
29 | // Euclid's Algorithm (to find the gcd) |
---|
30 | while( $num2 % $den2 ) { |
---|
31 | $rem = $num2 % $den2; |
---|
32 | $num2 = $den2; |
---|
33 | $den2 = $rem; |
---|
34 | } |
---|
35 | if( $den2 != $den ) $rem = $den2; |
---|
36 | |
---|
37 | $ret1->Numerator =($num / $rem ) ; |
---|
38 | $ret1->Denominator=($den / $rem); |
---|
39 | |
---|
40 | // now $rem holds the gcd of the numerator and denominator of our fraction |
---|
41 | return $ret1; |
---|
42 | } |
---|
43 | |
---|
44 | |
---|
45 | function dec2dms($value) { |
---|
46 | $value= abs($value); |
---|
47 | $degrees= floor($value); |
---|
48 | $tmp=($value-$degrees)*60; |
---|
49 | $minutes= floor($tmp); |
---|
50 | $seconds= round(($tmp-$minutes)*6000)/100; |
---|
51 | |
---|
52 | $sec= dec2frac($seconds); |
---|
53 | |
---|
54 | $ret[0]['Numerator'] =$degrees ; |
---|
55 | $ret[0]['Denominator'] = 1 ; |
---|
56 | $ret[1]['Numerator'] =$minutes ; |
---|
57 | $ret[1]['Denominator']=1; |
---|
58 | $ret[2]['Numerator'] =$sec->Numerator ; |
---|
59 | $ret[2]['Denominator']=$sec->Denominator; |
---|
60 | $ret[3]= " Deg: " . $degrees . " Min: " . $minutes . " Sec: " . $seconds." " ; |
---|
61 | |
---|
62 | return( $ret); |
---|
63 | |
---|
64 | } |
---|
65 | |
---|
66 | |
---|
67 | /* |
---|
68 | //Array ( |
---|
69 | [GPSLatitudeRef] => S |
---|
70 | [GPSLatitude] => |
---|
71 | Array ( [0] => 41/1 |
---|
72 | [1] => 54/1 |
---|
73 | [2] => 26543/3238 ) |
---|
74 | [GPSLongitudeRef] => E |
---|
75 | [GPSLongitude] => Array ( |
---|
76 | [0] => 146/1 |
---|
77 | [1] => 21/1 |
---|
78 | [2] => 61393/1729 ) ) |
---|
79 | */ |
---|
80 | |
---|
81 | function toFraction($number){ |
---|
82 | |
---|
83 | echo ($number)."<br />" ; |
---|
84 | $numerator = 1; |
---|
85 | $denominator = 0; |
---|
86 | $reste1->min =$number; |
---|
87 | |
---|
88 | |
---|
89 | for( ; $numerator < 100; $numerator++){ |
---|
90 | |
---|
91 | $temp = ($numerator / $number); |
---|
92 | $reste=ceil($temp) - $temp; |
---|
93 | echo "<br /> |
---|
94 | $reste --- $reste1->min " ; |
---|
95 | if ($reste<$reste1->min) { |
---|
96 | $reste1->numerator = $numerator; |
---|
97 | $reste1->min =$reste ; |
---|
98 | $reste1->denominator =$temp ; |
---|
99 | } |
---|
100 | |
---|
101 | if(ceil($temp) - $temp == 0){ |
---|
102 | $denominator = $temp; |
---|
103 | break; |
---|
104 | } |
---|
105 | } |
---|
106 | echo "<br />". $reste1->numerator . " / " .$reste1->denominator ; |
---|
107 | |
---|
108 | return ($denominator > 0) ? $numerator . '/' . $denominator : false; |
---|
109 | } |
---|
110 | |
---|
111 | function Parse_Fract( $f ) |
---|
112 | { |
---|
113 | $nd = explode( '/', $f ); |
---|
114 | return $nd[0]/$nd[1]; |
---|
115 | } |
---|
116 | |
---|
117 | |
---|
118 | function Parse_Lat_Lon( $arr ) |
---|
119 | { |
---|
120 | $v=0; |
---|
121 | $v += parse_fract( $arr[0] ); |
---|
122 | $v += parse_fract( $arr[1] )/60; |
---|
123 | $v += parse_fract( $arr[2] )/3600; |
---|
124 | return $v; |
---|
125 | } |
---|
126 | ?> |
---|