1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- 'use strict';
- var circle = require('@turf/circle');
- var lineArc = require('@turf/line-arc');
- var meta = require('@turf/meta');
- var helpers = require('@turf/helpers');
- var invariant = require('@turf/invariant');
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
- var circle__default = /*#__PURE__*/_interopDefaultLegacy(circle);
- var lineArc__default = /*#__PURE__*/_interopDefaultLegacy(lineArc);
- /**
- * Creates a circular sector of a circle of given radius and center {@link Point},
- * between (clockwise) bearing1 and bearing2; 0 bearing is North of center point, positive clockwise.
- *
- * @name sector
- * @param {Coord} center center point
- * @param {number} radius radius of the circle
- * @param {number} bearing1 angle, in decimal degrees, of the first radius of the sector
- * @param {number} bearing2 angle, in decimal degrees, of the second radius of the sector
- * @param {Object} [options={}] Optional parameters
- * @param {string} [options.units='kilometers'] miles, kilometers, degrees, or radians
- * @param {number} [options.steps=64] number of steps
- * @param {Properties} [options.properties={}] Translate properties to Feature Polygon
- * @returns {Feature<Polygon>} sector polygon
- * @example
- * var center = turf.point([-75, 40]);
- * var radius = 5;
- * var bearing1 = 25;
- * var bearing2 = 45;
- *
- * var sector = turf.sector(center, radius, bearing1, bearing2);
- *
- * //addToMap
- * var addToMap = [center, sector];
- */
- function sector(center, radius, bearing1, bearing2, options) {
- // Optional parameters
- options = options || {};
- if (!helpers.isObject(options)) throw new Error("options is invalid");
- var properties = options.properties;
- // validation
- if (!center) throw new Error("center is required");
- if (bearing1 === undefined || bearing1 === null)
- throw new Error("bearing1 is required");
- if (bearing2 === undefined || bearing2 === null)
- throw new Error("bearing2 is required");
- if (!radius) throw new Error("radius is required");
- if (typeof options !== "object") throw new Error("options must be an object");
- if (convertAngleTo360(bearing1) === convertAngleTo360(bearing2)) {
- return circle__default['default'](center, radius, options);
- }
- var coords = invariant.getCoords(center);
- var arc = lineArc__default['default'](center, radius, bearing1, bearing2, options);
- var sliceCoords = [[coords]];
- meta.coordEach(arc, function (currentCoords) {
- sliceCoords[0].push(currentCoords);
- });
- sliceCoords[0].push(coords);
- return helpers.polygon(sliceCoords, properties);
- }
- /**
- * Takes any angle in degrees
- * and returns a valid angle between 0-360 degrees
- *
- * @private
- * @param {number} alfa angle between -180-180 degrees
- * @returns {number} angle between 0-360 degrees
- */
- function convertAngleTo360(alfa) {
- var beta = alfa % 360;
- if (beta < 0) beta += 360;
- return beta;
- }
- module.exports = sector;
- module.exports.default = sector;
|