Skip to content

JamesLMilner/coordinate-set

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CoordinateSet

A specialist Set for handling longitude and latitude coordinate arrays. The easiest way to understand the use case for this library is the following code snippet:

const set = new Set();
set.add([32.95, 83.31]);
set.add([32.95, 83.31]);
expect(set.size).toBe(2);

This behaves as we would expect for a JavaScript Set - it creates two entries for each Array reference. In simple terms this library allows coordinate Arrays (of type [number, number], where [0] is a valid longitude and [1] is valid latitude, which are often seen in formats like GeoJSON) to be treated as values rather than references, like so:

const set = new CoordinateSet();
set.add([32.95, 83.31]);
set.add([32.95, 83.31]);
expect(set.size).toBe(1);

The API matches the original Set API as closely as possible. The library also does basic validation on the input array to make sure it is a valid longitude, latitude pair.

Install

npm install coordinate-set

Usage

import { CoordinateSet } from "./src/coordinate-set";

const coordinateSet = new CoordinateSet();

coordinateSet.add([51.509865, -0.118092]); // undefined
coordinateSet.add([51.509865, -0.118092]); // undefined
coordinateSet.has([42.509865, -0.231312]); // false
coordinateSet.add([42.509865, -0.231312]); // undefined
coordinateSet.size; // 2
coordinateSet.delete([51.509865, -0.118092]); // true
coordinateSet.size; // 1
coordinate.clear(); // undefined
coordinateSet.size; // 0

coordinateSet.forEach((value, index, set) => {
  // value: [51.509865, -0.118092]
  // index: 0
  // set: coordinateMap
});

// Spread syntax
const spread = [...coordinateSet];

// for...of
const values = [];
for (let entry of coordinateSet) {
  values.push(entry);
}

License

MIT

About

Like a regular JavaScript Set but specifically for coordinate Arrays

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published