geohax alternatives and similar packages
Based on the "Geolocation" category.
Alternatively, view geohax alternatives based on common mentions on social networks and blogs.
-
geocoder
A simple, efficient geocoder/reverse geocoder with a built-in cache. -
topo
A Geometry library for Elixir that calculates spatial relationships between two geometries. -
geocalc
Calculate distance, bearing and more between latitude/longitude points. -
distance_api_matrix
Provide distance and heading calculations via Google distance matrix api. -
wheretz
Elixir version of Ruby gem for lookup of timezone by georgraphic coordinates. -
ipgeobase
Find Russian and Ukraine city by IP address and find country for other country -
geohash_nif
Drop in replacement for Geohash encode/decode library implemented as a NIF.
Scout APM - Leading-edge performance monitoring starting at $39/month
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.