forked from MapComplete/MapComplete
		
	Add OsmFeature type
This commit is contained in:
		
							parent
							
								
									284951f5f7
								
							
						
					
					
						commit
						24f090c92f
					
				
					 7 changed files with 26 additions and 20 deletions
				
			
		| 
						 | 
					@ -24,6 +24,7 @@ import FullNodeDatabaseSource from "./TiledFeatureSource/FullNodeDatabaseSource"
 | 
				
			||||||
import MapState from "../State/MapState";
 | 
					import MapState from "../State/MapState";
 | 
				
			||||||
import {ElementStorage} from "../ElementStorage";
 | 
					import {ElementStorage} from "../ElementStorage";
 | 
				
			||||||
import {Feature, Geometry} from "@turf/turf";
 | 
					import {Feature, Geometry} from "@turf/turf";
 | 
				
			||||||
 | 
					import {OsmFeature} from "../../Models/OsmFeature";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					@ -338,15 +339,19 @@ export default class FeaturePipeline {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public GetAllFeaturesWithin(bbox: BBox): Feature<Geometry, {id: string}>[][] {
 | 
					    public GetAllFeaturesWithin(bbox: BBox): OsmFeature[][] {
 | 
				
			||||||
        const self = this
 | 
					        const self = this
 | 
				
			||||||
        const tiles = []
 | 
					        const tiles: OsmFeature[][] = []
 | 
				
			||||||
        Array.from(this.perLayerHierarchy.keys())
 | 
					        Array.from(this.perLayerHierarchy.keys())
 | 
				
			||||||
            .forEach(key => tiles.push(...self.GetFeaturesWithin(key, bbox)))
 | 
					            .forEach(key => {
 | 
				
			||||||
 | 
					                const fetched : OsmFeature[][] = self.GetFeaturesWithin(key, bbox)
 | 
				
			||||||
 | 
					                tiles.push(...fetched);
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
        return tiles;
 | 
					        return tiles;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public GetAllFeaturesAndMetaWithin(bbox: BBox, layerIdWhitelist?: Set<string>): {features: any[], layer: string}[] {
 | 
					    public GetAllFeaturesAndMetaWithin(bbox: BBox, layerIdWhitelist?: Set<string>): 
 | 
				
			||||||
 | 
					        {features: OsmFeature[], layer: string}[] {
 | 
				
			||||||
        const self = this
 | 
					        const self = this
 | 
				
			||||||
        const tiles :{features: any[], layer: string}[]= []
 | 
					        const tiles :{features: any[], layer: string}[]= []
 | 
				
			||||||
        Array.from(this.perLayerHierarchy.keys())
 | 
					        Array.from(this.perLayerHierarchy.keys())
 | 
				
			||||||
| 
						 | 
					@ -362,7 +367,11 @@ export default class FeaturePipeline {
 | 
				
			||||||
        return tiles;
 | 
					        return tiles;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public GetFeaturesWithin(layerId: string, bbox: BBox): any[][] {
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets all the tiles which overlap with the given BBOX.
 | 
				
			||||||
 | 
					     * This might imply that extra features might be shown
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public GetFeaturesWithin(layerId: string, bbox: BBox): OsmFeature[][] {
 | 
				
			||||||
        if (layerId === "*") {
 | 
					        if (layerId === "*") {
 | 
				
			||||||
            return this.GetAllFeaturesWithin(bbox)
 | 
					            return this.GetAllFeaturesWithin(bbox)
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,9 +1,11 @@
 | 
				
			||||||
import {Store, UIEventSource} from "../UIEventSource";
 | 
					import {Store, UIEventSource} from "../UIEventSource";
 | 
				
			||||||
import FilteredLayer from "../../Models/FilteredLayer";
 | 
					import FilteredLayer from "../../Models/FilteredLayer";
 | 
				
			||||||
import {BBox} from "../BBox";
 | 
					import {BBox} from "../BBox";
 | 
				
			||||||
 | 
					import {Feature, Geometry} from "@turf/turf";
 | 
				
			||||||
 | 
					import {OsmFeature} from "../../Models/OsmFeature";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default interface FeatureSource {
 | 
					export default interface FeatureSource {
 | 
				
			||||||
    features: Store<{ feature: any, freshness: Date }[]>;
 | 
					    features: Store<{ feature: OsmFeature, freshness: Date }[]>;
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Mainly used for debuging
 | 
					     * Mainly used for debuging
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					@ -28,12 +30,3 @@ export interface FeatureSourceForLayer extends FeatureSource {
 | 
				
			||||||
export interface IndexedFeatureSource extends FeatureSource {
 | 
					export interface IndexedFeatureSource extends FeatureSource {
 | 
				
			||||||
    readonly containedIds: Store<Set<string>>
 | 
					    readonly containedIds: Store<Set<string>>
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * A feature source which has some extra data about it's state
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
export interface FeatureSourceState {
 | 
					 | 
				
			||||||
    readonly sufficientlyZoomed: Store<boolean>;
 | 
					 | 
				
			||||||
    readonly runningQuery: Store<boolean>;
 | 
					 | 
				
			||||||
    readonly timeout: Store<number>;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,7 +13,7 @@ export default interface TileHierarchy<T extends FeatureSource & Tiled> {
 | 
				
			||||||
export class TileHierarchyTools {
 | 
					export class TileHierarchyTools {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static getTiles<T extends FeatureSource & Tiled>(hierarchy: TileHierarchy<T>, bbox: BBox): T[] {
 | 
					    public static getTiles<T extends FeatureSource & Tiled>(hierarchy: TileHierarchy<T>, bbox: BBox): T[] {
 | 
				
			||||||
        const result = []
 | 
					        const result: T[] = []
 | 
				
			||||||
        hierarchy.loadedTiles.forEach((tile) => {
 | 
					        hierarchy.loadedTiles.forEach((tile) => {
 | 
				
			||||||
            if (tile.bbox.overlapsWith(bbox)) {
 | 
					            if (tile.bbox.overlapsWith(bbox)) {
 | 
				
			||||||
                result.push(tile)
 | 
					                result.push(tile)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,7 @@ import {BBox} from "./BBox";
 | 
				
			||||||
import togpx from "togpx"
 | 
					import togpx from "togpx"
 | 
				
			||||||
import Constants from "../Models/Constants";
 | 
					import Constants from "../Models/Constants";
 | 
				
			||||||
import LayerConfig from "../Models/ThemeConfig/LayerConfig";
 | 
					import LayerConfig from "../Models/ThemeConfig/LayerConfig";
 | 
				
			||||||
import {booleanWithin, Coord, Feature, Geometry, MultiPolygon, Polygon, Properties} from "@turf/turf";
 | 
					import {AllGeoJSON, booleanWithin, Coord, Feature, Geometry, MultiPolygon, Polygon, Properties} from "@turf/turf";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class GeoOperations {
 | 
					export class GeoOperations {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,7 +29,7 @@ export class GeoOperations {
 | 
				
			||||||
     * Returns [lon,lat] coordinates
 | 
					     * Returns [lon,lat] coordinates
 | 
				
			||||||
     * @param feature
 | 
					     * @param feature
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    static centerpointCoordinates(feature: any): [number, number] {
 | 
					    static centerpointCoordinates(feature: AllGeoJSON): [number, number] {
 | 
				
			||||||
        return <[number, number]>turf.center(feature).geometry.coordinates;
 | 
					        return <[number, number]>turf.center(feature).geometry.coordinates;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -159,7 +159,7 @@ export class Changes {
 | 
				
			||||||
        const recentLocationPoints = locations.map(ff => ff.feature)
 | 
					        const recentLocationPoints = locations.map(ff => ff.feature)
 | 
				
			||||||
            .filter(feat => feat.geometry.type === "Point")
 | 
					            .filter(feat => feat.geometry.type === "Point")
 | 
				
			||||||
            .filter(feat => {
 | 
					            .filter(feat => {
 | 
				
			||||||
                const visitTime = new Date((<GeoLocationPointProperties>feat.properties).date)
 | 
					                const visitTime = new Date((<GeoLocationPointProperties><any>feat.properties).date)
 | 
				
			||||||
                // In seconds
 | 
					                // In seconds
 | 
				
			||||||
                const diff = (now.getTime() - visitTime.getTime()) / 1000
 | 
					                const diff = (now.getTime() - visitTime.getTime()) / 1000
 | 
				
			||||||
                return diff < Constants.nearbyVisitTime;
 | 
					                return diff < Constants.nearbyVisitTime;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										4
									
								
								Models/OsmFeature.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								Models/OsmFeature.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					import {Feature, Geometry} from "@turf/turf";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type OsmTags = Record<string, string> & {id: string}
 | 
				
			||||||
 | 
					export type OsmFeature = Feature<Geometry, OsmTags>
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue