Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/CandyGumdrop/proj
Elixir coordinate conversion library using OSGeo's PROJ.4
https://github.com/CandyGumdrop/proj
c coordinate-systems distance-calculation elixir geospatial osgeo-proj
Last synced: 4 days ago
JSON representation
Elixir coordinate conversion library using OSGeo's PROJ.4
- Host: GitHub
- URL: https://github.com/CandyGumdrop/proj
- Owner: CandyGumdrop
- License: cc0-1.0
- Created: 2016-08-02T10:30:36.000Z (over 8 years ago)
- Default Branch: develop
- Last Pushed: 2021-01-13T17:53:22.000Z (almost 4 years ago)
- Last Synced: 2024-10-02T07:17:27.981Z (about 1 month ago)
- Topics: c, coordinate-systems, distance-calculation, elixir, geospatial, osgeo-proj
- Language: C
- Size: 27.3 KB
- Stars: 8
- Watchers: 2
- Forks: 6
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: COPYING
Awesome Lists containing this project
- freaking_awesome_elixir - C - Elixir coordinate conversion library using OSGeo's PROJ.4. (Geolocation)
- fucking-awesome-elixir - proj - Elixir coordinate conversion library using OSGeo's PROJ.4. (Geolocation)
- awesome-elixir - proj - Elixir coordinate conversion library using OSGeo's PROJ.4. (Geolocation)
README
# Proj
Proj is an Elixir library for converting coordinates between different
coordinate systems, using Erlang NIFs to the OSGeo PROJ.4 library.Proj also supports geodesic functions from PROJ.4. A geodesic is the shortest
line around the globe which crosses through two points. This is useful for
solving problems such as:- Finding the distance between two locations
- Finding the bearings between two locations
- Finding the resulting location after moving `x` metres forwards facing a
certain bearing from a given location- Plotting a set of points in a line between two locations
## Installation
Before you can install Proj, you must have:
- gcc
- PROJ.4 newer than 4.9.0 (PROJ 5+ should work, but this library makes use of
the legacy PROJ.4 API.)### Ubuntu / Debian:
apt install libproj-dev gcc binutils libc-dev make
### Red Hat / CentOS
yum install proj-devel binutils gcc glibc-devel make
### macOS
brew install proj
Proj has currently only been tested on GNU/Linux and Mac OS X. Windows support
has not yet been tested and may require some small changes to work under a
Cygwin or MinGW environment.## Example Usage
```elixir
iex> {:ok, bng} = Proj.from_epsg(27700) # British National Grid CRS is EPSG:27700
{:ok, #Proj<+init=epsg:27700 ...>}# Convert the British National Grid Easting + Northing of Buckingham Palace into
# a Latitude + Longitude pair
iex> Proj.to_lat_lng!({529155, 179699}, bng)
{51.50147938477216, -0.1406319210455952}# Convert the Latitude + Longitude of Buckingham Palace to its
# British National Grid Easting + Northing
iex> Proj.from_lat_lng!({51.501479, -0.140631}, bng)
{529155.0658918166, 179698.9583449281}# Calculate the shortest distance "as the crow flies" in metres between
# Buckingham Palace and the Eiffel Tower
iex> Proj.Geodesic.distance({51.501476, -0.140634}, {48.8584, 2.2945})
341549.6819692767# Calculate the resulting location after travelling 100 metres forwards from
# Buckingham Palace, facing a bearing of 060°
iex> Proj.Geodesic.travel({51.501476, -0.140634}, 60, 100)
{51.50192539979596, -0.1393868003258145}
```