geo_calc 0.7.1 → 0.7.3
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/Gemfile +4 -1
- data/README.textile +8 -59
- data/VERSION +1 -1
- data/geo_calc.gemspec +15 -22
- data/lib/geo_calc/calc/bearing.rb +1 -1
- data/lib/geo_calc/calc/destination.rb +3 -2
- data/lib/geo_calc/calc/distance.rb +1 -1
- data/lib/geo_calc/calc/intersection.rb +8 -8
- data/lib/geo_calc/calc/midpoint.rb +8 -6
- data/lib/geo_calc/calc/rhumb.rb +35 -16
- data/lib/geo_calc/calc.rb +15 -21
- data/lib/geo_calc/extensions/array.rb +1 -3
- data/lib/geo_calc/extensions/hash.rb +1 -3
- data/lib/geo_calc/extensions/string.rb +8 -17
- data/lib/geo_calc/extensions.rb +0 -1
- data/lib/geo_calc/pretty_print.rb +14 -14
- data/lib/geo_calc.rb +7 -4
- data/spec/geo_calc/calculations_spec.rb +2 -1
- data/spec/geo_calc/core_ext/array_ext_spec.rb +1 -9
- data/spec/geo_calc/core_ext/hash_ext_spec.rb +3 -9
- data/spec/geo_calc/core_ext/string_ext_spec.rb +1 -9
- data/spec/geo_calc/core_ext_spec.rb +1 -7
- data/spec/geo_calc/include_apis_spec.rb +32 -0
- data/spec/spec_helper.rb +13 -5
- metadata +52 -35
- data/lib/geo_calc/dms/converter.rb +0 -106
- data/lib/geo_calc/dms.rb +0 -5
- data/lib/geo_calc/extensions/math.rb +0 -6
- data/lib/geo_calc/extensions/numeric.rb +0 -24
- data/lib/geo_calc/geo_point/class_methods.rb +0 -15
- data/lib/geo_calc/geo_point/core_extension.rb +0 -11
- data/lib/geo_calc/geo_point/shared.rb +0 -29
- data/lib/geo_calc/geo_point.rb +0 -135
- data/lib/geo_units/converter.rb +0 -123
- data/lib/geo_units/numeric_ext.rb +0 -117
- data/lib/geo_units.rb +0 -21
- data/spec/geo_calc/dms/converter_spec.rb +0 -60
- data/spec/geo_calc/geo_point/class_methods_spec.rb +0 -31
- data/spec/geo_calc/geo_point/initializer_spec.rb +0 -148
- data/spec/geo_calc/geo_point/lat_lon.rb +0 -115
- data/spec/geo_calc/geo_point_spec.rb +0 -99
- data/spec/geo_units/converter_spec.rb +0 -57
data/lib/geo_units/converter.rb
DELETED
@@ -1,123 +0,0 @@
|
|
1
|
-
require 'geo_calc/calc'
|
2
|
-
require 'geo_calc/extensions'
|
3
|
-
|
4
|
-
module GeoUnits
|
5
|
-
module Converter
|
6
|
-
# Convert numeric degrees to deg/min/sec latitude (suffixed with N/S)
|
7
|
-
#
|
8
|
-
# @param {Number} deg: Degrees
|
9
|
-
# @param {String} [format=dms]: Return value as 'd', 'dm', 'dms'
|
10
|
-
# @param {Number} [dp=0|2|4]: No of decimal places to use - default 0 for dms, 2 for dm, 4 for d
|
11
|
-
# @returns {String} Deg/min/seconds
|
12
|
-
|
13
|
-
def to_lat deg, format = :dms, dp = 0
|
14
|
-
deg = deg.normalize_lat
|
15
|
-
_lat = GeoCalc::Dms::Converter.to_dms deg, format, dp
|
16
|
-
_lat == '' ? '' : _lat[1..-1] + (deg<0 ? 'S' : 'N') # knock off initial '0' for lat!
|
17
|
-
end
|
18
|
-
|
19
|
-
# Convert numeric degrees to deg/min/sec longitude (suffixed with E/W)
|
20
|
-
#
|
21
|
-
# @param {Number} deg: Degrees
|
22
|
-
# @param {String} [format=dms]: Return value as 'd', 'dm', 'dms'
|
23
|
-
# @param {Number} [dp=0|2|4]: No of decimal places to use - default 0 for dms, 2 for dm, 4 for d
|
24
|
-
# @returns {String} Deg/min/seconds
|
25
|
-
|
26
|
-
def to_lon deg, format = :dms, dp = 0
|
27
|
-
deg = deg.normalize_lng
|
28
|
-
lon = GeoCalc::Dms::Converter.to_dms deg, format, dp
|
29
|
-
lon == '' ? '' : lon + (deg<0 ? 'W' : 'E')
|
30
|
-
end
|
31
|
-
|
32
|
-
|
33
|
-
# Convert numeric degrees to deg/min/sec as a bearing (0º..360º)
|
34
|
-
#
|
35
|
-
# @param {Number} deg: Degrees
|
36
|
-
# @param {String} [format=dms]: Return value as 'd', 'dm', 'dms'
|
37
|
-
# @param {Number} [dp=0|2|4]: No of decimal places to use - default 0 for dms, 2 for dm, 4 for d
|
38
|
-
# @returns {String} Deg/min/seconds
|
39
|
-
|
40
|
-
def to_brng deg, format = :dms, dp = 0
|
41
|
-
deg = (deg.to_f + 360) % 360 # normalise -ve values to 180º..360º
|
42
|
-
brng = GeoCalc::Dms::Converter.to_dms deg, format, dp
|
43
|
-
brng.gsub /360/, '0' # just in case rounding took us up to 360º!
|
44
|
-
end
|
45
|
-
|
46
|
-
protected
|
47
|
-
|
48
|
-
include ::GeoCalc::NumericCheckExt
|
49
|
-
|
50
|
-
# Converts numeric degrees to radians
|
51
|
-
def to_rad degrees
|
52
|
-
degrees * Math::PI / 180
|
53
|
-
end
|
54
|
-
alias_method :to_radians, :to_rad
|
55
|
-
alias_method :as_rad, :to_rad
|
56
|
-
alias_method :as_radians, :to_rad
|
57
|
-
alias_method :in_rad, :to_rad
|
58
|
-
alias_method :in_radians, :to_rad
|
59
|
-
|
60
|
-
|
61
|
-
# Converts radians to numeric (signed) degrees
|
62
|
-
# latitude (north to south) from equator +90 up then -90 down (equator again) = 180 then 180 for south = 360 total
|
63
|
-
# longitude (west to east) east +180, west -180 = 360 total
|
64
|
-
def to_deg radians
|
65
|
-
radians * 180 / Math::PI
|
66
|
-
end
|
67
|
-
|
68
|
-
alias_method :to_degrees, :to_deg
|
69
|
-
alias_method :as_deg, :to_deg
|
70
|
-
alias_method :as_degrees, :to_deg
|
71
|
-
alias_method :in_deg, :to_deg
|
72
|
-
alias_method :in_degrees, :to_deg
|
73
|
-
|
74
|
-
extend self
|
75
|
-
end
|
76
|
-
|
77
|
-
# all degrees between -180 and 180
|
78
|
-
def normalize_lng deg
|
79
|
-
case deg
|
80
|
-
when -360..-180
|
81
|
-
deg % 180
|
82
|
-
when -180..0
|
83
|
-
-180 + (deg % 180)
|
84
|
-
when 0..180
|
85
|
-
deg
|
86
|
-
when 180..360
|
87
|
-
deg % 180
|
88
|
-
else
|
89
|
-
raise ArgumentError, "Degrees #{deg} out of range, must be between -360 to 360"
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
# all degrees between -90 and 90
|
94
|
-
def normalize_lat deg
|
95
|
-
case deg
|
96
|
-
when -360..-270
|
97
|
-
deg % 90
|
98
|
-
when -270..-180
|
99
|
-
90 - (deg % 90)
|
100
|
-
when -180..-90
|
101
|
-
- (deg % 90)
|
102
|
-
when -90..0
|
103
|
-
-90 + (deg % 90)
|
104
|
-
when 0..90
|
105
|
-
deg
|
106
|
-
when 90..180
|
107
|
-
deg % 90
|
108
|
-
when 180..270
|
109
|
-
- (deg % 90)
|
110
|
-
when 270..360
|
111
|
-
- 90 + (deg % 90)
|
112
|
-
else
|
113
|
-
raise ArgumentError, "Degrees #{deg} out of range, must be between -360 to 360"
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
def normalize_deg degrees, shift = 0
|
118
|
-
(degrees + shift) % 360
|
119
|
-
end
|
120
|
-
alias_method :normalize_degrees, :normalize_deg
|
121
|
-
|
122
|
-
extend self
|
123
|
-
end
|
@@ -1,117 +0,0 @@
|
|
1
|
-
module GeoUnits
|
2
|
-
module NumericExt
|
3
|
-
def to_lat
|
4
|
-
normalize_lat
|
5
|
-
end
|
6
|
-
|
7
|
-
def to_lng
|
8
|
-
normalize_lng
|
9
|
-
end
|
10
|
-
|
11
|
-
def is_between? lower, upper
|
12
|
-
(lower..upper).cover? self
|
13
|
-
end
|
14
|
-
|
15
|
-
|
16
|
-
def to_dms format = :dms, dp = nil
|
17
|
-
GeoCalc::Dms::Converter.to_dms self, format, dp
|
18
|
-
end
|
19
|
-
|
20
|
-
def to_lat_dms format = :dms, dp = nil
|
21
|
-
GeoUnits::Converter.to_lat self, format, dp
|
22
|
-
end
|
23
|
-
|
24
|
-
def to_lon_dms format = :dms, dp = nil
|
25
|
-
GeoUnits::Converter.to_lon self, format, dp
|
26
|
-
end
|
27
|
-
|
28
|
-
# Converts numeric degrees to radians
|
29
|
-
def to_rad
|
30
|
-
self * Math::PI / 180
|
31
|
-
end
|
32
|
-
alias_method :to_radians, :to_rad
|
33
|
-
alias_method :as_rad, :to_rad
|
34
|
-
alias_method :as_radians, :to_rad
|
35
|
-
alias_method :in_rad, :to_rad
|
36
|
-
alias_method :in_radians, :to_rad
|
37
|
-
|
38
|
-
|
39
|
-
# Converts radians to numeric (signed) degrees
|
40
|
-
# latitude (north to south) from equator +90 up then -90 down (equator again) = 180 then 180 for south = 360 total
|
41
|
-
# longitude (west to east) east +180, west -180 = 360 total
|
42
|
-
def to_deg
|
43
|
-
self * 180 / Math::PI
|
44
|
-
end
|
45
|
-
|
46
|
-
alias_method :to_degrees, :to_deg
|
47
|
-
alias_method :as_deg, :to_deg
|
48
|
-
alias_method :as_degrees, :to_deg
|
49
|
-
alias_method :in_deg, :to_deg
|
50
|
-
alias_method :in_degrees, :to_deg
|
51
|
-
|
52
|
-
|
53
|
-
# Formats the significant digits of a number, using only fixed-point notation (no exponential)
|
54
|
-
#
|
55
|
-
# @param {Number} precision: Number of significant digits to appear in the returned string
|
56
|
-
# @returns {String} A string representation of number which contains precision significant digits
|
57
|
-
def to_precision precision
|
58
|
-
self.round(precision).to_s
|
59
|
-
end
|
60
|
-
alias_method :to_fixed, :to_precision
|
61
|
-
|
62
|
-
# all degrees between -180 and 180
|
63
|
-
def normalize_lng
|
64
|
-
case self
|
65
|
-
when -360, 0, 360
|
66
|
-
0
|
67
|
-
when -360..-180
|
68
|
-
self % 180
|
69
|
-
when -180..0
|
70
|
-
-180 + (self % 180)
|
71
|
-
when 0..180
|
72
|
-
self
|
73
|
-
when 180..360
|
74
|
-
self % 180
|
75
|
-
else
|
76
|
-
return (self % 360).normalize_lng if self > 360
|
77
|
-
return (360 - (self % 360)).normalize_lng if self < -360
|
78
|
-
raise ArgumentError, "Degrees #{self} out of range"
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
# all degrees between -90 and 90
|
83
|
-
def normalize_lat
|
84
|
-
case self
|
85
|
-
when -360, 0, 360
|
86
|
-
0
|
87
|
-
when -180, 180
|
88
|
-
0
|
89
|
-
when -360..-270
|
90
|
-
self % 90
|
91
|
-
when -270..-180
|
92
|
-
90 - (self % 90)
|
93
|
-
when -180..-90
|
94
|
-
- (self % 90)
|
95
|
-
when -90..0
|
96
|
-
-90 + (self % 90)
|
97
|
-
when 0..90
|
98
|
-
self
|
99
|
-
when 90..180
|
100
|
-
self % 90
|
101
|
-
when 180..270
|
102
|
-
- (self % 90)
|
103
|
-
when 270..360
|
104
|
-
- 90 + (self % 90)
|
105
|
-
else
|
106
|
-
return (self % 360).normalize_lat if self > 360
|
107
|
-
return (360 - (self % 360)).normalize_lat if self < -360
|
108
|
-
raise ArgumentError, "Degrees #{self} out of range"
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
def normalize_deg shift = 0
|
113
|
-
(self + shift) % 360
|
114
|
-
end
|
115
|
-
alias_method :normalize_degrees, :normalize_deg
|
116
|
-
end
|
117
|
-
end
|
data/lib/geo_units.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
2
|
-
# Geodesy representation conversion functions (c) Chris Veness 2002-2010
|
3
|
-
# - www.movable-type.co.uk/scripts/latlong.html
|
4
|
-
#
|
5
|
-
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
6
|
-
|
7
|
-
# Parses string representing degrees/minutes/seconds into numeric degrees
|
8
|
-
#
|
9
|
-
# This is very flexible on formats, allowing signed decimal degrees, or deg-min-sec optionally
|
10
|
-
# suffixed by compass direction (NSEW). A variety of separators are accepted (eg 3º 37' 09"W)
|
11
|
-
# or fixed-width format without separators (eg 0033709W). Seconds and minutes may be omitted.
|
12
|
-
# (Note minimal validation is done).
|
13
|
-
#
|
14
|
-
# @param {String|Number} dmsStr: Degrees or deg/min/sec in variety of formats
|
15
|
-
# @returns {Number} Degrees as decimal number
|
16
|
-
# @throws ArgumentError
|
17
|
-
|
18
|
-
module GeoUnits
|
19
|
-
autoload :Converter, 'geo_units/converter'
|
20
|
-
autoload :NumericExt, 'geo_units/numeric_ext'
|
21
|
-
end
|
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class Parser
|
4
|
-
include GeoCalc::Dms::Converter
|
5
|
-
end
|
6
|
-
|
7
|
-
def parser
|
8
|
-
Parser.new
|
9
|
-
end
|
10
|
-
|
11
|
-
# - www.movable-type.co.uk/scripts/latlong.html
|
12
|
-
describe GeoCalc::Dms::Converter do
|
13
|
-
# # @param {String|Number} dmsStr: Degrees or deg/min/sec in variety of formats
|
14
|
-
# @returns {Number} Degrees as decimal number
|
15
|
-
describe '#parse_dms' do
|
16
|
-
it 'should convert "58 38 38N" to a Float of degrees (58..59)' do
|
17
|
-
deg = parser.parse_dms("58 38 38N")
|
18
|
-
deg.should be_a(Float)
|
19
|
-
deg.should be_between(58, 59)
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'should convert "01 38 38W" to a Float of degrees (1..2)' do
|
23
|
-
deg = parser.parse_dms("01 38 38W")
|
24
|
-
deg.should be_a(Float)
|
25
|
-
deg.should < 0
|
26
|
-
deg.should > -2
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'should convert "005 38 E" to a Float of degrees (5..6)' do
|
30
|
-
deg = parser.parse_dms("005 38 E")
|
31
|
-
deg.should be_a(Float)
|
32
|
-
deg.should be_between(5, 6)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
# deg, format = :dms, dp = 0
|
37
|
-
describe '#to_dms' do
|
38
|
-
it 'should convert 58.3 to a String in DMS format' do
|
39
|
-
dms = parser.to_dms(58.3)
|
40
|
-
dms.should be_a(String)
|
41
|
-
expr = Regexp.escape "058".concat("\u00B0", "18", "\u2032", "00", "\u2033")
|
42
|
-
dms.should match expr
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'should convert 58.3 to a String in DM format' do
|
46
|
-
dm = parser.to_dms(58.3, :dm, 2)
|
47
|
-
dm.should be_a(String)
|
48
|
-
expr = Regexp.escape "058".concat("\u00B0", "18", "\u2032")
|
49
|
-
dm.should match expr
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'should convert 58.3 to a String in D format' do
|
53
|
-
d = parser.to_dms(58.3, :d, 2)
|
54
|
-
d.should be_a(String)
|
55
|
-
m = Regexp.escape "058".concat("\u00B0")
|
56
|
-
d.should match m
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
# - www.movable-type.co.uk/scripts/latlong.html
|
4
|
-
describe GeoPoint do
|
5
|
-
describe 'Class methods' do
|
6
|
-
describe '#coord_mode' do
|
7
|
-
it 'should change global coordinates mode' do
|
8
|
-
GeoPoint.coord_mode = :lng_lat
|
9
|
-
GeoPoint.coord_mode.should == :lng_lat
|
10
|
-
|
11
|
-
GeoPoint.coord_mode = :lat_lng
|
12
|
-
GeoPoint.coord_mode.should == :lat_lng
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'shoould not allow setting invalid coord mode' do
|
16
|
-
lambda { GeoPoint.coord_mode = :blip }.should raise_error
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe '#earth_radius_km' do
|
21
|
-
it 'should change global earth_radius_km' do
|
22
|
-
GeoPoint.earth_radius_km = 6360
|
23
|
-
GeoPoint.earth_radius_km.should == 6360
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'shoould not allow setting invalid earth radius' do
|
27
|
-
lambda { GeoPoint.earth_radius_km = 6100 }.should raise_error
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,148 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
# - www.movable-type.co.uk/scripts/latlong.html
|
4
|
-
describe GeoPoint do
|
5
|
-
describe '#initializer' do
|
6
|
-
describe '1 argument' do
|
7
|
-
describe 'single String' do
|
8
|
-
describe '50.1, 5.0 ' do
|
9
|
-
it 'should create a GeoPoint' do
|
10
|
-
p1 = GeoPoint.new "50.1, 5.0"
|
11
|
-
p1.should be_a(GeoPoint)
|
12
|
-
p1.lat.should == 50.1
|
13
|
-
p1.lon.should == 5.0
|
14
|
-
p1.unit.should == :degrees
|
15
|
-
p1.earth_radius_km.should == 6371
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe '(50.1, 5.0)' do
|
20
|
-
it 'should create a GeoPoint' do
|
21
|
-
p1 = GeoPoint.new "(50.1, 5.2)"
|
22
|
-
p1.should be_a(GeoPoint)
|
23
|
-
p1.lat.should == 50.1
|
24
|
-
p1.lon.should == 5.2
|
25
|
-
p1.unit.should == :degrees
|
26
|
-
p1.earth_radius_km.should == 6371
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe '58 38 38N, 003 04 12W' do
|
31
|
-
it 'should create a GeoPoint' do
|
32
|
-
p1 = GeoPoint.new "58 38 38N, 003 04 12W"
|
33
|
-
p1.should be_a(GeoPoint)
|
34
|
-
p1.lat.should be_within(0.5).of(58.38)
|
35
|
-
p1.lon.should be_within(0.5).of(-3)
|
36
|
-
p1.unit.should == :degrees
|
37
|
-
p1.earth_radius_km.should == 6371
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe '(58 38 38N, 003 04 12W)' do
|
42
|
-
it 'should create a GeoPoint' do
|
43
|
-
p1 = GeoPoint.new "(58 38 38N, 003 04 12W)"
|
44
|
-
p1.should be_a(GeoPoint)
|
45
|
-
p1.lat.should be_within(0.5).of(58.38)
|
46
|
-
p1.lon.should be_within(0.5).of(-3) # W is negative, then normalize
|
47
|
-
p1.unit.should == :degrees
|
48
|
-
p1.earth_radius_km.should == 6371
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe 'single Array' do
|
54
|
-
describe '2 Fixed numbers: 50,5 ' do
|
55
|
-
it 'should create a GeoPoint' do
|
56
|
-
p1 = GeoPoint.new [50, 5]
|
57
|
-
p1.should be_a(GeoPoint)
|
58
|
-
p1.lat.should == 50
|
59
|
-
p1.lon.should == 5
|
60
|
-
p1.unit.should == :degrees
|
61
|
-
p1.earth_radius_km.should == 6371
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
describe '2 Float numbers: 50.1, 5.0 ' do
|
66
|
-
it 'should create a GeoPoint' do
|
67
|
-
p1 = GeoPoint.new [50.1, 5.0]
|
68
|
-
p1.should be_a(GeoPoint)
|
69
|
-
p1.lat.should == 50.1
|
70
|
-
p1.lon.should == 5.0
|
71
|
-
p1.unit.should == :degrees
|
72
|
-
p1.earth_radius_km.should == 6371
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
describe 'single Hash' do
|
77
|
-
describe 'with: {:lat => 50.1, :lng => 5.1}' do
|
78
|
-
it 'should create a GeoPoint' do
|
79
|
-
p1 = GeoPoint.new :lat => 50.1, :lng => 5.1
|
80
|
-
p1.should be_a(GeoPoint)
|
81
|
-
p1.lat.should == 50.1
|
82
|
-
p1.lon.should == 5.1
|
83
|
-
p1.unit.should == :degrees
|
84
|
-
p1.earth_radius_km.should == 6371
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
describe 'with: {:lat => 50.1, :long => 5.1}' do
|
89
|
-
it 'should create a GeoPoint' do
|
90
|
-
p1 = GeoPoint.new :lat => 50.1, :long => 5.1
|
91
|
-
p1.should be_a(GeoPoint)
|
92
|
-
p1.lat.should == 50.1
|
93
|
-
p1.lon.should == 5.1
|
94
|
-
p1.unit.should == :degrees
|
95
|
-
p1.earth_radius_km.should == 6371
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
describe 'with: {:latitude => 50.1, :longitude => 5.1}' do
|
100
|
-
it 'should create a GeoPoint' do
|
101
|
-
p1 = GeoPoint.new :latitude => 50.1, :longitude => 5.1
|
102
|
-
p1.should be_a(GeoPoint)
|
103
|
-
p1.lat.should == 50.1
|
104
|
-
p1.lon.should == 5.1
|
105
|
-
p1.unit.should == :degrees
|
106
|
-
p1.earth_radius_km.should == 6371
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
describe 'with 2 arguments' do
|
114
|
-
describe '2 Fixed numbers (Fixnum)' do
|
115
|
-
it 'should create a GeoPoint' do
|
116
|
-
p1 = GeoPoint.new 50, 5
|
117
|
-
p1.should be_a(GeoPoint)
|
118
|
-
p1.lat.should == 50
|
119
|
-
p1.lon.should == 5
|
120
|
-
p1.unit.should == :degrees
|
121
|
-
p1.earth_radius_km.should == 6371
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
describe '2 Float numbers' do
|
126
|
-
it 'should create a GeoPoint' do
|
127
|
-
p1 = GeoPoint.new 50.1, 5.0
|
128
|
-
p1.should be_a(GeoPoint)
|
129
|
-
p1.lat.should == 50.1
|
130
|
-
p1.lon.should == 5.0
|
131
|
-
p1.unit.should == :degrees
|
132
|
-
p1.earth_radius_km.should == 6371
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
describe '2 Strings: "58 38 38N", "003 04 12W"' do
|
137
|
-
it 'should create a GeoPoint' do
|
138
|
-
p1 = GeoPoint.new "58 38 38N", "003 04 12W"
|
139
|
-
p1.should be_a(GeoPoint)
|
140
|
-
p1.lat.should be_within(0.5).of(58.38)
|
141
|
-
p1.lon.should be_within(0.5).of(-3)
|
142
|
-
p1.unit.should == :degrees
|
143
|
-
p1.earth_radius_km.should == 6371
|
144
|
-
end
|
145
|
-
end
|
146
|
-
end
|
147
|
-
end # initializer
|
148
|
-
end
|
@@ -1,115 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
# - www.movable-type.co.uk/scripts/latlong.html
|
4
|
-
describe GeoPoint do
|
5
|
-
describe '#lat' do
|
6
|
-
before :each do
|
7
|
-
@p1 = GeoPoint.new 50, 5
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'should return latitude' do
|
11
|
-
@p1.lat.should == 50
|
12
|
-
end
|
13
|
-
|
14
|
-
describe '#latitude (alias)' do
|
15
|
-
it 'should return latitude' do
|
16
|
-
@p1.latitude.should == 50
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe '#to_lat (alias)' do
|
21
|
-
it 'should return latitude' do
|
22
|
-
@p1.to_lat.should == 50
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe '#lat=' do
|
28
|
-
before :each do
|
29
|
-
@p1 = GeoPoint.new 50, 5
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'should set new latitude' do
|
33
|
-
@p1.lat = 60
|
34
|
-
@p1.lat.should == 60
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'should set new latitude -2' do
|
38
|
-
@p1.lat = -2
|
39
|
-
@p1.lat.should == -2
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'should convert latitude -182 to -2' do
|
43
|
-
@p1.lat = -2
|
44
|
-
@p1.lat.should == -2
|
45
|
-
end
|
46
|
-
|
47
|
-
|
48
|
-
it 'should set new latitude within allowed range' do
|
49
|
-
@p1.lat = 520
|
50
|
-
@p1.lat.should be_between(0, 360)
|
51
|
-
end
|
52
|
-
|
53
|
-
describe '#latitude (alias)' do
|
54
|
-
it 'should set latitude' do
|
55
|
-
@p1.lat = 72
|
56
|
-
@p1.latitude.should == 72
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
describe '#lon' do
|
62
|
-
before :each do
|
63
|
-
@p1 = GeoPoint.new 5, 50
|
64
|
-
end
|
65
|
-
|
66
|
-
it 'should return longitude' do
|
67
|
-
@p1.lon.should == 50
|
68
|
-
end
|
69
|
-
|
70
|
-
it 'should return longitude (via lng)' do
|
71
|
-
@p1.lng.should == 50
|
72
|
-
end
|
73
|
-
|
74
|
-
describe '#longitude (alias)' do
|
75
|
-
it 'should return longitude' do
|
76
|
-
@p1.longitude.should == 50
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
describe '#to_lng (alias)' do
|
81
|
-
it 'should return latitude' do
|
82
|
-
@p1.to_lng.should == 50
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
describe '#lon=' do
|
88
|
-
before :each do
|
89
|
-
@p1 = GeoPoint.new 5, 50
|
90
|
-
end
|
91
|
-
|
92
|
-
it 'should set new longitude' do
|
93
|
-
@p1.lat.should == 5
|
94
|
-
@p1.lon = 60
|
95
|
-
@p1.lon.should == 60
|
96
|
-
end
|
97
|
-
|
98
|
-
it 'should return longitude (via lng)' do
|
99
|
-
@p1.lng = 70
|
100
|
-
@p1.lng.should == 70
|
101
|
-
end
|
102
|
-
|
103
|
-
it 'should set new latitude within allowed range' do
|
104
|
-
@p1.lon = 520
|
105
|
-
@p1.longitude.should be_between(-180, 180)
|
106
|
-
end
|
107
|
-
|
108
|
-
describe '#latitude (alias)' do
|
109
|
-
it 'should set latitude' do
|
110
|
-
@p1.longitude = 72
|
111
|
-
@p1.longitude.should == 72
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|