JSPM

@klarna/geofences-reducer

1.3.1
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 23
  • Score
    100M100P100Q55470F
  • License Apache-2.0

Reduces overlapping geofences

Package Exports

  • @klarna/geofences-reducer
  • @klarna/geofences-reducer/dist/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@klarna/geofences-reducer) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

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.