index.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import destination from "@turf/destination";
  2. import { polygon, } from "@turf/helpers";
  3. /**
  4. * Takes a {@link Point} and calculates the circle polygon given a radius in degrees, radians, miles, or kilometers; and steps for precision.
  5. *
  6. * @name circle
  7. * @param {Feature<Point>|number[]} center center point
  8. * @param {number} radius radius of the circle
  9. * @param {Object} [options={}] Optional parameters
  10. * @param {number} [options.steps=64] number of steps
  11. * @param {string} [options.units='kilometers'] miles, kilometers, degrees, or radians
  12. * @param {Object} [options.properties={}] properties
  13. * @returns {Feature<Polygon>} circle polygon
  14. * @example
  15. * var center = [-75.343, 39.984];
  16. * var radius = 5;
  17. * var options = {steps: 10, units: 'kilometers', properties: {foo: 'bar'}};
  18. * var circle = turf.circle(center, radius, options);
  19. *
  20. * //addToMap
  21. * var addToMap = [turf.point(center), circle]
  22. */
  23. function circle(center, radius, options) {
  24. if (options === void 0) { options = {}; }
  25. // default params
  26. var steps = options.steps || 64;
  27. var properties = options.properties
  28. ? options.properties
  29. : !Array.isArray(center) && center.type === "Feature" && center.properties
  30. ? center.properties
  31. : {};
  32. // main
  33. var coordinates = [];
  34. for (var i = 0; i < steps; i++) {
  35. coordinates.push(destination(center, radius, (i * -360) / steps, options).geometry
  36. .coordinates);
  37. }
  38. coordinates.push(coordinates[0]);
  39. return polygon([coordinates], properties);
  40. }
  41. export default circle;