loopback-datatype-geopoint
Overview
The Geopoint object is a LoopBack data type that represents a physical location.
loopback-datasource-juggler and strong-remoting modules use this object to facilitate use of GeoPoint data type in a LoopBack model properties and remote methods.
Create a new GeoPoint object:
For example, to create a GeoPoint object in LoopBack:
var loopback = require(‘loopback’);
var here = new loopback.GeoPoint({lat: 10.32424, lng: 5.84978});
The constructor requires two values:
lat: Latitude point in degrees. Range: -90 to 90.lng: Longitude point in degrees. Range: -180 to 180
Call the constructor with any of the following arguments:
- Two numbers, for example 
new GeoPoint(10.32, 5.84) - Number string of form “lat, lng”, for example 
new GeoPoint('10.32, 5.84') - Array with two number elements: 
[lat, lng], for examplenew GeoPoint([10.32, 5.84]) - Object with two number properties: 
latandlng, for examplenew GeoPoint({ lat: 10.32, lng: 5.84}) 
Using GeoPoint type
In a LoopBack model, declare a GeoPoint property in the model JSON file, for example:
...
"properties": {
    "location": {
      "type": "GeoPoint"
    },
  ...
}
...
Or programmatically:
var CoffeeShop = loopback.createModel('coffee-shop', {
  location: 'GeoPoint'
});
In remote methods, set ‘accepts’ and ‘returns’ argument types for remote method to GeoPoint type; for example, in a remote method getNearbyLocation for model MyModel:
common/models/my-model.js
 MyModel.remoteMethod('getNearbyLocation', {
        accepts: {arg: 'loc', type: 'GeoPoint'},
        returns: {arg: 'location', type: 'GeoPoint'}
  });
API
GeoPoint.distanceBetween(pointA, pointB [, options])
This static method returns the spherical distance between two GeoPoints.
The options object is optional.
For example:
loopback = require('loopback');
var here = new loopback.GeoPoint({ lat: 40.77492964101182, lng: -73.90950187151662});
var there = new loopback.GeoPoint({ lat: 40.7753227, lng: -73.909217 });
var distance = loopback.GeoPoint.distanceBetween(here, there);  // 0.03097916611592679
Arguments:
| Name | Type | Description | 
|---|---|---|
| pointA | GeoPoint | Point A | 
| pointB | GeoPoint | Point B | 
| options | Object | Options object with one key, ‘type’. See below. | 
Options:
| Name | Type | Description | 
|---|---|---|
| type | String | Unit of measurement, one of: miles (default) radians kilometers meters miles feet degrees  | 
    
geoPoint.distanceTo(point, options)
This instance method returns the spherical distance to the given point.
NOTE: The options object is required.
For example:
var loopback = require('loopback');
var here = new loopback.GeoPoint( {lat: 10, lng: 10} );
var there = new loopback.GeoPoint( {lat: 5, lng: 5} );
console.log( here.distanceTo( there, {type: 'miles'} ) ); // result: 486.3956513042483
Arguments:
| Name | Type | Description | 
|---|---|---|
| point | GeoPoint | GeoPoint object to which to measure distance. | 
| options | Object | Required options object with one key, ‘type’. Same as options in distanceBetween() | 
    
geoPoint.toString()
This instance method returns a simple serialization of geoPoint.
For example:
var here = new loopback.GeoPoint({lat: 8, lng: 9});
console.log(here.toString());  
Output is:
8,9