rgeo 0.3.19 → 0.3.20

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/History.rdoc CHANGED
@@ -1,3 +1,7 @@
1
+ === 0.3.20 / 2012-12-08
2
+
3
+ * Distances computed by the spherical factory were incorrect when covering more than 90 degrees of the globe. Fixed. (reported by exoth)
4
+
1
5
  === 0.3.19 / 2012-09-20
2
6
 
3
7
  * The Geos factories, as well as the projected geographic convenience factories such as simple_mercator, now support the :uses_lenient_assertions option.
data/README.rdoc CHANGED
@@ -61,7 +61,7 @@ Some features also require the following:
61
61
  may be available via your operating system's package manager, or from
62
62
  http://trac.osgeo.org/proj
63
63
  * On some platforms, you should install the ffi-geos gem (version 0.0.6
64
- or later recommended.) JRuby requires this gem to properly link with
64
+ or later recommended.) JRuby requires this gem to link properly with
65
65
  Geos, and Windows builds probably do as well.
66
66
 
67
67
  Note: The build system assumes a unix-like environment. Windows builds
data/Version CHANGED
@@ -1 +1 @@
1
- 0.3.19
1
+ 0.3.20
@@ -118,12 +118,16 @@ module RGeo
118
118
  rx_ = rhs_.x
119
119
  ry_ = rhs_.y
120
120
  rz_ = rhs_.z
121
- x_ = @y*rz_-@z*ry_
122
- y_ = @z*rx_-@x*rz_
123
- z_ = @x*ry_-@y*rx_
124
- r_ = ::Math.sqrt(x_*x_ + y_*y_ + z_*z_)
125
- r_ = 1.0 if r_ > 1.0
126
- ::Math.asin(r_)
121
+ dot_ = @x * rx_ + @y * ry_ + @z * rz_
122
+ if dot_ > -0.8 && dot_ < 0.8
123
+ ::Math.acos(dot_)
124
+ else
125
+ x_ = @y*rz_-@z*ry_
126
+ y_ = @z*rx_-@x*rz_
127
+ z_ = @x*ry_-@y*rx_
128
+ as_ = ::Math.asin(::Math.sqrt(x_*x_ + y_*y_ + z_*z_))
129
+ dot_ > 0.0 ? as_ : ::Math::PI - as_
130
+ end
127
131
  end
128
132
 
129
133
 
@@ -110,6 +110,27 @@ module RGeo
110
110
  end
111
111
 
112
112
 
113
+ def test_distance_coincident
114
+ point1_ = ::RGeo::Geographic::SphericalMath::PointXYZ.new(1, 0, 0)
115
+ point2_ = ::RGeo::Geographic::SphericalMath::PointXYZ.new(1, 0, 0)
116
+ assert_equal(0.0, point1_.dist_to_point(point2_))
117
+ end
118
+
119
+
120
+ def test_distance_opposite
121
+ point1_ = ::RGeo::Geographic::SphericalMath::PointXYZ.new(1, 0, 0)
122
+ point2_ = ::RGeo::Geographic::SphericalMath::PointXYZ.new(-1, 0, 0)
123
+ assert_close_enough(::Math::PI, point1_.dist_to_point(point2_))
124
+ end
125
+
126
+
127
+ def test_distance_right_angle
128
+ point1_ = ::RGeo::Geographic::SphericalMath::PointXYZ.new(1, 0, 0)
129
+ point2_ = ::RGeo::Geographic::SphericalMath::PointXYZ.new(0, -1, 0)
130
+ assert_close_enough(::Math::PI / 2, point1_.dist_to_point(point2_))
131
+ end
132
+
133
+
113
134
  def test_arc_axis
114
135
  point1_ = ::RGeo::Geographic::SphericalMath::PointXYZ.new(1, 1, 0)
115
136
  point2_ = ::RGeo::Geographic::SphericalMath::PointXYZ.new(1, -1, 0)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rgeo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.19
4
+ version: 0.3.20
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-20 00:00:00.000000000 Z
12
+ date: 2012-12-12 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: RGeo is a geospatial data library for Ruby. It provides an implementation
15
15
  of the Open Geospatial Consortium's Simple Features Specification, used by most