Add OsmFeature type
This commit is contained in:
parent
284951f5f7
commit
24f090c92f
7 changed files with 26 additions and 20 deletions
|
@ -8,7 +8,7 @@ import {BBox} from "../BBox";
|
||||||
import Constants from "../../Models/Constants";
|
import Constants from "../../Models/Constants";
|
||||||
import SimpleFeatureSource from "../FeatureSource/Sources/SimpleFeatureSource";
|
import SimpleFeatureSource from "../FeatureSource/Sources/SimpleFeatureSource";
|
||||||
|
|
||||||
export interface GeoLocationPointProperties {
|
export interface GeoLocationPointProperties {
|
||||||
id: "gps",
|
id: "gps",
|
||||||
"user:location": "yes",
|
"user:location": "yes",
|
||||||
"date": string,
|
"date": string,
|
||||||
|
|
|
@ -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…
Reference in a new issue