lib/geo_units.rb in geo_units-0.2.4 vs lib/geo_units.rb in geo_units-0.2.4.1
- old
+ new
@@ -79,10 +79,39 @@
def latitude_degrees
earth_radius_map[:miles] / miles_per_latitude_degree
end
+ def degrees_to_radians(degrees)
+ degrees.to_f * radians_per_degree
+ end
+
+ def units_sphere_multiplier(units)
+ units = GeoUnits.key units
+ earth_radius_map[units]
+ end
+
+ def units_per_latitude_degree(units)
+ units = GeoUnits.key units
+ GeoUnits.radian_multiplier[units]
+ end
+
+ def units_per_longitude_degree(lat, units)
+ miles_per_longitude_degree = (latitude_degrees * Math.cos(lat * pi_div_rad)).abs
+ units = GeoUnits.key units
+ case units
+ when :feet
+ miles_per_longitude_degree * kms_per_mile * 1000 * meters_per_feet
+ when :meters
+ miles_per_longitude_degree * kms_per_mile * 1000
+ when :kms
+ miles_per_longitude_degree * kms_per_mile
+ when :miles
+ miles_per_longitude_degree
+ end
+ end
+
module ClassMethods
def key unit = :km
unit = unit.to_sym
methods.grep(/_unit$/).each do |meth|
return meth.to_s.chomp('_unit').to_sym if send(meth).include? unit
@@ -108,18 +137,20 @@
end
}
end
def earth_radius units
- GeoUnits.EARTH_RADIUS[units.to_sym]
+ units = GeoUnits.key units
+ GeoUnits.earth_radius_map[units]
end
def radians_per_degree
0.017453293 # PI/180
end
- def radians_ratio unit
- radians_per_degree * earth_radius[unit]
+ def radians_ratio units
+ units = GeoUnits.key units
+ radians_per_degree * earth_radius[units]
end
def precision
{
:feet => 0,