https://github.com/hackergrrl/geohash-point-store
:earth_asia: Store and query spatial points using geohashes and LevelDB.
https://github.com/hackergrrl/geohash-point-store
Last synced: 8 months ago
JSON representation
:earth_asia: Store and query spatial points using geohashes and LevelDB.
- Host: GitHub
- URL: https://github.com/hackergrrl/geohash-point-store
- Owner: hackergrrl
- Created: 2017-08-13T19:33:09.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2017-08-23T16:44:56.000Z (almost 9 years ago)
- Last Synced: 2025-08-16T10:44:54.490Z (10 months ago)
- Language: JavaScript
- Homepage:
- Size: 6.84 KB
- Stars: 6
- Watchers: 2
- Forks: 1
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# geohash-point-store
> Store and query spatial points using geohashes and LevelDB.
Uses [geohashing](https://en.wikipedia.org/wiki/Geohash) to index points for
fast storage and querying.
## Usage
```js
var Geostore = require('geohash-point-store')
var memdb = require('memdb')
var levelDb = memdb()
var store = Geostore(levelDb)
var n = 1000
var spread = 0.2 // 0.2 of lat/lon is about 20km
var pending = n
function insert () {
if (!--pending) return query()
var x = 0.3 + Math.random() * spread - spread/2
var y = 0.3 + Math.random() * spread - spread/2
var value = Math.random().toString().substring(2, 4)
db.insert([x, y], value, insert)
}
insert()
function query () {
var at = [0.3, 0.3]
var q = db.queryStream(at, 1) // 1km
q.on('data', function (pt) {
console.log('Q', pt)
})
}
```
outputs
```
Q { lat: 0.29634207747112706, lon: 0.2993872801415114, value: '38' }
Q { lat: 0.3068307609860095, lon: 0.295966883616435, value: '73' }
Q { lat: 0.2981759863251534, lon: 0.29876116341017966, value: '78' }
Q { lat: 0.3029278595931988, lon: 0.2977136462590203, value: '57' }
```
## API
```js
var Geostore = require('geohash-point-store')
```
### var store = Geostore(db)
Create a new point store, using the
[LevelUP](https://www.npmjs.com/package/levelup) instance `db` for storage.
### store.insert(pt, value, cb)
Insert `value` (and JSON serializable object) at point `pt`. `pt` must be an
array of the form `[latitude, longitude]`.
### var readstream = store.queryStream(at, distance)
Query for all points around point `at` (an array of `[lat, lon]`) that are
within distance `distance`, in kilometres.
Returns a readable stream of points of the form `{ lat: ?, lon: ?, value: ? }`.
## Caveats
- only one point is stored at a precise geohash, so multiple close points
(within metres) could overwrite each other
## Install
With [npm](https://npmjs.org/) installed, run
```
$ npm install geohash-point-store
```
## See Also
- [level-places](https://github.com/Wayla/level-places)
- [kdb-tree-store](https://github.com/peermaps/kdb-tree-store)
## License
ISC