Reduces overlapping geofences.
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.
Via npm:
npm install @klarna/geofences-reducer --save
Via yarn:
yarn add @klarna/geofences-reducer
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:
Precision can be customized as follows:
const config = {
precision: 5 // 6 by default, accepts 1 to 12
}
const geofencesReduced = reducer.reduce(geofences, config)
Install project dependencies:
npm install
Run automated test-suite:
npm test
See our guide on contributing.
See our changelog.
Copyright © 2021 Klarna Bank AB
For license details, see the LICENSE file in the root of this project.