https://github.com/filipecorrea/vicinityhash
Geohashes based on latitude, longitude and radius
https://github.com/filipecorrea/vicinityhash
circle geofence geohash geolocation javascript latitude longitude proximity radius typescript vicinity
Last synced: 8 months ago
JSON representation
Geohashes based on latitude, longitude and radius
- Host: GitHub
- URL: https://github.com/filipecorrea/vicinityhash
- Owner: filipecorrea
- License: apache-2.0
- Created: 2022-06-23T08:43:24.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2025-10-08T07:14:25.000Z (8 months ago)
- Last Synced: 2025-10-08T09:12:12.928Z (8 months ago)
- Topics: circle, geofence, geohash, geolocation, javascript, latitude, longitude, proximity, radius, typescript, vicinity
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/vicinityhash
- Size: 4.32 MB
- Stars: 5
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# vicinityhash
Given latitude, longitude and radius, this library converts a circular [geofence](https://en.wikipedia.org/wiki/Geo-fence) into a set of [geohashes](https://en.wikipedia.org/wiki/Geohash).
This code was developed based on [Ashwin Nair's algorithm](https://github.com/ashwin711/proximityhash).
## Install
Via npm:
```bash
npm install --save vicinityhash
```
Via yarn:
```bash
yarn add vicinityhash
```
## Use
With JavaScript:
```javascript
const vicinityhash = require('vicinityhash')
const geofence = {
latitude: 51.51,
longitude: -0.07,
radius: 10000 // in meters
}
const geohashes = vicinityhash.convert(geofence)
```
With TypeScript:
```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:

### Optional configuration
#### Precision
```javascript
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
```javascript
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:

#### Compression levels
```javascript
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:

## Development
### Prerequisites
- [Node.js >= 18](https://nodejs.org/en/download/releases)
### Test
Run this command to start unit tests:
```bash
npm test
```