- Geokit Documentation at Rubyforge http://geokit.rubyforge.org.
- Repository at Github: http://github.com/andre/geokit-gem/tree/master.
The Geokit gem provides the following:
- Distance calculations between two points on the earth. Calculate the distance in miles or KM, with all the trigonometry abstracted away by GeoKit.
- Geocoding from multiple providers. It currently supports Google, Yahoo, Geocoder.us, and Geocoder.ca geocoders, and it provides a uniform response structure from all of them. It also provides a fail-over mechanism, in case your input fails to geocode in one service.
- Rectangular bounds calculations: is a point within a given rectangular bounds?
- Heading and midpoint calculations
Combine this with gem with the geokit-rails plugin to get location-based finders for your Rails app. Plugins for other web frameworks and ORMs will provide similar functionality.
irb> require 'rubygems' irb> require 'geokit' irb> a=Geokit::Geocoders::YahooGeocoder.geocode '140 Market St, San Francisco, CA' irb> a.ll => 37.79363,-122.396116 irb> b=Geokit::Geocoders::YahooGeocoder.geocode '789 Geary St, San Francisco, CA' irb> b.ll => 37.786217,-122.41619 irb> a.distance_to(b) => 1.21120007413626 irb> a.heading_to(b) => 244.959832435678 irb(main):006:0> c=a.midpoint_to(b) # what's halfway from a to b? irb> c.ll => "37.7899239257175,-122.406153503469" irb(main):008:0> d=c.endpoint(90,10) # what's 10 miles to the east of c? irb> d.ll => "37.7897825005142,-122.223214776155"
.ll method means "latitude longitude".
See the RDOC more more ... there is also operations on rectangular bounds (e.g., determining if a point is within bounds, find the center, etc).
- gem sources -a http://gems.github.com
- sudo gem install andre-geokit
If you're using this gem by itself, here's how to set configurations:
If you're using this gem with the geokit-rails plugin, a template with these settings gets placed in your app's config/initializers directory.
NOTES ON WHAT'S WHERE
mappable.rb contains the Mappable module, which provides basic distance calculation methods, i.e., calculating the distance between two points.
mappable.rb also contains LatLng, GeoLoc, and Bounds.
LatLng is a simple container for latitude and longitude, but
it's made more powerful by mixing in the above-mentioned Mappable
module -- therefore, you can calculate easily the distance between two
LatLng ojbects with
distance = first.distance_to(other)
GeoLoc (also in mappable.rb) represents an address or location which has been geocoded. You can get the city, zipcode, street address, etc. from a GeoLoc object. GeoLoc extends LatLng, so you also get lat/lng AND the Mappable modeule goodness for free.
geocoders.rb contains all the geocoder implemenations. All the gercoders inherit from a common base (class Geocoder) and implement the private method do_geocode.
(The MIT License)
Copyright (c) 2007-2009 Andre Lewis and Bill Eisenhauer
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.