geohash-compress

A data compression library for large sized Geopolygons.

Usage no npm install needed!

<script type="module">
  import geohashCompress from 'https://cdn.skypack.dev/geohash-compress';
</script>

README

geohash - compress

A data compression and Geo-hasing library for large sized Geo-polygons. It solves the problem when standard point-in-polygon query takes too much time and conversion of Geo-polygon into Geohashes for constant time point-in-polygon query, takes large space in memory. This library provides a memory effiecent soltution for constant time point-in-polygon query by converting the hashes to lowest possible order.

Installation

In Node.js

npm install geohash-compress 

Run test locally

  1. Clone this repo
https://github.com/raghav1408/geohash-compress.git
  1. Install NPM packages
npm install
  1. Run tests
npm run test

Usage in Node.js example

const geoHashCompress = require('geohash-compress');
// Geofence is array of {long,lat} of the geofence.
(async()=>{
    let geofence = [[
        [75.4375024, 22.8725924],
        [75.4401784, 22.9105034],
        [75.4562348, 22.9185316],
        [75.4620329, 22.9287898],
        [75.4375024, 22.8725924],
    ]]
    //construct a new polygon from the geofence 
    // maximum hash length in the output = 7(default = 7)
    // minimum hash length(if possible) in the output = 1(default = 1)
    const polygon = await new geoHashCompress(geofence,7,1); 
    
    // compress the polygon and returns a map with geohash as key eg: {tsj8p6n:true}
    let hashes = polygon.compress(); 

    // prints object {...,tsj8:true,tsj8p6n:true,tsj8p6o:true,tsj8p6p:true,...}
    console.log(hashes)
    
    //polygon.insideOrOutside(long,lat) 
    //return true/false if point{long,lat} is inside/outside polygon.
    console.log(polygon.insideOrOutside(75.8814993,22.7418224)) 
    
    // returns compressed geometry as Geojson.
    const geojson = polygon.toGeoJson();
})()
 

Benchmarks

Intial data size of polygon : 34.8 MB
Final data size of polygon : 1.2 MB

100 point-in-polygon query without compression: 3ms
100 point-in-polygon query with compression: 4ms

Without Compression 34.8 MBWith Compression 1.2MB

Without Compression 34.8 MB -> With Compression 1.2 MB

License

Distributed under the Apache 2.0 License. See LICENSE for more information.