index.cjs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. "use strict";Object.defineProperty(exports, "__esModule", {value: true});// index.ts
  2. var _meta = require('@turf/meta');
  3. var _helpers = require('@turf/helpers');
  4. function getCluster(geojson, filter) {
  5. if (!geojson) throw new Error("geojson is required");
  6. if (geojson.type !== "FeatureCollection")
  7. throw new Error("geojson must be a FeatureCollection");
  8. if (filter === void 0 || filter === null)
  9. throw new Error("filter is required");
  10. var features = [];
  11. _meta.featureEach.call(void 0, geojson, function(feature) {
  12. if (applyFilter(feature.properties, filter)) features.push(feature);
  13. });
  14. return _helpers.featureCollection.call(void 0, features);
  15. }
  16. function clusterEach(geojson, property, callback) {
  17. if (!geojson) throw new Error("geojson is required");
  18. if (geojson.type !== "FeatureCollection")
  19. throw new Error("geojson must be a FeatureCollection");
  20. if (property === void 0 || property === null)
  21. throw new Error("property is required");
  22. var bins = createBins(geojson, property);
  23. var values = Object.keys(bins);
  24. for (var index = 0; index < values.length; index++) {
  25. var value = values[index];
  26. var bin = bins[value];
  27. var features = [];
  28. for (var i = 0; i < bin.length; i++) {
  29. features.push(geojson.features[bin[i]]);
  30. }
  31. callback(_helpers.featureCollection.call(void 0, features), value, index);
  32. }
  33. }
  34. function clusterReduce(geojson, property, callback, initialValue) {
  35. var previousValue = initialValue;
  36. clusterEach(
  37. geojson,
  38. property,
  39. function(cluster, clusterValue, currentIndex) {
  40. if (currentIndex === 0 && initialValue === void 0)
  41. previousValue = cluster;
  42. else
  43. previousValue = callback(
  44. previousValue,
  45. cluster,
  46. clusterValue,
  47. currentIndex
  48. );
  49. }
  50. );
  51. return previousValue;
  52. }
  53. function createBins(geojson, property) {
  54. var bins = {};
  55. _meta.featureEach.call(void 0, geojson, function(feature, i) {
  56. var properties = feature.properties || {};
  57. if (Object.prototype.hasOwnProperty.call(properties, String(property))) {
  58. var value = properties[property];
  59. if (Object.prototype.hasOwnProperty.call(bins, value))
  60. bins[value].push(i);
  61. else bins[value] = [i];
  62. }
  63. });
  64. return bins;
  65. }
  66. function applyFilter(properties, filter) {
  67. if (properties === void 0) return false;
  68. var filterType = typeof filter;
  69. if (filterType === "number" || filterType === "string")
  70. return Object.prototype.hasOwnProperty.call(properties, filter);
  71. else if (Array.isArray(filter)) {
  72. for (var i = 0; i < filter.length; i++) {
  73. if (!applyFilter(properties, filter[i])) return false;
  74. }
  75. return true;
  76. } else {
  77. return propertiesContainsFilter(properties, filter);
  78. }
  79. }
  80. function propertiesContainsFilter(properties, filter) {
  81. var keys = Object.keys(filter);
  82. for (var i = 0; i < keys.length; i++) {
  83. var key = keys[i];
  84. if (properties[key] !== filter[key]) return false;
  85. }
  86. return true;
  87. }
  88. function filterProperties(properties, keys) {
  89. if (!keys) return {};
  90. if (!keys.length) return {};
  91. var newProperties = {};
  92. for (var i = 0; i < keys.length; i++) {
  93. var key = keys[i];
  94. if (Object.prototype.hasOwnProperty.call(properties, key))
  95. newProperties[key] = properties[key];
  96. }
  97. return newProperties;
  98. }
  99. exports.applyFilter = applyFilter; exports.clusterEach = clusterEach; exports.clusterReduce = clusterReduce; exports.createBins = createBins; exports.filterProperties = filterProperties; exports.getCluster = getCluster; exports.propertiesContainsFilter = propertiesContainsFilter;
  100. //# sourceMappingURL=index.cjs.map