forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			30 lines
		
	
	
		
			No EOL
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			No EOL
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import {Store} from "../../Logic/UIEventSource";
 | 
						|
import {GeoOperations} from "../../Logic/GeoOperations";
 | 
						|
 | 
						|
export class ImportUtils {
 | 
						|
    public static partitionFeaturesIfNearby(toPartitionFeatureCollection: ({ features: any[] }), compareWith: Store<{ features: any[] }>, cutoffDistanceInMeters: Store<number>): Store<{ hasNearby: any[], noNearby: any[] }> {
 | 
						|
        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]);
 | 
						|
    }
 | 
						|
} |