Skip to content

klarna/geofences-reducer

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.