项目作者: geocrystal

项目描述 :
Crystal implementation of the Haversine formula to calculate distances between two points given their latitudes and longitudes
高级语言: Crystal
项目地址: git://github.com/geocrystal/haversine.git
创建时间: 2019-05-08T12:12:43Z
项目社区:https://github.com/geocrystal/haversine

开源协议:MIT License

下载


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:

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

Usage

  1. require "haversine"

Distance

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])
  1. # Tokyo -> Paris
  2. distance = Haversine.distance(35.61488, 139.5813, 48.85341, 2.3488)
  3. distance.to_kilometers # => 9715.470491159029
  4. distance.to_meters # => 9715470.491159027
  5. distance.to_miles # => 6032.710918698025
  6. distance.to_feet # => 31852713.65072557
  7. 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:

  1. london = [51.500153, -0.126236]
  2. new_york = [40.714268, -74.005974]
  3. distance = Haversine.distance(new_york, london)
  4. distance.to_kilometers # => 5570.482153929098
  5. london = {51.500153, -0.126236}
  6. new_york = {40.714268, -74.005974}
  7. distance = Haversine.distance(new_york, london)
  8. distance.to_kilometers # => 5570.482153929098

haversine

https://www.movable-type.co.uk/scripts/latlong.html

Also you can compare Haversine::Distance objects:

  1. london = [51.500153, -0.126236]
  2. new_york = [40.714268, -74.005974]
  3. shanghai = [31.222220, 121.458060]
  4. distance1 = Haversine.distance(london, new_york)
  5. distance2 = Haversine.distance(london, shanghai)
  6. distance1 < distance2 # => true

Destination

Takes the starting point by latitude, longitude and calculates the location of a destination point
given a distance factor in degrees, radians, miles, or kilometers; and bearing in degrees.

  1. Haversine.destination(39, -75, 5000, 90, :kilometers)
  2. # => {26.440010707631124, -22.885355549364313}

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