forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			62 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import FeatureSource, {FeatureSourceForLayer, Tiled} from "../FeatureSource";
 | |
| import {ImmutableStore, Store, UIEventSource} from "../../UIEventSource";
 | |
| import {stat} from "fs";
 | |
| import FilteredLayer from "../../../Models/FilteredLayer";
 | |
| import {BBox} from "../../BBox";
 | |
| import {Feature} from "@turf/turf";
 | |
| 
 | |
| /**
 | |
|  * A simple, read only feature store.
 | |
|  */
 | |
| export default class StaticFeatureSource implements FeatureSource {
 | |
|     public readonly features: Store<{ feature: any; freshness: Date }[]>;
 | |
|     public readonly name: string
 | |
| 
 | |
|     constructor(features: Store<{ feature: Feature, freshness: Date }[]>, name = "StaticFeatureSource") {
 | |
|         if (features === undefined) {
 | |
|             throw "Static feature source received undefined as source"
 | |
|         }
 | |
|         this.name = name;
 | |
|         this.features = features;
 | |
|     }
 | |
| 
 | |
|     public static fromGeojsonAndDate(features: { feature: Feature, freshness: Date }[], name = "StaticFeatureSourceFromGeojsonAndDate"): StaticFeatureSource {
 | |
|         return new StaticFeatureSource(new ImmutableStore(features), name);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     public static fromGeojson(geojson: Feature[], name = "StaticFeatureSourceFromGeojson"): StaticFeatureSource {
 | |
|         const now = new Date();
 | |
|         return StaticFeatureSource.fromGeojsonAndDate(geojson.map(feature => ({feature, freshness: now})), name);
 | |
|     }
 | |
| 
 | |
|     public static fromGeojsonStore(geojson: Store<Feature[]>, name = "StaticFeatureSourceFromGeojson"): StaticFeatureSource {
 | |
|         const now = new Date();
 | |
|         const mapped : Store<{feature: Feature, freshness: Date}[]> = geojson.map(features => features.map(feature => ({feature, freshness: now})))
 | |
|         return new StaticFeatureSource(mapped, name);
 | |
|     }
 | |
| 
 | |
|     static fromDateless(featureSource: Store<{ feature: Feature }[]>, name = "StaticFeatureSourceFromDateless") {
 | |
|         const now = new Date();
 | |
|         return new StaticFeatureSource(featureSource.map(features => features.map(feature => ({
 | |
|             feature: feature.feature,
 | |
|             freshness: now
 | |
|         }))), name);
 | |
|     }
 | |
| }
 | |
| 
 | |
| export class TiledStaticFeatureSource extends StaticFeatureSource implements Tiled, FeatureSourceForLayer{
 | |
| 
 | |
|     public readonly bbox: BBox = BBox.global;
 | |
|     public readonly tileIndex: number;   
 | |
|     public readonly layer: FilteredLayer;
 | |
| 
 | |
|     constructor(features: Store<{ feature: any, freshness: Date }[]>, layer: FilteredLayer ,tileIndex : number = 0) {
 | |
|         super(features);
 | |
|         this.tileIndex = tileIndex ;
 | |
|         this.layer=  layer;
 | |
|         this.bbox = BBox.fromTileIndex(this.tileIndex)
 | |
|     }
 | |
| 
 | |
| 
 | |
| }
 |