import { Store } from "../../Logic/UIEventSource" import { GeoOperations } from "../../Logic/GeoOperations" import { Feature, Geometry } from "@turf/turf" export class ImportUtils { public static partitionFeaturesIfNearby( toPartitionFeatureCollection: { features: Feature[] }, compareWith: Store<{ features: Feature[] }>, cutoffDistanceInMeters: Store ): Store<{ hasNearby: Feature[]; noNearby: Feature[] }> { return compareWith.map( (osmData) => { if (osmData?.features === undefined) { return undefined } if (osmData.features.length === 0) { return { noNearby: toPartitionFeatureCollection.features, hasNearby: [] } } const maxDist = cutoffDistanceInMeters.data const hasNearby = [] const noNearby = [] for (const toImportElement of toPartitionFeatureCollection.features) { const hasNearbyFeature = osmData.features.some( (f) => maxDist >= GeoOperations.distanceBetween( toImportElement.geometry.coordinates, GeoOperations.centerpointCoordinates(f) ) ) if (hasNearbyFeature) { hasNearby.push(toImportElement) } else { noNearby.push(toImportElement) } } return { hasNearby, noNearby } }, [cutoffDistanceInMeters] ) } }