index.cjs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. "use strict";Object.defineProperty(exports, "__esModule", {value: true});// index.ts
  2. var _helpers = require('@turf/helpers');
  3. var _meta = require('@turf/meta');
  4. function area(geojson) {
  5. return _meta.geomReduce.call(void 0,
  6. geojson,
  7. (value, geom) => {
  8. return value + calculateArea(geom);
  9. },
  10. 0
  11. );
  12. }
  13. function calculateArea(geom) {
  14. let total = 0;
  15. let i;
  16. switch (geom.type) {
  17. case "Polygon":
  18. return polygonArea(geom.coordinates);
  19. case "MultiPolygon":
  20. for (i = 0; i < geom.coordinates.length; i++) {
  21. total += polygonArea(geom.coordinates[i]);
  22. }
  23. return total;
  24. case "Point":
  25. case "MultiPoint":
  26. case "LineString":
  27. case "MultiLineString":
  28. return 0;
  29. }
  30. return 0;
  31. }
  32. function polygonArea(coords) {
  33. let total = 0;
  34. if (coords && coords.length > 0) {
  35. total += Math.abs(ringArea(coords[0]));
  36. for (let i = 1; i < coords.length; i++) {
  37. total -= Math.abs(ringArea(coords[i]));
  38. }
  39. }
  40. return total;
  41. }
  42. var FACTOR = _helpers.earthRadius * _helpers.earthRadius / 2;
  43. var PI_OVER_180 = Math.PI / 180;
  44. function ringArea(coords) {
  45. const coordsLength = coords.length - 1;
  46. if (coordsLength <= 2) return 0;
  47. let total = 0;
  48. let i = 0;
  49. while (i < coordsLength) {
  50. const lower = coords[i];
  51. const middle = coords[i + 1 === coordsLength ? 0 : i + 1];
  52. const upper = coords[i + 2 >= coordsLength ? (i + 2) % coordsLength : i + 2];
  53. const lowerX = lower[0] * PI_OVER_180;
  54. const middleY = middle[1] * PI_OVER_180;
  55. const upperX = upper[0] * PI_OVER_180;
  56. total += (upperX - lowerX) * Math.sin(middleY);
  57. i++;
  58. }
  59. return total * FACTOR;
  60. }
  61. var turf_area_default = area;
  62. exports.area = area; exports.default = turf_area_default;
  63. //# sourceMappingURL=index.cjs.map