LibLatLon v0.4.1 LibLatLon.Coords View Source
Main struct to be used as coordinates representation.
One might cast nearly everything to LibLatLon.Coord
with
LibLatLon.Coord.borrow/1
and/or LibLatLon.Coord.borrow/2
.
This struct implements both String.Chars
and Inspect
protocols.
The fancy string representation of any lat/lon pair might be get by
Kernel.to_string/1
:
iex> to_string(LibLatLon.Coords.borrow(lat: 41.38, lon: 2.19))
"41°22´48.0˝N,2°11´24.0˝E"
Note, that this representation might be used as is when querying any
geolocation services and/or GoogleMaps
. Try:
- http://maps.google.com?search=41°22´48.0˝N,2°11´24.0˝E
Link to this section Summary
Types
Degrees, minutes and seconds as a tuple
Degrees, minutes and seconds as a list
Degrees, minutes and seconds with an optional semisphere reference
The type to store coordinates
Functions
Converts literally any input to LibLatLon.Coords
instance
Converts {{degree, minute, second}, semisphere}
or
{[degree, minute, second], semisphere}
representation into
LibLatLon.Coords
Converts degree, minute, second, semisphere
representation into
LibLatLon.Coords
. When the last parameter semisphere
is not one of:
"S"
or "W"
or -1
or :south
or west
, it is implicitly
considered to be in NE
semisphere
Retrieves coordinates from barely anything
Same as LibLatLon.Coords.coordinate/1
, but banged
Converts literally anything, provided as combined latlon
value
to two tuples {{degree, minute, second}, semisphere}
. Barely used
from the outside the package, since LibLatLon.Coords.t
is obviously
better type to work with coordinates by all means
Converts literally anything, provided as latitude and longitude values
to two tuples {{degree, minute, second}, semisphere}
. Barely used
from the outside the package, since LibLatLon.Coords.t
is obviously
better type to work with coordinates by all means
Link to this section Types
Degrees, minutes and seconds as a tuple
Degrees, minutes and seconds as a list
Degrees, minutes and seconds with an optional semisphere reference
t() :: %LibLatLon.Coords{alt: number(), direction: number(), lat: number(), lon: number(), magnetic?: true | false}
The type to store coordinates.
Mostly used fields are lat
and lon
, stored as Float.t
. Also
might contain altitude
and direction
to calculate the latitude
and langitude for the destination point (mostly used when dealing with
EXIF
information from images.)
Link to this section Functions
borrow({number(), number()} | nil | {dms_ss(), dms_ss()} | dms_ss() | [number()] | map() | binary() | Keyword.t() | Exexif.Data.Gps.t({} | number())) :: LibLatLon.Coords.t() | number() | nil | {:error, any()}
Converts literally any input to LibLatLon.Coords
instance.
Examples
iex> LibLatLon.Coords.borrow("41°23´16˝N,2°11´50˝E")
%LibLatLon.Coords{lat: 41.38777777777778, lon: 2.197222222222222}
iex> LibLatLon.Coords.borrow("41°23´16.222˝N,2°11´50.333˝E")
%LibLatLon.Coords{lat: 41.387839444444445, lon: 2.197314722222222}
iex> LibLatLon.Coords.borrow({{{41, 23, 16.0}, "N"}, {{2, 11, 50.0}, "E"}})
%LibLatLon.Coords{lat: 41.38777777777778, lon: 2.197222222222222}
iex> LibLatLon.Coords.borrow(lat: 41.38, lon: 2.19)
%LibLatLon.Coords{lat: 41.38, lon: 2.19}
Converts {{degree, minute, second}, semisphere}
or
{[degree, minute, second], semisphere}
representation into
LibLatLon.Coords
.
borrow(number(), number(), number(), any()) :: number()
Converts degree, minute, second, semisphere
representation into
LibLatLon.Coords
. When the last parameter semisphere
is not one of:
"S"
or "W"
or -1
or :south
or west
, it is implicitly
considered to be in NE
semisphere.
coordinate(nil | binary() | %{} | any()) :: {:ok, LibLatLon.Coords.t()} | {:error, any()}
Retrieves coordinates from barely anything.
iex> {:ok, result} = LibLatLon.Coords.coordinate("test/inputs/1.jpg")
...> result
#Coord<[lat: 41.37600333333334, lon: 2.1486783333333332, fancy: "41°22´33.612˝N,2°8´55.242˝E"]>
iex> LibLatLon.Coords.coordinate("test/inputs/unknown.jpg")
{:error, {:weird_input, [nil]}}
coordinate!(nil | binary() | %{} | any()) :: LibLatLon.Coords.t() | no_return()
Same as LibLatLon.Coords.coordinate/1
, but banged.
Examples
iex> LibLatLon.Coords.coordinate!("test/inputs/1.jpg")
#Coord<[lat: 41.37600333333334, lon: 2.1486783333333332, fancy: "41°22´33.612˝N,2°8´55.242˝E"]>
lend({number(), number()} | [number()] | LibLatLon.Coords.t()) :: {dms_ss(), dms_ss()}
Converts literally anything, provided as combined latlon
value
to two tuples {{degree, minute, second}, semisphere}
. Barely used
from the outside the package, since LibLatLon.Coords.t
is obviously
better type to work with coordinates by all means.
Examples
iex> LibLatLon.Coords.lend({41.38777777777778, 2.197222222222222})
{{{41, 23, 16.0}, "N"}, {{2, 11, 50.0}, "E"}}
iex> LibLatLon.Coords.lend([41.38777777777778, 2.197222222222222])
{{{41, 23, 16.0}, "N"}, {{2, 11, 50.0}, "E"}}
Converts literally anything, provided as latitude and longitude values
to two tuples {{degree, minute, second}, semisphere}
. Barely used
from the outside the package, since LibLatLon.Coords.t
is obviously
better type to work with coordinates by all means.
Examples
iex> LibLatLon.Coords.lend(41.38777777777778, 2.197222222222222)
{{{41, 23, 16.0}, "N"}, {{2, 11, 50.0}, "E"}}