Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mmcloughlin/geohash

Golang geohash library
https://github.com/mmcloughlin/geohash

geohash go golang

Last synced: 4 days ago
JSON representation

Golang geohash library

Awesome Lists containing this project

README

        

# geohash

Go [geohash](https://en.wikipedia.org/wiki/Geohash) library offering encoding
and decoding for string and integer geohashes.

[![go.dev Reference](https://img.shields.io/badge/doc-reference-007d9b?logo=go&style=flat-square)](https://pkg.go.dev/github.com/mmcloughlin/geohash)
![Build status](https://img.shields.io/github/actions/workflow/status/mmcloughlin/geohash/ci.yml?style=flat-square)
[![Coverage](https://img.shields.io/codecov/c/github/mmcloughlin/geohash?style=flat-square)](https://codecov.io/github/mmcloughlin/geohash)
[![Go Report Card](https://goreportcard.com/badge/github.com/mmcloughlin/geohash?style=flat-square)](https://goreportcard.com/report/github.com/mmcloughlin/geohash)

## Install

Fetch the package with

```
go get github.com/mmcloughlin/geohash
```

And import it into your programs with

```go
import "github.com/mmcloughlin/geohash"
```

## Usage

#### func ConvertIntToString

```go
func ConvertIntToString(hash uint64, chars uint) string
```
ConvertIntToString converts an integer geohash to the equivalent string geohash
with chars characters. The provided integer geohash is interpreted to have
5*chars bits of precision.

#### func ConvertStringToInt

```go
func ConvertStringToInt(hash string) (uint64, uint)
```
ConvertStringToInt converts a string geohash to the equivalent integer geohash.
Returns the integer hash and its precision.

#### func Decode

```go
func Decode(hash string) (lat, lng float64)
```
Decode the string geohash to a (lat, lng) point.

#### func DecodeCenter

```go
func DecodeCenter(hash string) (lat, lng float64)
```
DecodeCenter decodes the string geohash to the central point of the bounding
box.

#### func DecodeInt

```go
func DecodeInt(hash uint64) (lat, lng float64)
```
DecodeInt decodes the provided 64-bit integer geohash to a (lat, lng) point.

#### func DecodeIntWithPrecision

```go
func DecodeIntWithPrecision(hash uint64, bits uint) (lat, lng float64)
```
DecodeIntWithPrecision decodes the provided integer geohash with bits of
precision to a (lat, lng) point.

#### func Encode

```go
func Encode(lat, lng float64) string
```
Encode the point (lat, lng) as a string geohash with the standard 12 characters
of precision.

#### func EncodeInt

```go
func EncodeInt(lat, lng float64) uint64
```
EncodeInt encodes the point (lat, lng) to a 64-bit integer geohash.

#### func EncodeIntWithPrecision

```go
func EncodeIntWithPrecision(lat, lng float64, bits uint) uint64
```
EncodeIntWithPrecision encodes the point (lat, lng) to an integer with the
specified number of bits.

#### func EncodeWithPrecision

```go
func EncodeWithPrecision(lat, lng float64, chars uint) string
```
EncodeWithPrecision encodes the point (lat, lng) as a string geohash with the
specified number of characters of precision (max 12).

#### func Neighbor

```go
func Neighbor(hash string, direction Direction) string
```
Neighbor returns a geohash string that corresponds to the provided geohash's
neighbor in the provided direction

#### func NeighborInt

```go
func NeighborInt(hash uint64, direction Direction) uint64
```
NeighborInt returns a uint64 that corresponds to the provided hash's neighbor in
the provided direction at 64-bit precision.

#### func NeighborIntWithPrecision

```go
func NeighborIntWithPrecision(hash uint64, bits uint, direction Direction) uint64
```
NeighborIntWithPrecision returns a uint64s that corresponds to the provided
hash's neighbor in the provided direction at the given precision.

#### func Neighbors

```go
func Neighbors(hash string) []string
```
Neighbors returns a slice of geohash strings that correspond to the provided
geohash's neighbors.

#### func NeighborsInt

```go
func NeighborsInt(hash uint64) []uint64
```
NeighborsInt returns a slice of uint64s that correspond to the provided hash's
neighbors at 64-bit precision.

#### func NeighborsIntWithPrecision

```go
func NeighborsIntWithPrecision(hash uint64, bits uint) []uint64
```
NeighborsIntWithPrecision returns a slice of uint64s that correspond to the
provided hash's neighbors at the given precision.

#### func Validate

```go
func Validate(hash string) error
```
Validate the string geohash.

#### type Box

```go
type Box struct {
MinLat float64
MaxLat float64
MinLng float64
MaxLng float64
}
```

Box represents a rectangle in latitude/longitude space.

#### func BoundingBox

```go
func BoundingBox(hash string) Box
```
BoundingBox returns the region encoded by the given string geohash.

#### func BoundingBoxInt

```go
func BoundingBoxInt(hash uint64) Box
```
BoundingBoxInt returns the region encoded by the given 64-bit integer geohash.

#### func BoundingBoxIntWithPrecision

```go
func BoundingBoxIntWithPrecision(hash uint64, bits uint) Box
```
BoundingBoxIntWithPrecision returns the region encoded by the integer geohash
with the specified precision.

#### func (Box) Center

```go
func (b Box) Center() (lat, lng float64)
```
Center returns the center of the box.

#### func (Box) Contains

```go
func (b Box) Contains(lat, lng float64) bool
```
Contains decides whether (lat, lng) is contained in the box. The containment
test is inclusive of the edges and corners.

#### func (Box) Round

```go
func (b Box) Round() (lat, lng float64)
```
Round returns a point inside the box, making an effort to round to minimal
precision.

#### type Direction

```go
type Direction int
```

Direction represents directions in the latitute/longitude space.

```go
const (
North Direction = iota
NorthEast
East
SouthEast
South
SouthWest
West
NorthWest
)
```
Cardinal and intercardinal directions