Elixir library for various distance calculations
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
bench Adding docs and benchmarks Mar 30, 2016
config
doc Compatible with Elixir 1.4: fix warnings + update dependencies + rege… Mar 3, 2017
lib Adding docs and benchmarks Mar 30, 2016
test Adding docs and benchmarks Mar 30, 2016
.gitignore Initial commit Mar 25, 2016
.travis.yml Add .travis.yml Mar 26, 2016
LICENSE
README.md Bump version to 0.2.1 Mar 30, 2016
mix.exs
mix.lock Compatible with Elixir 1.4: fix warnings + update dependencies + rege… Mar 3, 2017

README.md

Distance

Build Status

Provides a set of distance functions for use in GIS or graphic applications.

Installation

defp deps do
  [{:distance, "~> 0.2.1"}]
end

Functions

Point-Point Distance

Calculate geometric distance between two or more points (two- or three-dimensional):

Distance.distance({2, -1}, {-1, 3}) # => 5
Distance.distance({2, -1, 4}, {-1, 3, 2}) # => 5.385...

Distance.distance([{2.5, 2.5}, {4, 0.8}, {2.5, 3.1}, {2.5, 3.1}]) # => 5.013...

Calculate the square of the geometric distance between two points (useful as a faster way to compare distances between points without the need for an expensive square root operation):

Distance.distance_squared({2, -1}, {-1, 3}) # => 25
Distance.distance_squared({2, -1, 4}, {-1, 3, 2}) # => 29

Point-Segment Distance

Calculate geometric distance between a point and the closest point on a line segment. For instance the distance between the point (3, 3) and the line segment between (-2, 1) and (5, 3).

Distance.segment_distance({3, 2}, {-2, 1}, {5, 3}) # => 0.412...

Similar to the distance function, there is a squared version for faster calculations when needed:

Distance.segment_distance_squared({3, 2}, {-2, 1}, {5, 3}) # => 0.170...

Great Circle Distance

Calculate great circle distances (shortest travel distance on the surface of a spherical Earth) given a two longitude-latitude pairs. This is an implementation of the Haversine formula and approximates using a spherical (non-ellipsoid) Earth with a mean radius of 6,371,008.8 meters derived from the WGS84 datum.

The function accepts two tuples in the form of {longitude, latitude} and returns the distance in meters. It will also accept a List of tuples.

Distance.GreatCircle.distance({-96.796667, 32.775833}, {126.967583, 37.566776}) # => 10974882.74...

Distance.GreatCircle.distance([
  {-96.796667, 32.775833},
  {126.967583, 37.566776},
  {151.215158, -33.857406},
  {55.274180, 25.197229},
  {6.942661, 50.334057},
  {-97.635926, 30.134442}
]) # => 44728827.849...