📍 Blazing-fast JavaScript library for handling locations on and off maps.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
spec
src
.clang-format
.editorconfig
.gitignore
.jsdoc.json
.npmignore
.prettierrc
.travis.yml
LICENSE
README.md
binding.gyp
meetHere.svg
package.json
tsconfig.json
yarn.lock

README.md

meetHere

A blazing-fast JavaScript library for handling locations on and off maps.

Build Status Coverage Status GitHub

meetHere is a library for quick, elegant manipulation of positional data on a 2D plane, and comes with first-class Google Maps support for on-the-fly determination of locations relevant to you and your users. Prominent features include:

  • High-precision geometric center calculations
  • Rapid path determination
  • Determining relevant nearby locations
  • Powerful async operations
  • First-class TypeScript support
  • C++ bindings
  • Time-minimum center (coming soon)

Installation

$ yarn add meethere
$ npm i meethere --save

Or build it yourself!

Supported Node versions

Usage

You can find the full API here.

Currently, two classes are available:

Position - a blazing-fast, 2D-locations manipulation prototype.

For general-purpose use, like in physics libraries or games.

import { Position } from 'meethere';

let Plane = new Position([[0, 1], [1.5, 3], [-9, 1.07]]);
Plane.add([3, 4]);
Plane.center // => [ 1.4990254494359172, 2.999397294475018 ]
Plane.median // => [ -1.125, 2.2675 ]
Plane.score // => 0.11155562920022742

MeetHere - a subclass of Position with first-class Google Maps support.

For user-interactive applications, like meetHere itself.

To use non-super methods of MeetHere, you'll need a Google Maps API key, as described here.

import { MeetHere } from 'meethere';

const MY_GOOGLE_MAPS_TOKEN = process.env.TOKEN;
const user = [33.0952311, -96.8640427];
const west = [33.0437115, -96.8157956];
const senior = [33.0284505, -96.7546927];

let Map = new MeetHere([user, west, senior], MY_GOOGLE_MAPS_TOKEN);
Map.meetHere // => [ 33.04371181611578, -96.81579457575877 ]
Map.nearby().then(console.log) // => { results: [...] }

Extensions

Extending any class in meetHere for your specific use case is trivial:

import { Position, MeetHere } from 'meethere';

class Plane3D extends Position {
  constructor(args) {
    super(...args);
  }

  get flightPath() {
    return this.dimensionalize(
      super.vrp(this.locations.map(v => [v[0], v[1]])),
      super.vrp(this.locations.map(v => [v[0], v[2]])),
      super.vrp(this.locations.map(v => [v[1], v[2]]))
    );
  }
}

class RideHere extends MeetHere {
  constructor(args) {
    super(...args);
  }

  get rides() {
    return this.locations.map(
      start => `${RIDE_API}?start=${start}&end=${this.center}&token=${RIDE_TKN}`
    );
  }
}

Develop

git clone git@github.com:ayazhafiz/meetHere.git && cd meetHere
yarn # or, npm install

# develop some features

# compile
node-gyp configure
node-gyp build
yarn build # or, npm run build

yarn test # or, npm test

Support

meetHere actively supports Node versions 4 and higher. More specifically:

  • 4.x.x (LTS/argon)
  • 5.x.x
  • 6.x.x (LTS/boron)
  • 7.x.x
  • 8.x.x
  • 9.x.x (nightly)
    • Note that failures in nightly versions are most likely a problem with Node, not with this package.

meetHere may work with Node 0.x.x or io.js (1 - 3.x.x), but since these strains are not supported by Node anymore, this library does not target build compatibility with them. The sensitivity of this library's native bindings and ES targeting may make it completely inoperable with anything below LTS/argon.

License

MIT, © hafiz 2017