geohax alternatives and similar packages
Based on the "Geolocation" category.
Alternatively, view geohax alternatives based on common mentions on social networks and blogs.
-
topo
A Geometry library for Elixir that calculates spatial relationships between two geometries -
geoip
Elixir library to find geo location information given an IP address, hostname or Plug.Conn -
distance_api_matrix
Google Distance Matrix API Library for Elixir -
ipgeobase
Find Russian and Ukraine city by IP address and find country for other country Elixir -
srtm
Query locations for elevation data from the NASA Shuttle Radar Topography Mission
Elixir and Phoenix Application Security Platform
Do you think we are missing an alternative of geohax or a related project?
Popular Comparisons
README
Geohax
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.