Build Status    Godoc Reference

Building block for building geospatial indexes using geohashes.


  • Use the Geohash algorithm to index and search data.
  • Index (lat, lng, ID) data in a kv file.
  • Find nearest neighbors from lag, lng within a given radius sorted by distance.
  • Don't designed to store data (should be handled by another component).
Expand ▾ Collapse ▴




This section is empty.


View Source
var (
	Log               = log.New()
	ErrNotFound       = errors.New("key does not exist")
	ErrMissingID      = errors.New("missing ID")
	ErrInvalidLatLong = errors.New("invalid lat/long")


This section is empty.


type Point

type Point struct {
	ID      string
	Geohash string

	// These fields are computed query time and will be ignored when indexing
	Distance float64
	Lat, Lng float64

func NewPointFromGeohash

func NewPointFromGeohash(id, geohash string) *Point

func (*Point) DistanceFrom

func (p *Point) DistanceFrom(point *Point) float64

Implements the equirectangular approximation from (Pythagoras’ theorem on an equirectangular projection)

Returns the approximate distance in meters

type RawGeo

type RawGeo struct {
	// contains filtered or unexported fields

func New

func New(path string) (*RawGeo, error)

New initializes/loads a `RawGeo` index at the given path

func (*RawGeo) Close

func (rg *RawGeo) Close() error

Close gracefully closes the opened index

func (*RawGeo) Destroy

func (rg *RawGeo) Destroy() error

Destroy will try to remove the index file

func (*RawGeo) Index

func (rg *RawGeo) Index(point *Point) error

Put index the given entry in the given index (you have to care about duplicate IDs)

func (*RawGeo) Query

func (rg *RawGeo) Query(lat, lng, radius float64) ([]*Point, error)

Query will returns all the points found in the given radius (in meters) sorted by distance to the query

Source Files


Path Synopsis