| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696 | 
							- /**
 
-  * @module helpers
 
-  */
 
- /**
 
-  * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.
 
-  *
 
-  * @memberof helpers
 
-  * @type {number}
 
-  */
 
- export var earthRadius = 6371008.8;
 
- /**
 
-  * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.
 
-  *
 
-  * @memberof helpers
 
-  * @type {Object}
 
-  */
 
- export var factors = {
 
-     centimeters: earthRadius * 100,
 
-     centimetres: earthRadius * 100,
 
-     degrees: earthRadius / 111325,
 
-     feet: earthRadius * 3.28084,
 
-     inches: earthRadius * 39.37,
 
-     kilometers: earthRadius / 1000,
 
-     kilometres: earthRadius / 1000,
 
-     meters: earthRadius,
 
-     metres: earthRadius,
 
-     miles: earthRadius / 1609.344,
 
-     millimeters: earthRadius * 1000,
 
-     millimetres: earthRadius * 1000,
 
-     nauticalmiles: earthRadius / 1852,
 
-     radians: 1,
 
-     yards: earthRadius * 1.0936,
 
- };
 
- /**
 
-  * Units of measurement factors based on 1 meter.
 
-  *
 
-  * @memberof helpers
 
-  * @type {Object}
 
-  */
 
- export var unitsFactors = {
 
-     centimeters: 100,
 
-     centimetres: 100,
 
-     degrees: 1 / 111325,
 
-     feet: 3.28084,
 
-     inches: 39.37,
 
-     kilometers: 1 / 1000,
 
-     kilometres: 1 / 1000,
 
-     meters: 1,
 
-     metres: 1,
 
-     miles: 1 / 1609.344,
 
-     millimeters: 1000,
 
-     millimetres: 1000,
 
-     nauticalmiles: 1 / 1852,
 
-     radians: 1 / earthRadius,
 
-     yards: 1.0936133,
 
- };
 
- /**
 
-  * Area of measurement factors based on 1 square meter.
 
-  *
 
-  * @memberof helpers
 
-  * @type {Object}
 
-  */
 
- export var areaFactors = {
 
-     acres: 0.000247105,
 
-     centimeters: 10000,
 
-     centimetres: 10000,
 
-     feet: 10.763910417,
 
-     hectares: 0.0001,
 
-     inches: 1550.003100006,
 
-     kilometers: 0.000001,
 
-     kilometres: 0.000001,
 
-     meters: 1,
 
-     metres: 1,
 
-     miles: 3.86e-7,
 
-     millimeters: 1000000,
 
-     millimetres: 1000000,
 
-     yards: 1.195990046,
 
- };
 
- /**
 
-  * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.
 
-  *
 
-  * @name feature
 
-  * @param {Geometry} geometry input geometry
 
-  * @param {Object} [properties={}] an Object of key-value pairs to add as properties
 
-  * @param {Object} [options={}] Optional Parameters
 
-  * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
 
-  * @param {string|number} [options.id] Identifier associated with the Feature
 
-  * @returns {Feature} a GeoJSON Feature
 
-  * @example
 
-  * var geometry = {
 
-  *   "type": "Point",
 
-  *   "coordinates": [110, 50]
 
-  * };
 
-  *
 
-  * var feature = turf.feature(geometry);
 
-  *
 
-  * //=feature
 
-  */
 
- export function feature(geom, properties, options) {
 
-     if (options === void 0) { options = {}; }
 
-     var feat = { type: "Feature" };
 
-     if (options.id === 0 || options.id) {
 
-         feat.id = options.id;
 
-     }
 
-     if (options.bbox) {
 
-         feat.bbox = options.bbox;
 
-     }
 
-     feat.properties = properties || {};
 
-     feat.geometry = geom;
 
-     return feat;
 
- }
 
- /**
 
-  * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.
 
-  * For GeometryCollection type use `helpers.geometryCollection`
 
-  *
 
-  * @name geometry
 
-  * @param {string} type Geometry Type
 
-  * @param {Array<any>} coordinates Coordinates
 
-  * @param {Object} [options={}] Optional Parameters
 
-  * @returns {Geometry} a GeoJSON Geometry
 
-  * @example
 
-  * var type = "Point";
 
-  * var coordinates = [110, 50];
 
-  * var geometry = turf.geometry(type, coordinates);
 
-  * // => geometry
 
-  */
 
- export function geometry(type, coordinates, _options) {
 
-     if (_options === void 0) { _options = {}; }
 
-     switch (type) {
 
-         case "Point":
 
-             return point(coordinates).geometry;
 
-         case "LineString":
 
-             return lineString(coordinates).geometry;
 
-         case "Polygon":
 
-             return polygon(coordinates).geometry;
 
-         case "MultiPoint":
 
-             return multiPoint(coordinates).geometry;
 
-         case "MultiLineString":
 
-             return multiLineString(coordinates).geometry;
 
-         case "MultiPolygon":
 
-             return multiPolygon(coordinates).geometry;
 
-         default:
 
-             throw new Error(type + " is invalid");
 
-     }
 
- }
 
- /**
 
-  * Creates a {@link Point} {@link Feature} from a Position.
 
-  *
 
-  * @name point
 
-  * @param {Array<number>} coordinates longitude, latitude position (each in decimal degrees)
 
-  * @param {Object} [properties={}] an Object of key-value pairs to add as properties
 
-  * @param {Object} [options={}] Optional Parameters
 
-  * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
 
-  * @param {string|number} [options.id] Identifier associated with the Feature
 
-  * @returns {Feature<Point>} a Point feature
 
-  * @example
 
-  * var point = turf.point([-75.343, 39.984]);
 
-  *
 
-  * //=point
 
-  */
 
- export function point(coordinates, properties, options) {
 
-     if (options === void 0) { options = {}; }
 
-     if (!coordinates) {
 
-         throw new Error("coordinates is required");
 
-     }
 
-     if (!Array.isArray(coordinates)) {
 
-         throw new Error("coordinates must be an Array");
 
-     }
 
-     if (coordinates.length < 2) {
 
-         throw new Error("coordinates must be at least 2 numbers long");
 
-     }
 
-     if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) {
 
-         throw new Error("coordinates must contain numbers");
 
-     }
 
-     var geom = {
 
-         type: "Point",
 
-         coordinates: coordinates,
 
-     };
 
-     return feature(geom, properties, options);
 
- }
 
- /**
 
-  * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.
 
-  *
 
-  * @name points
 
-  * @param {Array<Array<number>>} coordinates an array of Points
 
-  * @param {Object} [properties={}] Translate these properties to each Feature
 
-  * @param {Object} [options={}] Optional Parameters
 
-  * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
 
-  * associated with the FeatureCollection
 
-  * @param {string|number} [options.id] Identifier associated with the FeatureCollection
 
-  * @returns {FeatureCollection<Point>} Point Feature
 
-  * @example
 
-  * var points = turf.points([
 
-  *   [-75, 39],
 
-  *   [-80, 45],
 
-  *   [-78, 50]
 
-  * ]);
 
-  *
 
-  * //=points
 
-  */
 
- export function points(coordinates, properties, options) {
 
-     if (options === void 0) { options = {}; }
 
-     return featureCollection(coordinates.map(function (coords) {
 
-         return point(coords, properties);
 
-     }), options);
 
- }
 
- /**
 
-  * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.
 
-  *
 
-  * @name polygon
 
-  * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
 
-  * @param {Object} [properties={}] an Object of key-value pairs to add as properties
 
-  * @param {Object} [options={}] Optional Parameters
 
-  * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
 
-  * @param {string|number} [options.id] Identifier associated with the Feature
 
-  * @returns {Feature<Polygon>} Polygon Feature
 
-  * @example
 
-  * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });
 
-  *
 
-  * //=polygon
 
-  */
 
- export function polygon(coordinates, properties, options) {
 
-     if (options === void 0) { options = {}; }
 
-     for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {
 
-         var ring = coordinates_1[_i];
 
-         if (ring.length < 4) {
 
-             throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");
 
-         }
 
-         for (var j = 0; j < ring[ring.length - 1].length; j++) {
 
-             // Check if first point of Polygon contains two numbers
 
-             if (ring[ring.length - 1][j] !== ring[0][j]) {
 
-                 throw new Error("First and last Position are not equivalent.");
 
-             }
 
-         }
 
-     }
 
-     var geom = {
 
-         type: "Polygon",
 
-         coordinates: coordinates,
 
-     };
 
-     return feature(geom, properties, options);
 
- }
 
- /**
 
-  * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.
 
-  *
 
-  * @name polygons
 
-  * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygon coordinates
 
-  * @param {Object} [properties={}] an Object of key-value pairs to add as properties
 
-  * @param {Object} [options={}] Optional Parameters
 
-  * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
 
-  * @param {string|number} [options.id] Identifier associated with the FeatureCollection
 
-  * @returns {FeatureCollection<Polygon>} Polygon FeatureCollection
 
-  * @example
 
-  * var polygons = turf.polygons([
 
-  *   [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],
 
-  *   [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],
 
-  * ]);
 
-  *
 
-  * //=polygons
 
-  */
 
- export function polygons(coordinates, properties, options) {
 
-     if (options === void 0) { options = {}; }
 
-     return featureCollection(coordinates.map(function (coords) {
 
-         return polygon(coords, properties);
 
-     }), options);
 
- }
 
- /**
 
-  * Creates a {@link LineString} {@link Feature} from an Array of Positions.
 
-  *
 
-  * @name lineString
 
-  * @param {Array<Array<number>>} coordinates an array of Positions
 
-  * @param {Object} [properties={}] an Object of key-value pairs to add as properties
 
-  * @param {Object} [options={}] Optional Parameters
 
-  * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
 
-  * @param {string|number} [options.id] Identifier associated with the Feature
 
-  * @returns {Feature<LineString>} LineString Feature
 
-  * @example
 
-  * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});
 
-  * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});
 
-  *
 
-  * //=linestring1
 
-  * //=linestring2
 
-  */
 
- export function lineString(coordinates, properties, options) {
 
-     if (options === void 0) { options = {}; }
 
-     if (coordinates.length < 2) {
 
-         throw new Error("coordinates must be an array of two or more positions");
 
-     }
 
-     var geom = {
 
-         type: "LineString",
 
-         coordinates: coordinates,
 
-     };
 
-     return feature(geom, properties, options);
 
- }
 
- /**
 
-  * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.
 
-  *
 
-  * @name lineStrings
 
-  * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
 
-  * @param {Object} [properties={}] an Object of key-value pairs to add as properties
 
-  * @param {Object} [options={}] Optional Parameters
 
-  * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
 
-  * associated with the FeatureCollection
 
-  * @param {string|number} [options.id] Identifier associated with the FeatureCollection
 
-  * @returns {FeatureCollection<LineString>} LineString FeatureCollection
 
-  * @example
 
-  * var linestrings = turf.lineStrings([
 
-  *   [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],
 
-  *   [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]
 
-  * ]);
 
-  *
 
-  * //=linestrings
 
-  */
 
- export function lineStrings(coordinates, properties, options) {
 
-     if (options === void 0) { options = {}; }
 
-     return featureCollection(coordinates.map(function (coords) {
 
-         return lineString(coords, properties);
 
-     }), options);
 
- }
 
- /**
 
-  * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.
 
-  *
 
-  * @name featureCollection
 
-  * @param {Feature[]} features input features
 
-  * @param {Object} [options={}] Optional Parameters
 
-  * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
 
-  * @param {string|number} [options.id] Identifier associated with the Feature
 
-  * @returns {FeatureCollection} FeatureCollection of Features
 
-  * @example
 
-  * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});
 
-  * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});
 
-  * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});
 
-  *
 
-  * var collection = turf.featureCollection([
 
-  *   locationA,
 
-  *   locationB,
 
-  *   locationC
 
-  * ]);
 
-  *
 
-  * //=collection
 
-  */
 
- export function featureCollection(features, options) {
 
-     if (options === void 0) { options = {}; }
 
-     var fc = { type: "FeatureCollection" };
 
-     if (options.id) {
 
-         fc.id = options.id;
 
-     }
 
-     if (options.bbox) {
 
-         fc.bbox = options.bbox;
 
-     }
 
-     fc.features = features;
 
-     return fc;
 
- }
 
- /**
 
-  * Creates a {@link Feature<MultiLineString>} based on a
 
-  * coordinate array. Properties can be added optionally.
 
-  *
 
-  * @name multiLineString
 
-  * @param {Array<Array<Array<number>>>} coordinates an array of LineStrings
 
-  * @param {Object} [properties={}] an Object of key-value pairs to add as properties
 
-  * @param {Object} [options={}] Optional Parameters
 
-  * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
 
-  * @param {string|number} [options.id] Identifier associated with the Feature
 
-  * @returns {Feature<MultiLineString>} a MultiLineString feature
 
-  * @throws {Error} if no coordinates are passed
 
-  * @example
 
-  * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);
 
-  *
 
-  * //=multiLine
 
-  */
 
- export function multiLineString(coordinates, properties, options) {
 
-     if (options === void 0) { options = {}; }
 
-     var geom = {
 
-         type: "MultiLineString",
 
-         coordinates: coordinates,
 
-     };
 
-     return feature(geom, properties, options);
 
- }
 
- /**
 
-  * Creates a {@link Feature<MultiPoint>} based on a
 
-  * coordinate array. Properties can be added optionally.
 
-  *
 
-  * @name multiPoint
 
-  * @param {Array<Array<number>>} coordinates an array of Positions
 
-  * @param {Object} [properties={}] an Object of key-value pairs to add as properties
 
-  * @param {Object} [options={}] Optional Parameters
 
-  * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
 
-  * @param {string|number} [options.id] Identifier associated with the Feature
 
-  * @returns {Feature<MultiPoint>} a MultiPoint feature
 
-  * @throws {Error} if no coordinates are passed
 
-  * @example
 
-  * var multiPt = turf.multiPoint([[0,0],[10,10]]);
 
-  *
 
-  * //=multiPt
 
-  */
 
- export function multiPoint(coordinates, properties, options) {
 
-     if (options === void 0) { options = {}; }
 
-     var geom = {
 
-         type: "MultiPoint",
 
-         coordinates: coordinates,
 
-     };
 
-     return feature(geom, properties, options);
 
- }
 
- /**
 
-  * Creates a {@link Feature<MultiPolygon>} based on a
 
-  * coordinate array. Properties can be added optionally.
 
-  *
 
-  * @name multiPolygon
 
-  * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygons
 
-  * @param {Object} [properties={}] an Object of key-value pairs to add as properties
 
-  * @param {Object} [options={}] Optional Parameters
 
-  * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
 
-  * @param {string|number} [options.id] Identifier associated with the Feature
 
-  * @returns {Feature<MultiPolygon>} a multipolygon feature
 
-  * @throws {Error} if no coordinates are passed
 
-  * @example
 
-  * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);
 
-  *
 
-  * //=multiPoly
 
-  *
 
-  */
 
- export function multiPolygon(coordinates, properties, options) {
 
-     if (options === void 0) { options = {}; }
 
-     var geom = {
 
-         type: "MultiPolygon",
 
-         coordinates: coordinates,
 
-     };
 
-     return feature(geom, properties, options);
 
- }
 
- /**
 
-  * Creates a {@link Feature<GeometryCollection>} based on a
 
-  * coordinate array. Properties can be added optionally.
 
-  *
 
-  * @name geometryCollection
 
-  * @param {Array<Geometry>} geometries an array of GeoJSON Geometries
 
-  * @param {Object} [properties={}] an Object of key-value pairs to add as properties
 
-  * @param {Object} [options={}] Optional Parameters
 
-  * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
 
-  * @param {string|number} [options.id] Identifier associated with the Feature
 
-  * @returns {Feature<GeometryCollection>} a GeoJSON GeometryCollection Feature
 
-  * @example
 
-  * var pt = turf.geometry("Point", [100, 0]);
 
-  * var line = turf.geometry("LineString", [[101, 0], [102, 1]]);
 
-  * var collection = turf.geometryCollection([pt, line]);
 
-  *
 
-  * // => collection
 
-  */
 
- export function geometryCollection(geometries, properties, options) {
 
-     if (options === void 0) { options = {}; }
 
-     var geom = {
 
-         type: "GeometryCollection",
 
-         geometries: geometries,
 
-     };
 
-     return feature(geom, properties, options);
 
- }
 
- /**
 
-  * Round number to precision
 
-  *
 
-  * @param {number} num Number
 
-  * @param {number} [precision=0] Precision
 
-  * @returns {number} rounded number
 
-  * @example
 
-  * turf.round(120.4321)
 
-  * //=120
 
-  *
 
-  * turf.round(120.4321, 2)
 
-  * //=120.43
 
-  */
 
- export function round(num, precision) {
 
-     if (precision === void 0) { precision = 0; }
 
-     if (precision && !(precision >= 0)) {
 
-         throw new Error("precision must be a positive number");
 
-     }
 
-     var multiplier = Math.pow(10, precision || 0);
 
-     return Math.round(num * multiplier) / multiplier;
 
- }
 
- /**
 
-  * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.
 
-  * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
 
-  *
 
-  * @name radiansToLength
 
-  * @param {number} radians in radians across the sphere
 
-  * @param {string} [units="kilometers"] can be degrees, radians, miles, inches, yards, metres,
 
-  * meters, kilometres, kilometers.
 
-  * @returns {number} distance
 
-  */
 
- export function radiansToLength(radians, units) {
 
-     if (units === void 0) { units = "kilometers"; }
 
-     var factor = factors[units];
 
-     if (!factor) {
 
-         throw new Error(units + " units is invalid");
 
-     }
 
-     return radians * factor;
 
- }
 
- /**
 
-  * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians
 
-  * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
 
-  *
 
-  * @name lengthToRadians
 
-  * @param {number} distance in real units
 
-  * @param {string} [units="kilometers"] can be degrees, radians, miles, inches, yards, metres,
 
-  * meters, kilometres, kilometers.
 
-  * @returns {number} radians
 
-  */
 
- export function lengthToRadians(distance, units) {
 
-     if (units === void 0) { units = "kilometers"; }
 
-     var factor = factors[units];
 
-     if (!factor) {
 
-         throw new Error(units + " units is invalid");
 
-     }
 
-     return distance / factor;
 
- }
 
- /**
 
-  * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees
 
-  * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet
 
-  *
 
-  * @name lengthToDegrees
 
-  * @param {number} distance in real units
 
-  * @param {string} [units="kilometers"] can be degrees, radians, miles, inches, yards, metres,
 
-  * meters, kilometres, kilometers.
 
-  * @returns {number} degrees
 
-  */
 
- export function lengthToDegrees(distance, units) {
 
-     return radiansToDegrees(lengthToRadians(distance, units));
 
- }
 
- /**
 
-  * Converts any bearing angle from the north line direction (positive clockwise)
 
-  * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line
 
-  *
 
-  * @name bearingToAzimuth
 
-  * @param {number} bearing angle, between -180 and +180 degrees
 
-  * @returns {number} angle between 0 and 360 degrees
 
-  */
 
- export function bearingToAzimuth(bearing) {
 
-     var angle = bearing % 360;
 
-     if (angle < 0) {
 
-         angle += 360;
 
-     }
 
-     return angle;
 
- }
 
- /**
 
-  * Converts an angle in radians to degrees
 
-  *
 
-  * @name radiansToDegrees
 
-  * @param {number} radians angle in radians
 
-  * @returns {number} degrees between 0 and 360 degrees
 
-  */
 
- export function radiansToDegrees(radians) {
 
-     var degrees = radians % (2 * Math.PI);
 
-     return (degrees * 180) / Math.PI;
 
- }
 
- /**
 
-  * Converts an angle in degrees to radians
 
-  *
 
-  * @name degreesToRadians
 
-  * @param {number} degrees angle between 0 and 360 degrees
 
-  * @returns {number} angle in radians
 
-  */
 
- export function degreesToRadians(degrees) {
 
-     var radians = degrees % 360;
 
-     return (radians * Math.PI) / 180;
 
- }
 
- /**
 
-  * Converts a length to the requested unit.
 
-  * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
 
-  *
 
-  * @param {number} length to be converted
 
-  * @param {Units} [originalUnit="kilometers"] of the length
 
-  * @param {Units} [finalUnit="kilometers"] returned unit
 
-  * @returns {number} the converted length
 
-  */
 
- export function convertLength(length, originalUnit, finalUnit) {
 
-     if (originalUnit === void 0) { originalUnit = "kilometers"; }
 
-     if (finalUnit === void 0) { finalUnit = "kilometers"; }
 
-     if (!(length >= 0)) {
 
-         throw new Error("length must be a positive number");
 
-     }
 
-     return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);
 
- }
 
- /**
 
-  * Converts a area to the requested unit.
 
-  * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches, hectares
 
-  * @param {number} area to be converted
 
-  * @param {Units} [originalUnit="meters"] of the distance
 
-  * @param {Units} [finalUnit="kilometers"] returned unit
 
-  * @returns {number} the converted area
 
-  */
 
- export function convertArea(area, originalUnit, finalUnit) {
 
-     if (originalUnit === void 0) { originalUnit = "meters"; }
 
-     if (finalUnit === void 0) { finalUnit = "kilometers"; }
 
-     if (!(area >= 0)) {
 
-         throw new Error("area must be a positive number");
 
-     }
 
-     var startFactor = areaFactors[originalUnit];
 
-     if (!startFactor) {
 
-         throw new Error("invalid original units");
 
-     }
 
-     var finalFactor = areaFactors[finalUnit];
 
-     if (!finalFactor) {
 
-         throw new Error("invalid final units");
 
-     }
 
-     return (area / startFactor) * finalFactor;
 
- }
 
- /**
 
-  * isNumber
 
-  *
 
-  * @param {*} num Number to validate
 
-  * @returns {boolean} true/false
 
-  * @example
 
-  * turf.isNumber(123)
 
-  * //=true
 
-  * turf.isNumber('foo')
 
-  * //=false
 
-  */
 
- export function isNumber(num) {
 
-     return !isNaN(num) && num !== null && !Array.isArray(num);
 
- }
 
- /**
 
-  * isObject
 
-  *
 
-  * @param {*} input variable to validate
 
-  * @returns {boolean} true/false
 
-  * @example
 
-  * turf.isObject({elevation: 10})
 
-  * //=true
 
-  * turf.isObject('foo')
 
-  * //=false
 
-  */
 
- export function isObject(input) {
 
-     return !!input && input.constructor === Object;
 
- }
 
- /**
 
-  * Validate BBox
 
-  *
 
-  * @private
 
-  * @param {Array<number>} bbox BBox to validate
 
-  * @returns {void}
 
-  * @throws Error if BBox is not valid
 
-  * @example
 
-  * validateBBox([-180, -40, 110, 50])
 
-  * //=OK
 
-  * validateBBox([-180, -40])
 
-  * //=Error
 
-  * validateBBox('Foo')
 
-  * //=Error
 
-  * validateBBox(5)
 
-  * //=Error
 
-  * validateBBox(null)
 
-  * //=Error
 
-  * validateBBox(undefined)
 
-  * //=Error
 
-  */
 
- export function validateBBox(bbox) {
 
-     if (!bbox) {
 
-         throw new Error("bbox is required");
 
-     }
 
-     if (!Array.isArray(bbox)) {
 
-         throw new Error("bbox must be an Array");
 
-     }
 
-     if (bbox.length !== 4 && bbox.length !== 6) {
 
-         throw new Error("bbox must be an Array of 4 or 6 numbers");
 
-     }
 
-     bbox.forEach(function (num) {
 
-         if (!isNumber(num)) {
 
-             throw new Error("bbox must only contain numbers");
 
-         }
 
-     });
 
- }
 
- /**
 
-  * Validate Id
 
-  *
 
-  * @private
 
-  * @param {string|number} id Id to validate
 
-  * @returns {void}
 
-  * @throws Error if Id is not valid
 
-  * @example
 
-  * validateId([-180, -40, 110, 50])
 
-  * //=Error
 
-  * validateId([-180, -40])
 
-  * //=Error
 
-  * validateId('Foo')
 
-  * //=OK
 
-  * validateId(5)
 
-  * //=OK
 
-  * validateId(null)
 
-  * //=Error
 
-  * validateId(undefined)
 
-  * //=Error
 
-  */
 
- export function validateId(id) {
 
-     if (!id) {
 
-         throw new Error("id is required");
 
-     }
 
-     if (["string", "number"].indexOf(typeof id) === -1) {
 
-         throw new Error("id must be a number or a string");
 
-     }
 
- }
 
 
  |