Learn about our RFC process, Open RFC meetings & more.Join in the discussion! »

brainiac

0.10.13 • Public • Published

brainiac

NodeJS library for geographic localization using k-gon clouds in fixed distance.

Many applications answer questions like:

  • How many ATMs are within a 5 mile radius from where I am?
  • How many banks can I walk to within a mile?
  • How many Chipotle restaurants are near my hotel?

These questions are structured as how many Xs are near Y.

Or, given a fixed distance from some query coordinate, give me all locations.

The brainiac structure solves this problem with an augmented BST based on k, referring to the k-Gon clouds placed "about" every location coordinate, and d, the fixed distance.

The brainiac structure uses the haversine formula to compute distance between coordinates.

Read more about the project here.

usage

var b = require('brainiac');
var brain = b.brainiac(k,d);
 
// Add coordinates
brain.add(40.7974,-74.481536);
brain.add(34.020029,-118.286931);
brain.add(29.426468,-98.491233);
brain.add(37.62261,-122.37804);
brain.add(61.59938,-149.126804);
brain.add( 39.653671,-104.959502);
brain.add(47.850015,-122.279457);
brain.add(52.114942,-106.632519);
brain.add(47.622767,-122.33668);
brain.add(41.643112,-88.001369);
 
// Query against the structure
var query = brain.query(41.643155,-88.001322)
 
// Return queries are of the following format
query === [
    {
        latitude: 41.643112, 
        longitude: -88.001369,
        borders: [...]
    },
    ...
]

efficiency

Compare the brainiac structure to some simple method of iterating through all location coordinates and computing distance to some query coordinate.

The brainiac structure can be written as:

Search an augmented binary search tree for a longitude interval.
Search some augmented binary search tree for a latitude interval over some longitude interval.
For all members of a node's data set within that tree:
    Compare haversine distance to some query coordinate.
    If less than d, add to return list.
Return return list.

Or, in a time complexity analysis as follows:

O(logn) + O(logn) + O(m)

Where m is the average density of these created "interval squares".

Read more about the efficiency here.

Install

npm i brainiac

DownloadsWeekly Downloads

2

Version

0.10.13

License

MIT

Last publish

Collaborators

  • avatar