| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- // index.ts
- import { featureEach } from "@turf/meta";
- import { featureCollection } from "@turf/helpers";
- function getCluster(geojson, filter) {
- if (!geojson) throw new Error("geojson is required");
- if (geojson.type !== "FeatureCollection")
- throw new Error("geojson must be a FeatureCollection");
- if (filter === void 0 || filter === null)
- throw new Error("filter is required");
- var features = [];
- featureEach(geojson, function(feature) {
- if (applyFilter(feature.properties, filter)) features.push(feature);
- });
- return featureCollection(features);
- }
- function clusterEach(geojson, property, callback) {
- if (!geojson) throw new Error("geojson is required");
- if (geojson.type !== "FeatureCollection")
- throw new Error("geojson must be a FeatureCollection");
- if (property === void 0 || property === null)
- throw new Error("property is required");
- var bins = createBins(geojson, property);
- var values = Object.keys(bins);
- for (var index = 0; index < values.length; index++) {
- var value = values[index];
- var bin = bins[value];
- var features = [];
- for (var i = 0; i < bin.length; i++) {
- features.push(geojson.features[bin[i]]);
- }
- callback(featureCollection(features), value, index);
- }
- }
- function clusterReduce(geojson, property, callback, initialValue) {
- var previousValue = initialValue;
- clusterEach(
- geojson,
- property,
- function(cluster, clusterValue, currentIndex) {
- if (currentIndex === 0 && initialValue === void 0)
- previousValue = cluster;
- else
- previousValue = callback(
- previousValue,
- cluster,
- clusterValue,
- currentIndex
- );
- }
- );
- return previousValue;
- }
- function createBins(geojson, property) {
- var bins = {};
- featureEach(geojson, function(feature, i) {
- var properties = feature.properties || {};
- if (Object.prototype.hasOwnProperty.call(properties, String(property))) {
- var value = properties[property];
- if (Object.prototype.hasOwnProperty.call(bins, value))
- bins[value].push(i);
- else bins[value] = [i];
- }
- });
- return bins;
- }
- function applyFilter(properties, filter) {
- if (properties === void 0) return false;
- var filterType = typeof filter;
- if (filterType === "number" || filterType === "string")
- return Object.prototype.hasOwnProperty.call(properties, filter);
- else if (Array.isArray(filter)) {
- for (var i = 0; i < filter.length; i++) {
- if (!applyFilter(properties, filter[i])) return false;
- }
- return true;
- } else {
- return propertiesContainsFilter(properties, filter);
- }
- }
- function propertiesContainsFilter(properties, filter) {
- var keys = Object.keys(filter);
- for (var i = 0; i < keys.length; i++) {
- var key = keys[i];
- if (properties[key] !== filter[key]) return false;
- }
- return true;
- }
- function filterProperties(properties, keys) {
- if (!keys) return {};
- if (!keys.length) return {};
- var newProperties = {};
- for (var i = 0; i < keys.length; i++) {
- var key = keys[i];
- if (Object.prototype.hasOwnProperty.call(properties, key))
- newProperties[key] = properties[key];
- }
- return newProperties;
- }
- export {
- applyFilter,
- clusterEach,
- clusterReduce,
- createBins,
- filterProperties,
- getCluster,
- propertiesContainsFilter
- };
- //# sourceMappingURL=index.js.map
|