index.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. var helpers_1 = require("@turf/helpers");
  7. var invariant_1 = require("@turf/invariant");
  8. var spline_1 = __importDefault(require("./lib/spline"));
  9. /**
  10. * Takes a {@link LineString|line} and returns a curved version
  11. * by applying a [Bezier spline](http://en.wikipedia.org/wiki/B%C3%A9zier_spline)
  12. * algorithm.
  13. *
  14. * The bezier spline implementation is by [Leszek Rybicki](http://leszek.rybicki.cc/).
  15. *
  16. * @name bezierSpline
  17. * @param {Feature<LineString>} line input LineString
  18. * @param {Object} [options={}] Optional parameters
  19. * @param {Object} [options.properties={}] Translate properties to output
  20. * @param {number} [options.resolution=10000] time in milliseconds between points
  21. * @param {number} [options.sharpness=0.85] a measure of how curvy the path should be between splines
  22. * @returns {Feature<LineString>} curved line
  23. * @example
  24. * var line = turf.lineString([
  25. * [-76.091308, 18.427501],
  26. * [-76.695556, 18.729501],
  27. * [-76.552734, 19.40443],
  28. * [-74.61914, 19.134789],
  29. * [-73.652343, 20.07657],
  30. * [-73.157958, 20.210656]
  31. * ]);
  32. *
  33. * var curved = turf.bezierSpline(line);
  34. *
  35. * //addToMap
  36. * var addToMap = [line, curved]
  37. * curved.properties = { stroke: '#0F0' };
  38. */
  39. function bezier(line, options) {
  40. if (options === void 0) { options = {}; }
  41. // Optional params
  42. var resolution = options.resolution || 10000;
  43. var sharpness = options.sharpness || 0.85;
  44. var coords = [];
  45. var points = invariant_1.getGeom(line).coordinates.map(function (pt) {
  46. return { x: pt[0], y: pt[1] };
  47. });
  48. var spline = new spline_1.default({
  49. duration: resolution,
  50. points: points,
  51. sharpness: sharpness,
  52. });
  53. var pushCoord = function (time) {
  54. var pos = spline.pos(time);
  55. if (Math.floor(time / 100) % 2 === 0) {
  56. coords.push([pos.x, pos.y]);
  57. }
  58. };
  59. for (var i = 0; i < spline.duration; i += 10) {
  60. pushCoord(i);
  61. }
  62. pushCoord(spline.duration);
  63. return helpers_1.lineString(coords, options.properties);
  64. }
  65. exports.default = bezier;