All Projects → geocrystal → haversine

geocrystal / haversine

Licence: MIT license
Crystal implementation of the Haversine formula to calculate distances between two points given their latitudes and longitudes

Programming Languages

crystal
512 projects

Projects that are alternatives of or similar to haversine

haversine-geolocation
Get distances between two points or get closest position to current point. Based on the Haversine Formula
Stars: ✭ 20 (+33.33%)
Mutual labels:  haversine-formula
basic-transport-info-app
A progressive web app to show direct & indirect buses / transport between two places / cities / stops .Show next schedule & travel duration. Algorithm to calculate indirect buses on basis of their schedule time. Voice search . Locate nearest city/stop by gps. Bus timetable.
Stars: ✭ 12 (-20%)
Mutual labels:  haversine-formula
haversine-js
JavaScript implementation of the Haversine formula
Stars: ✭ 12 (-20%)
Mutual labels:  haversine-formula
geo-query
WordPress plugin: Geo Query - Modify the WP_Query/WP_User_Query to support the geo_query parameter. Uses the Haversine SQL implementation by Ollie Jones. With a Rest API example and support for an existing custom table .
Stars: ✭ 63 (+320%)
Mutual labels:  haversine-formula

haversine

Crystal CI GitHub release Docs License

Crystal implementation of the Haversine formula to calculate distances between two points given their latitudes and longitudes.

Installation

  1. Add the dependency to your shard.yml:

    dependencies:
      haversine:
        github: geocrystal/haversine
  2. Run shards install

Usage

require "haversine"

Calling Haversine.distance with four latitude/longitude coordinates returns a Haversine::Distance object which can provide output in kilometers, meters, miles, feet, or nautical miles.

Each "coordinates" member must be a pair of coordinates - latitude and longitude.

Haversine.distance accepts of either:

  • Haversine.distance(lat1, lon1, lat2, lon2)
  • Haversine.distance({lat1, lon1}, {lat2, lon2})
  • Haversine.distance([lat1, lon1], [lat2, lon2])
# Tokyo -> Paris
distance = Haversine.distance(35.61488, 139.5813, 48.85341, 2.3488)

distance.to_kilometers     # => 9715.470491159029
distance.to_meters         # => 9715470.491159027
distance.to_miles          # => 6032.710918698025
distance.to_feet           # => 31852713.65072557
distance.to_nautical_miles # => 5242.2799481204265

If you have latitude/longitude pairs stored in an array or tuple, you can alternately provide two arrays/tuples when calling Haversine.distance:

london = [51.500153, -0.126236]
new_york = [40.714268, -74.005974]

distance = Haversine.distance(new_york, london)
distance.to_kilometers # => 5570.4744596620685

london = {51.500153, -0.126236}
new_york = {40.714268, -74.005974}

distance = Haversine.distance(new_york, london)
distance.to_kilometers # => 5570.4744596620685

Also you can compare Haversine::Distance objects:

london = [51.500153, -0.126236]
new_york = [40.714268, -74.005974]
shanghai = [31.222220, 121.458060]

distance1 = Haversine.distance(london, new_york)
distance2 = Haversine.distance(london, shanghai)

distance1 < distance2 # => true

Contributing

  1. Fork it (https://github.com/geocrystal/haversine/fork)
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].