Skip to content

filipecorrea/vicinityhash

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

vicinityhash

Given latitude, longitude and radius, this library converts a circular geofence into a set of geohashes.

This code was developed based on Ashwin Nair's algorithm.

Installation

Via npm:

npm install --save vicinityhash

Via yarn:

yarn add vicinityhash

Usage

With JavaScript:

const vicinityhash = require('vicinityhash')

const geofence = {
  latitude: 51.51,
  longitude: -0.07,
  radius: 10000 // in meters
}

const geohashes = vicinityhash.convert(geofence)

With TypeScript:

import * as vicinityhash from 'vicinityhash'

const geofence = {
  latitude: 51.51,
  longitude: -0.07,
  radius: 10000 // in meters
}

const geohashes: string[] = vicinityhash.convert(geofence)

Visual representation of the geohashes created based on the geofence:

Geohashes

Optional Configuration

Precision

const geofence = {
  latitude: 51.51,
  longitude: -0.07,
  radius: 20000
}

const config = {
  precision: 8 // 7 by default, accepts 1 to 12
}

const geohashes = vicinityhash.convert(geofence, config)

Compression

const geofence = {
  latitude: 51.51,
  longitude: -0.07,
  radius: 20000
}

const config = {
  compress: true // false by default
}

const geohashes = vicinityhash.convert(geofence, config)

Visual representation of the geohashes created based on the geofence:

Geohashes compressed

Compression Levels

const geofence = {
  latitude: 51.51,
  longitude: -0.07,
  radius: 20000
}

const config = {
  compress: true,
  compressMin: 3, // 1 by default, accepts 1 to 12
  compressMax: 6 // 12 by default, accepts 1 to 12de
}

const geohashes = vicinityhash.convert(geofence, config)

Visual representation of the geohashes created based on the geofence:

Geohashes with custom compression levels

Development

Prerequisites

Test

Run this command to start unit tests:

npm test