README.md

# Latlong

Provides a parser for latitude and longitude strings. Handles various formats for specifying a position. Parsing returns a tuple latitude and longitude in a signed decimal degree format. The parser accepts the following formats:

- 38.8977, -77.0365
- 38° 53' 51.635" N, 77° 2' 11.507" W
- 38 53 51.635 N, 77 2 11.507 W
- N 38° 53' 51.635", W 77° 2' 11.507"
- N 38 53 51.635, W 77 2 11.507
- 38 53 51.635, -77 2 11.507
- 90, 0 (North Pole)
- 41 25 01N, 120 58 57W
- 41°25'01"N, 120°58'57"W
- S17 33 08.352, W69 01 29.74
- 41 25N, 120 58W
- 41°25'N, 120°58'W
- N41 25.117, W120 58.292
- 41 N, 120 W
- 41°N, 120°W
- N41.092, W120.8362
- 90S, 0E (South Pole)

## Example Usage

    iex> LatLong.parse "39.1371°N, 88.65°W"
    {39.1371, -88.65}

    iex> LatLong.parse "39.1371°E", "88.65°W"
    {:error, "Error Parsing Latitude"}

  The second example above returns an error since latitude is NS and E was specified. The correct function call is:

    iex> LatLong.parse "39.1371°N", "88.65°W"
    {39.1371, -88.65}

## Road Map

  A formatting function needs to be provided that takes a format string such as these:

    d.°D         39.1371°N
    d° m' s"D     39° 20' 33"S
    Sd.           39.1371
    Sd m.'         39 20.5

  Formatting could also be provided with parsing for a 'strict' mode.
  After parsing, a format string could be returned that defines the format encountered during the parse. This could be useful for reformatting in the format provided for parsing.

  A mode could be added that insures both the longitude and the latitude use the same format.

## Installation

If [available in Hex](https://hex.pm/docs/publish), the package can be installed as:

  1. Add `latlong` to your list of dependencies in `mix.exs`:

    ```elixir
    def deps do
      [{:latlong, "~> 0.1.0"}]
    end
    ```