Packages
geo
3.4.3
4.1.0
4.0.1
4.0.0
3.6.0
3.5.1
3.5.0
3.4.3
3.4.2
3.4.1
3.4.0
3.3.8
3.3.7
3.3.5
3.3.4
3.3.3
3.3.2
3.3.1
3.3.0
3.2.0
3.1.0
3.0.0
2.1.0
2.0.0
1.5.0
1.4.1
1.4.0
1.3.1
1.3.0
1.2.1
1.2.0
1.1.2
1.1.1
1.1.0
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.18.0
0.17.0
0.16.1
0.16.0
0.15.2
0.15.1
0.15.0
0.14.0
0.13.0
0.12.0
0.11.2
0.11.1
0.11.0
0.10.1
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.0
0.7.2
0.7.1
0.6.1
0.5.1
Encodes and decodes WKB, WKT, and GeoJSON formats.
Current section
Files
Jump to
Current section
Files
README.md
# Geo
[](https://travis-ci.org/bryanjos/geo)
[](https://hex.pm/packages/geo)
[](https://hexdocs.pm/geo/)
[](https://hex.pm/packages/geo)
[](https://github.com/bryanjos/geo/blob/master/LICENSE)
[](https://github.com/bryanjos/geo/commits/master)
A collection of GIS functions. Handles conversions to and from well-known test (WKT), well-known binary (WKB), and GeoJSON for the following geometries:
* Point
* PointZ
* PointM
* PointZM
* LineString
* LineStringZ
* Polygon
* PolygonZ
* MultiPoint
* MultiPointZ
* MuliLineString
* MuliLineStringZ
* MultiPolygon
* MultiPolygonZ
* GeometryCollection
_Note_: If you are looking for the Postgrex PostGIS extension, check out [geo_postgis](https://github.com/bryanjos/geo_postgis).
_Note_: If you are looking to do geospatial calculations in memory with Geo's structs, check out [topo](https://github.com/pkinney/topo).
```elixir
defp deps do
[
{:geo, "~> 3.4"}
]
end
```
## Examples
Encode and decode WKT and EWKT:
```elixir
iex(1)> {:ok, point} = Geo.WKT.decode("POINT(30 -90)")
%Geo.Point{ coordinates: {30, -90}, srid: nil}
iex(2)> Geo.WKT.encode!(point)
"POINT(30 -90)"
iex(3)> point = Geo.WKT.decode!("SRID=4326;POINT(30 -90)")
%Geo.Point{coordinates: {30, -90}, srid: 4326}
```
Encode and decode WKB and EWKB:
```elixir
iex(1)> {:ok, point} = Geo.WKB.decode("0101000000000000000000F03F000000000000F03F")
%Geo.Point{ coordinates: {1.0, 1.0}, srid: nil }
iex(2)> Geo.WKB.encode!(point)
"00000000013FF00000000000003FF0000000000000"
iex(3)> point = Geo.WKB.decode!("0101000020E61000009EFB613A637B4240CF2C0950D3735EC0")
%Geo.Point{ coordinates: {36.9639657, -121.8097725}, srid: 4326 }
iex(4)> Geo.WKB.encode!(point)
"0020000001000010E640427B633A61FB9EC05E73D350092CCF"
```
Encode and decode GeoJSON:
Geo only encodes and decodes maps shaped as GeoJSON. JSON encoding and decoding must
be done before and after.
```elixir
# Examples using Jason as the JSON parser
iex(1)> Geo.JSON.encode(point)
{:ok, %{ "type" => "Point", "coordinates" => [100.0, 0.0] }}
iex(2)> point = Jason.decode!("{\"type\": \"Point\", \"coordinates\": [100.0, 0.0] }") |> Geo.JSON.decode
%Geo.Point{ coordinates: {100.0, 0.0}, srid: nil }
iex(3)> Geo.JSON.encode!(point) |> Jason.encode!
"{\"coordinates\":[100.0,0.0],\"type\":\"Point\"}"
```
## Copyright and License
Copyright (c) 2014 Bryan Joseph
Released under the MIT License, which can be found in the repository in [`LICENSE`](https://github.com/bryanjos/geo/blob/master/LICENSE.md).