Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Geofences Reducer

Reduces overlapping geofences.

Build Status License Developed at Klarna

Given a list of circular geofences, this library removes the overlapping items and returns a reduced list that could be used to represent the same area.

Usage example

Installation

Via npm:

npm install @klarna/geofences-reducer --save

Via yarn:

yarn add @klarna/geofences-reducer

Usage

With JavaScript:

const reducer = require('@klarna/geofences-reducer')

const geofences = [
  {
    latitude: 51.51,
    longitude: -0.36,
    radius: 20000 // in meters
  },
  {
    latitude: 51.51,
    longitude: -0.07,
    radius: 20000 // in meters
  },
  {
    latitude: 51.6,
    longitude: -0.07,
    radius: 20000 // in meters
  },
  {
    latitude: 51.51,
    longitude: 0.12,
    radius: 20000 // in meters
  },
  {
    latitude: 51.15,
    longitude: -0.07,
    radius: 20000 // in meters
  },
  {
    latitude: 51.72,
    longitude: -0.07,
    radius: 20000 // in meters
  }
]

const geofencesReduced = reducer.reduce(geofences)

With TypeScript:

import * as reducer from '@klarna/geofences-reducer'

type Geofence = {
  latitude: number
  longitude: number
  radius: number
}

const geofences: Geofence[] = [
  {
    latitude: 51.51,
    longitude: -0.36,
    radius: 20000 // in meters
  },
  {
    latitude: 51.51,
    longitude: -0.07,
    radius: 20000 // in meters
  },
  {
    latitude: 51.6,
    longitude: -0.07,
    radius: 20000 // in meters
  },
  {
    latitude: 51.51,
    longitude: 0.12,
    radius: 20000 // in meters
  },
  {
    latitude: 51.15,
    longitude: -0.07,
    radius: 20000 // in meters
  },
  {
    latitude: 51.72,
    longitude: -0.07,
    radius: 20000 // in meters
  }
]

const geofencesReduced: Geofence[] = reducer.reduce(geofences)

Result:

Geohashes

Optional Configuration

Precision

Precision can be customized as follows:

const config = {
  precision: 5 // 6 by default, accepts 1 to 12
}

const geofencesReduced = reducer.reduce(geofences, config)

Development setup

Install project dependencies:

npm install

Run automated test-suite:

npm test

How to contribute

See our guide on contributing.

Release History

See our changelog.

License

Copyright © 2021 Klarna Bank AB

For license details, see the LICENSE file in the root of this project.