forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			56 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { FeatureSource , FeatureSourceForLayer, Tiled } from "../FeatureSource"
 | |
| import { ImmutableStore, Store } from "../../UIEventSource"
 | |
| import FilteredLayer from "../../../Models/FilteredLayer"
 | |
| import { BBox } from "../../BBox"
 | |
| import { Feature } from "geojson"
 | |
| 
 | |
| /**
 | |
|  * A simple, read only feature store.
 | |
|  */
 | |
| export default class StaticFeatureSource implements FeatureSource {
 | |
|     public readonly features: Store<Feature[]>
 | |
| 
 | |
|     constructor(
 | |
|         features:
 | |
|             | Store<Feature[]>
 | |
|             | Feature[]
 | |
|             | { features: Feature[] }
 | |
|             | { features: Store<Feature[]> }
 | |
|     ) {
 | |
|         if (features === undefined) {
 | |
|             throw "Static feature source received undefined as source"
 | |
|         }
 | |
|         let feats: Feature[] | Store<Feature[]>
 | |
|         if (features["features"]) {
 | |
|             feats = features["features"]
 | |
|         } else {
 | |
|             feats = <Feature[] | Store<Feature[]>>features
 | |
|         }
 | |
| 
 | |
|         if (Array.isArray(feats)) {
 | |
|             this.features = new ImmutableStore(feats)
 | |
|         } else {
 | |
|             this.features = feats
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public static fromGeojson(geojson: Feature[]): StaticFeatureSource {
 | |
|         return new StaticFeatureSource(geojson)
 | |
|     }
 | |
| }
 | |
| 
 | |
| 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[]>, layer: FilteredLayer, tileIndex: number = 0) {
 | |
|         super(features)
 | |
|         this.tileIndex = tileIndex
 | |
|         this.layer = layer
 | |
|         this.bbox = BBox.fromTileIndex(this.tileIndex)
 | |
|     }
 | |
| }
 |