geo_units 0.2.6 → 0.3.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.
- data/.rspec +1 -1
- data/Gemfile +1 -0
- data/README.textile +15 -0
- data/VERSION +1 -1
- data/geo_units.gemspec +21 -5
- data/lib/geo_units.rb +48 -19
- data/lib/geo_units/constants.rb +5 -17
- data/lib/geo_units/converter.rb +11 -55
- data/lib/geo_units/converter/dms.rb +112 -0
- data/lib/geo_units/converter/normalizer.rb +52 -0
- data/lib/geo_units/converter/units.rb +41 -0
- data/lib/geo_units/core_ext.rb +60 -25
- data/lib/geo_units/maps.rb +6 -58
- data/lib/geo_units/maps/earth.rb +49 -0
- data/lib/geo_units/maps/meters.rb +25 -0
- data/lib/geo_units/numeric.rb +50 -0
- data/lib/geo_units/numeric/dms.rb +18 -0
- data/lib/geo_units/numeric/normalizer.rb +62 -0
- data/spec/geo_units/{dms_converter_spec.rb → converter/dms_spec.rb} +5 -5
- data/spec/geo_units/converter/normalizer_spec.rb +0 -0
- data/spec/geo_units/converter/units_spec.rb +0 -0
- data/spec/geo_units/converter_spec.rb +7 -7
- data/spec/geo_units/core_ext_spec.rb +62 -7
- data/spec/geo_units/maps/earth_spec.rb +25 -0
- data/spec/geo_units/maps/meters_spec.rb +24 -0
- data/spec/geo_units/maps_spec.rb +25 -0
- data/spec/geo_units/numeric/dms_spec.rb +0 -0
- data/spec/geo_units/numeric/normalizer_spec.rb +0 -0
- data/spec/geo_units/numeric_spec.rb +21 -0
- data/spec/geo_units_spec.rb +7 -1
- metadata +35 -6
- data/lib/geo_units/dms_converter.rb +0 -107
- data/lib/geo_units/numeric_ext.rb +0 -117
- data/spec/geo_units/numeric_ext_spec.rb +0 -12
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
class Parser
|
4
|
-
include GeoUnits::
|
4
|
+
include GeoUnits::Converter::Dms
|
5
5
|
end
|
6
6
|
|
7
7
|
def parser
|
@@ -9,7 +9,7 @@ def parser
|
|
9
9
|
end
|
10
10
|
|
11
11
|
# - www.movable-type.co.uk/scripts/latlong.html
|
12
|
-
describe GeoUnits::
|
12
|
+
describe GeoUnits::Converter::Dms do
|
13
13
|
# # @param {String|Number} dmsStr: Degrees or deg/min/sec in variety of formats
|
14
14
|
# @returns {Number} Degrees as decimal number
|
15
15
|
describe '#parse_dms' do
|
@@ -38,21 +38,21 @@ describe GeoUnits::DmsConverter do
|
|
38
38
|
it 'should convert 58.3 to a String in DMS format' do
|
39
39
|
dms = parser.to_dms(58.3)
|
40
40
|
dms.should be_a(String)
|
41
|
-
expr = Regexp.escape "058".
|
41
|
+
expr = Regexp.escape "058".concats("\u00B0", "18", "\u2032", "00", "\u2033")
|
42
42
|
dms.should match expr
|
43
43
|
end
|
44
44
|
|
45
45
|
it 'should convert 58.3 to a String in DM format' do
|
46
46
|
dm = parser.to_dms(58.3, :dm, 2)
|
47
47
|
dm.should be_a(String)
|
48
|
-
expr = Regexp.escape "058".
|
48
|
+
expr = Regexp.escape "058".concats("\u00B0", "18", "\u2032")
|
49
49
|
dm.should match expr
|
50
50
|
end
|
51
51
|
|
52
52
|
it 'should convert 58.3 to a String in D format' do
|
53
53
|
d = parser.to_dms(58.3, :d, 2)
|
54
54
|
d.should be_a(String)
|
55
|
-
m = Regexp.escape "058".
|
55
|
+
m = Regexp.escape "058".concats("\u00B0")
|
56
56
|
d.should match m
|
57
57
|
end
|
58
58
|
end
|
File without changes
|
File without changes
|
@@ -10,19 +10,19 @@ end
|
|
10
10
|
|
11
11
|
# - www.movable-type.co.uk/scripts/latlong.html
|
12
12
|
describe GeoUnits::Converter do
|
13
|
-
# deg, format, dp
|
13
|
+
# deg, format, dp
|
14
14
|
describe '#to_lat' do
|
15
15
|
it 'should convert 58.3 to a latitude String in North direction' do
|
16
16
|
str_lat = converter.to_lat(58.3)
|
17
17
|
str_lat.should be_a(String)
|
18
|
-
expr = Regexp.escape "58".
|
18
|
+
expr = Regexp.escape "58".concats("\u00B0", "18", "\u2032", "00", "\u2033", "N")
|
19
19
|
str_lat.should match expr
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'should convert -58.3 to a latitude String in South direction' do
|
23
23
|
str_lat = converter.to_lat(-58.3)
|
24
24
|
str_lat.should be_a(String)
|
25
|
-
expr = Regexp.escape "58".
|
25
|
+
expr = Regexp.escape "58".concats("\u00B0", "18", "\u2032", "00", "\u2033", "S")
|
26
26
|
str_lat.should match expr
|
27
27
|
end
|
28
28
|
end
|
@@ -32,14 +32,14 @@ describe GeoUnits::Converter do
|
|
32
32
|
it 'should convert 58.3 to a longitude String' do
|
33
33
|
str_lat = converter.to_lon(58.3)
|
34
34
|
str_lat.should be_a(String)
|
35
|
-
expr = Regexp.escape "58".
|
35
|
+
expr = Regexp.escape "58".concats("\u00B0", "18", "\u2032", "00", "\u2033", "E")
|
36
36
|
str_lat.should match expr
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'should convert 58.3 to a longitude String' do
|
40
40
|
str_lat = converter.to_lon(-58.3)
|
41
41
|
str_lat.should be_a(String)
|
42
|
-
expr = Regexp.escape "58".
|
42
|
+
expr = Regexp.escape "58".concats("\u00B0", "18", "\u2032", "00", "\u2033", "W")
|
43
43
|
str_lat.should match expr
|
44
44
|
end
|
45
45
|
end
|
@@ -50,8 +50,8 @@ describe GeoUnits::Converter do
|
|
50
50
|
it 'should convert 58.3 to a longitude String' do
|
51
51
|
brng = converter.to_brng(-58.3)
|
52
52
|
brng.to_f.should be_between(0, 360)
|
53
|
-
expr = Regexp.escape "301".
|
53
|
+
expr = Regexp.escape "301".concats("\u00B0", "42", "\u2032", "00")
|
54
54
|
brng.should match expr
|
55
55
|
end
|
56
56
|
end
|
57
|
-
end
|
57
|
+
end
|
@@ -2,16 +2,71 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe GeoUnits do
|
4
4
|
describe 'Core extensions' do
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
|
6
|
+
describe Numeric do
|
7
|
+
describe '#miles_to' do
|
8
|
+
it 'should convert meters to kms' do
|
9
|
+
100.meters_to(:kms).should == 0.1
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '#miles_to' do
|
14
|
+
it 'should convert miles to kms' do
|
15
|
+
2.miles_to(:kms).should be_within(0.2).of 3.21
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#feet_to' do
|
20
|
+
it 'should convert feet to kms' do
|
21
|
+
2.feet_to(:kms).should be_within(0.5).of (2 * 3.28 * 0.001)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#to_radians' do
|
26
|
+
it 'should convert degrees to radians' do
|
27
|
+
1.to_rad.should be_within(0.002).of 0.017
|
28
|
+
1.to_radians.should be_within(0.002).of 0.017
|
29
|
+
1.deg_to_rad.should be_within(0.002).of 0.017
|
30
|
+
1.degrees_to_rad.should be_within(0.002).of 0.017
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe String do
|
36
|
+
describe '#parse_dms' do
|
37
|
+
it 'should raise error if no valid compass direction' do
|
38
|
+
lambda { "58 18 00 X".parse_dms }.should raise_error
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should raise error if invalid format and set to raise' do
|
42
|
+
lambda { "5.8 E".parse_dms }.should raise_error
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should parse valid format' do
|
46
|
+
"58 E".parse_dms.should == 58.0
|
47
|
+
end
|
8
48
|
end
|
9
49
|
end
|
10
50
|
|
11
|
-
describe
|
12
|
-
|
13
|
-
|
51
|
+
describe Array do
|
52
|
+
describe '#to_dms' do
|
53
|
+
it 'should convert' do
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe '#parse_dms' do
|
58
|
+
it 'should raise error if no valid compass direction' do
|
59
|
+
lambda { ["15 18 00 X", "53 N"].parse_dms }.should raise_error
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'should parse valid format' do
|
63
|
+
["58 E", "32 N"].parse_dms.should == [58.0, 32.0]
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'should parse valid but reverse format' do
|
67
|
+
["32 N", "58 E"].parse_dms.should == [58.0, 32.0]
|
68
|
+
end
|
14
69
|
end
|
15
70
|
end
|
16
71
|
end
|
17
|
-
end
|
72
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class Earth
|
4
|
+
include GeoUnits::Maps::Earth
|
5
|
+
end
|
6
|
+
|
7
|
+
def earth
|
8
|
+
Earth.new
|
9
|
+
end
|
10
|
+
|
11
|
+
# - www.movable-type.co.uk/scripts/latlong.html
|
12
|
+
describe GeoUnits::Maps::Earth do
|
13
|
+
subject { earth }
|
14
|
+
|
15
|
+
specify { subject.distance_per_latitude_degree[:miles].should be_between(69, 69.5) }
|
16
|
+
|
17
|
+
specify { subject.radius[:miles].should be_between(3963, 3964) }
|
18
|
+
|
19
|
+
specify { subject.major_axis_radius[:miles].should be_between(3963, 3964) }
|
20
|
+
|
21
|
+
specify { subject.minor_axis_radius[:miles].should be_between(3949, 3950) }
|
22
|
+
|
23
|
+
specify { subject.latitude_degrees(:miles).should be_between(57, 58) }
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class Meters
|
4
|
+
include GeoUnits::Maps::Meters
|
5
|
+
end
|
6
|
+
|
7
|
+
def meters
|
8
|
+
Meters.new
|
9
|
+
end
|
10
|
+
|
11
|
+
# - www.movable-type.co.uk/scripts/latlong.html
|
12
|
+
describe GeoUnits::Maps::Meters do
|
13
|
+
subject { meters }
|
14
|
+
|
15
|
+
specify { subject.from_unit[:feet].should be_between(0.3045, 0.305) }
|
16
|
+
|
17
|
+
specify { subject.from_unit[:miles].should be_between(1609, 1610) }
|
18
|
+
|
19
|
+
specify { subject.to_unit[:feet].should be_between(3.28, 3.29) }
|
20
|
+
|
21
|
+
specify { subject.to_unit[:miles].should be_between(0.0006, 0.0007) }
|
22
|
+
end
|
23
|
+
|
24
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class Map
|
4
|
+
include GeoUnits::Maps
|
5
|
+
end
|
6
|
+
|
7
|
+
def map
|
8
|
+
Map.new
|
9
|
+
end
|
10
|
+
|
11
|
+
# - www.movable-type.co.uk/scripts/latlong.html
|
12
|
+
describe GeoUnits::Maps::Earth do
|
13
|
+
subject { map }
|
14
|
+
|
15
|
+
# earth
|
16
|
+
specify { subject.distance_per_latitude_degree[:miles].should be_between(69, 69.5) }
|
17
|
+
|
18
|
+
# meters
|
19
|
+
specify { subject.from_unit[:feet].should be_between(0.3045, 0.305) }
|
20
|
+
|
21
|
+
# maps
|
22
|
+
specify { subject.precision[:miles].should == 4 }
|
23
|
+
end
|
24
|
+
|
25
|
+
|
File without changes
|
File without changes
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
# - www.movable-type.co.uk/scripts/latlong.html
|
4
|
+
describe Array do
|
5
|
+
# deg, format, dp
|
6
|
+
describe '#to_dms' do
|
7
|
+
let (:dms_arr) { [58.3, 4].to_dms }
|
8
|
+
|
9
|
+
it 'should convert [58.3, 4] to string of dms format' do
|
10
|
+
dms_arr.should match /58.*18.*, 04.*00/
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#to_dms :reverse' do
|
15
|
+
let (:dms_arr) { [58.3, 4].to_dms :lat_lng}
|
16
|
+
|
17
|
+
it 'should convert [58.3, 4] to string of dms format' do
|
18
|
+
dms_arr.should match /04.*00.*N, 058.*18.*E/
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/spec/geo_units_spec.rb
CHANGED
@@ -14,7 +14,7 @@ describe GeoUnits do
|
|
14
14
|
|
15
15
|
describe '#radians_to' do
|
16
16
|
it 'should convert radians to kms' do
|
17
|
-
GeoUnits.radians_to(:kms, 2).should be_within(0.5).of 111.17 * 2
|
17
|
+
GeoUnits.radians_to(:kms, 2, 30).should be_within(0.5).of 111.17 * 2
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -23,4 +23,10 @@ describe GeoUnits do
|
|
23
23
|
GeoUnits.miles_to(:kms, 2).should be_within(0.2).of 3.21
|
24
24
|
end
|
25
25
|
end
|
26
|
+
|
27
|
+
describe '#kms_to' do
|
28
|
+
it 'should convert miles to kms' do
|
29
|
+
GeoUnits.kilometers_to(:meters, 2).should == 2000
|
30
|
+
end
|
31
|
+
end
|
26
32
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geo_units
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -27,6 +27,22 @@ dependencies:
|
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 0.6.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: sweetloader
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
30
46
|
- !ruby/object:Gem::Dependency
|
31
47
|
name: i18n
|
32
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,15 +142,28 @@ files:
|
|
126
142
|
- lib/geo_units.rb
|
127
143
|
- lib/geo_units/constants.rb
|
128
144
|
- lib/geo_units/converter.rb
|
145
|
+
- lib/geo_units/converter/dms.rb
|
146
|
+
- lib/geo_units/converter/normalizer.rb
|
147
|
+
- lib/geo_units/converter/units.rb
|
129
148
|
- lib/geo_units/core_ext.rb
|
130
|
-
- lib/geo_units/dms_converter.rb
|
131
149
|
- lib/geo_units/maps.rb
|
132
|
-
- lib/geo_units/
|
150
|
+
- lib/geo_units/maps/earth.rb
|
151
|
+
- lib/geo_units/maps/meters.rb
|
152
|
+
- lib/geo_units/numeric.rb
|
153
|
+
- lib/geo_units/numeric/dms.rb
|
154
|
+
- lib/geo_units/numeric/normalizer.rb
|
133
155
|
- lib/geo_units/unit_conversions.rb
|
156
|
+
- spec/geo_units/converter/dms_spec.rb
|
157
|
+
- spec/geo_units/converter/normalizer_spec.rb
|
158
|
+
- spec/geo_units/converter/units_spec.rb
|
134
159
|
- spec/geo_units/converter_spec.rb
|
135
160
|
- spec/geo_units/core_ext_spec.rb
|
136
|
-
- spec/geo_units/
|
137
|
-
- spec/geo_units/
|
161
|
+
- spec/geo_units/maps/earth_spec.rb
|
162
|
+
- spec/geo_units/maps/meters_spec.rb
|
163
|
+
- spec/geo_units/maps_spec.rb
|
164
|
+
- spec/geo_units/numeric/dms_spec.rb
|
165
|
+
- spec/geo_units/numeric/normalizer_spec.rb
|
166
|
+
- spec/geo_units/numeric_spec.rb
|
138
167
|
- spec/geo_units_spec.rb
|
139
168
|
- spec/spec_helper.rb
|
140
169
|
homepage: http://github.com/kristianmandrup/geo_units
|
@@ -152,7 +181,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
152
181
|
version: '0'
|
153
182
|
segments:
|
154
183
|
- 0
|
155
|
-
hash:
|
184
|
+
hash: 4502680806644763495
|
156
185
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
157
186
|
none: false
|
158
187
|
requirements:
|
@@ -1,107 +0,0 @@
|
|
1
|
-
require 'sugar-high/numeric'
|
2
|
-
require 'sugar-high/string'
|
3
|
-
|
4
|
-
module GeoUnits
|
5
|
-
module DmsConverter
|
6
|
-
include NumericCheckExt
|
7
|
-
|
8
|
-
def parse_dms dms_str
|
9
|
-
# check for signed decimal degrees without NSEW, if so return it directly
|
10
|
-
return dms_str if is_numeric?(dms_str)
|
11
|
-
|
12
|
-
# strip off any sign or compass dir'n & split out separate d/m/s
|
13
|
-
dms = dms_str.strip.gsub(/^-/,'').gsub(/[NSEW]$/i,'').split(/[^0-9.,]+/).map(&:strip).map(&:to_f)
|
14
|
-
return nil if dms.empty?
|
15
|
-
|
16
|
-
# and convert to decimal degrees...
|
17
|
-
deg = case dms.length
|
18
|
-
when 3 # interpret 3-part result as d/m/s
|
19
|
-
dms[0]/1 + dms[1]/60 + dms[2]/3600
|
20
|
-
when 2 # interpret 2-part result as d/m
|
21
|
-
dms[0]/1 + dms[1]/60
|
22
|
-
when 1 # just d (possibly decimal) or non-separated dddmmss
|
23
|
-
d = dms[0];
|
24
|
-
# check for fixed-width unseparated format eg 0033709W
|
25
|
-
d = "0#{d}" if (/[NS]/i.match(dms_str)) # - normalise N/S to 3-digit degrees
|
26
|
-
d = "#{d.slice(0,3)/1}#{deg.slice(3,5)/60}#{deg.slice(5)/3600}" if (/[0-9]{7}/.match(deg))
|
27
|
-
d
|
28
|
-
else
|
29
|
-
nil
|
30
|
-
end
|
31
|
-
return nil if !deg
|
32
|
-
deg = (deg * -1) if (/^-|[WS]$/i.match(dms_str.strip)) # take '-', west and south as -ve
|
33
|
-
deg.to_f
|
34
|
-
end
|
35
|
-
|
36
|
-
# Convert decimal degrees to deg/min/sec format
|
37
|
-
# - degree, prime, double-prime symbols are added, but sign is discarded, though no compass
|
38
|
-
# direction is added
|
39
|
-
#
|
40
|
-
#
|
41
|
-
# @param {Number} deg: Degrees
|
42
|
-
# @param {String} [format=dms]: Return value as 'd', 'dm', 'dms'
|
43
|
-
# @param {Number} [dp=0|2|4]: No of decimal places to use - default 0 for dms, 2 for dm, 4 for d
|
44
|
-
# @returns {String} deg formatted as deg/min/secs according to specified format
|
45
|
-
# @throws {TypeError} deg is an object, perhaps DOM object without .value?
|
46
|
-
|
47
|
-
def to_dms deg, format = :dms, dp = nil
|
48
|
-
deg = begin
|
49
|
-
deg.to_f
|
50
|
-
rescue
|
51
|
-
nil
|
52
|
-
end
|
53
|
-
return nil if !deg # give up here if we can't make a number from deg
|
54
|
-
|
55
|
-
# default values
|
56
|
-
format ||= :dms
|
57
|
-
dp = if dp.nil?
|
58
|
-
case format.to_sym
|
59
|
-
when :d
|
60
|
-
4
|
61
|
-
when :dm
|
62
|
-
2
|
63
|
-
else
|
64
|
-
0 # default
|
65
|
-
end
|
66
|
-
end
|
67
|
-
dp ||= 0
|
68
|
-
|
69
|
-
deg = deg.abs # (unsigned result ready for appending compass dir'n)
|
70
|
-
|
71
|
-
case format
|
72
|
-
when :d
|
73
|
-
d = deg.round(dp) # round degrees
|
74
|
-
ds = "0#{d}" if (d <100) # pad with leading zeros
|
75
|
-
ds = "0#{ds}" if (d <10)
|
76
|
-
dms = ds.to_s.concat("\u00B0") # add º symbol
|
77
|
-
when :dm
|
78
|
-
min = (deg*60).round(dp) # convert degrees to minutes & round
|
79
|
-
d = d.to_i
|
80
|
-
d = (min / 60).floor # get component deg/min
|
81
|
-
m = (min % 60).round(dp) # pad with trailing zeros
|
82
|
-
ds = d
|
83
|
-
ms = m
|
84
|
-
ds = "0#{d}" if (d<100) # pad with leading zeros
|
85
|
-
ds = "0#{d}" if (d<10)
|
86
|
-
ms = "0#{m}" if (m<10)
|
87
|
-
dms = ds.to_s.concat("\u00B0", ms, "\u2032") # add º, ' symbols
|
88
|
-
when :dms
|
89
|
-
sec = (deg * 3600).round # convert degrees to seconds & round
|
90
|
-
d = (sec / 3600).floor # get component deg/min/sec
|
91
|
-
m = ((sec / 60) % 60).floor
|
92
|
-
s = (sec % 60).round(dp) # pad with trailing zeros
|
93
|
-
ds = d
|
94
|
-
ms = m
|
95
|
-
ss = s
|
96
|
-
ds = "0#{d}" if (d < 100) # pad with leading zeros
|
97
|
-
ds = "0#{ds}" if (d < 10)
|
98
|
-
ms = "0#{m}" if (m < 10)
|
99
|
-
ss = "0#{s}" if (s < 10)
|
100
|
-
dms = ds.to_s.concat("\u00B0", ms, "\u2032", ss, "\u2033") # add º, ', " symbols
|
101
|
-
end
|
102
|
-
return dms
|
103
|
-
end
|
104
|
-
|
105
|
-
extend self
|
106
|
-
end
|
107
|
-
end
|