Popularity
2.6
Growing
Activity
0.0
Stable
11
2
5

Monthly Downloads: 3,274
Programming language: Elixir
License: MIT License
Tags: Geolocation    

geohax alternatives and similar packages

Based on the "Geolocation" category.
Alternatively, view geohax alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of geohax or a related project?

Add another 'Geolocation' Package

README

Geohax

Hex.pm Build Status Inline docs Hex.pm

Geohash encoding and decoding for Elixir.

Ordering of longitude and latitude

Every function in Geohax use the longitude,latitude ordering; make sure not to invert these!

Both Redis and PostGIS use this same ordering, but if you feel strongly about that and would prefer to use latitude,longitude instead, you can simply create a new module that does this for you:

defmodule MyGeohash do
  def decode(geohash) do
    {lon, lat} = Geohax.decode(geohash)
    {lat, lon}
  end

  def encode(latitude, longitude, precision \\ 12),
    do: Geohax.encode(longitude, latitude, precision)

  defdelegate neighbor(geohash, direction), to: Geohax

  defdelegate neighbors(geohash), to: Geohax

  defdelegate within(min, max, precision \\ 5), to: Geohax
end

Usage

Encoding and decoding

iex> Geohax.encode(-132.83, -38.1033, 6)
"311x1r"
iex> Geohax.decode("311x1r")
{-132.83, -38.1033}

Note that the format for coordinates is {longitude, latitude}.

Finding neighbors

iex> Geohax.neighbors("311x1r")
%{north: "311x32", south: "311x1q", east: "311x1x", west: "311x1p"}
iex> Geohax.neighbor("311x1r", :north)
"311x32"

Calculating geoashes within an envelope

iex> Geohax.within({52.291725, 16.731831}, {52.508736, 17.071703})
["u37ck", "u37cm", "u37cq", "u37cr", "u3k12", "u3k13", "u3k16", "u3k17", "u3k1k", "u37cs", "u37ct", "u37cw", "u37cx", "u3k18", "u3k19", "u3k1d", "u3k1e", "u3k1s", "u37cu", "u37cv", "u37cy", "u37cz", "u3k1b", "u3k1c", "u3k1f", "u3k1g", "u3k1u", "u37fh", "u37fj", "u37fn", "u37fp", "u3k40", "u3k41", "u3k44", "u3k45", "u3k4h", "u37fk", "u37fm", "u37fq", "u37fr", "u3k42", "u3k43", "u3k46", "u3k47", "u3k4k", "u37fs", "u37ft", "u37fw", "u37fx", "u3k48", "u3k49", "u3k4d", "u3k4e", "u3k4s"]

Installation

Add the :geohax dependency to your mix.exs file:

defp deps do
  [{:geohax, ">= 0.0.0"}]
end

Then, run mix deps.get to fetch the new dependency.