Need help with geo?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

524 Stars 74 Forks MIT License 362 Commits 9 Opened issues


A collection of GIS functions for Elixir

Services available


Need anything else?

Contributors list


Build Status Module Version Hex Docs Total Download License Last Updated

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.

Note: If you are looking to do geospatial calculations in memory with Geo's structs, check out topo.

defp deps do
    {:geo, "~> 3.4"}


Encode and decode WKT and EWKT:

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:

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.

# 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


We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.