GeoPosition
A simple utility to allow you to convert DMS (Degrees, Minutes, Seconds) to a latitude and longitude. The initial driver for this utility was working on an application that took Geo Position information from EXIF data and converted it to lat/lon for use in both the database storage and querying Google's API.
Installation
Add this line to your application's Gemfile:
gem 'geo_position'
And then execute:
$ bundle
Or install it yourself as:
$ gem install geo_position
Usage
I prefer smaller components that can be put together in different ways.
Currently, if given arguments other than something numeric, then the argument will be coerced to a float. If it cannot be coerced to a float, it will raise an exception.
For the conversions, there are some expectations:
- For latitude, you must provide an argument within the bounds of
-90
and90
. - For longitude, you must provide an argument within the bounds of
-180
and180
.
You can see more information in the objects and errors themselves.
Usage is simple:
Convert from Degrees, Minutes, Seconds, and Direction to a float
# This can be any positive number between 0 and 360. It will be coerced to a float and absoluted.
degrees = 12
# Minutes
minutes = 3
# Seconds
seconds = 42.42
# Direction must be one of N, S, E, or W
direction = 'w'
conversion = GeoPosition::Conversion::Dms.new(degrees, minutes, seconds, direction)
conversion.to_s
=> "12 deg 3' 42.42\" W"
conversion.to_f
=> -12.061783333333333
Convert from Latitude to DMS
latitude = "70.4947"
conversion = GeoPosition::Conversion::Latitude.new(latitude)
conversion.to_s
=> "70 deg 29' 40\" N"
Convert from Longitude to DMS
longitude = "-157.441"
conversion = GeoPosition::Conversion::Longitude.new(longitude)
conversion.to_s
=> "157 deg 26' 27\" W"
Parsing from a DMS string
dms_string = "77 deg 8 42.00 W"
parser = GeoPosition::Parser::Dms.new(dms_string)
parser.degrees
=> 77
parser.minutes
=> 8
parser.seconds
=> 42.0
parser.direction
=> "W"
parser.to_hash
=> {:degrees=>77, :minutes=>8, :seconds=>42.0, :direction=>"W"}
Todo
- Add a command line component
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request