forked from MapComplete/MapComplete
Update counts when selecting/unselecting a layer
This commit is contained in:
parent
f5e1cde8dd
commit
bccda67e1c
2 changed files with 49 additions and 2 deletions
|
@ -5,6 +5,49 @@ import StaticFeatureSource from "../Sources/StaticFeatureSource"
|
|||
import { Feature, Point } from "geojson"
|
||||
import { Utils } from "../../../Utils"
|
||||
import { Tiles } from "../../../Models/TileRange"
|
||||
import { FeatureSource } from "../FeatureSource"
|
||||
import FilteredLayer from "../../../Models/FilteredLayer"
|
||||
import Constants from "../../../Models/Constants"
|
||||
|
||||
export class SummaryTileSourceRewriter implements FeatureSource {
|
||||
private readonly _features: UIEventSource<Feature[]> = new UIEventSource<Feature[]>([])
|
||||
private filteredLayers: FilteredLayer[]
|
||||
public readonly features: Store<Feature[]> = this._features
|
||||
private readonly _summarySource: SummaryTileSource
|
||||
constructor(
|
||||
summarySource: SummaryTileSource,
|
||||
filteredLayers: ReadonlyMap<string, FilteredLayer>
|
||||
) {
|
||||
this.filteredLayers = Array.from(filteredLayers.values()).filter(
|
||||
(l) =>
|
||||
Constants.priviliged_layers.indexOf(<any>l.layerDef.id) < 0 &&
|
||||
!l.layerDef.id.startsWith("note_import")
|
||||
)
|
||||
this._summarySource = summarySource
|
||||
filteredLayers.forEach((v, k) => {
|
||||
v.isDisplayed.addCallback((_) => this.update())
|
||||
})
|
||||
this._summarySource.features.addCallbackAndRunD((_) => this.update())
|
||||
}
|
||||
|
||||
private update() {
|
||||
const newFeatures: Feature[] = []
|
||||
const layersToCount = this.filteredLayers.filter((fl) => fl.isDisplayed.data)
|
||||
const bitmap = layersToCount.map((l) => (l.isDisplayed.data ? "1" : "0")).join("")
|
||||
const ids = layersToCount.map((l) => l.layerDef.id)
|
||||
for (const f of this._summarySource.features.data ?? []) {
|
||||
let newTotal = 0
|
||||
for (const id of ids) {
|
||||
newTotal += Number(f.properties[id] ?? 0)
|
||||
}
|
||||
newFeatures.push({
|
||||
...f,
|
||||
properties: { ...f.properties, id: f.properties.id + bitmap, total: newTotal },
|
||||
})
|
||||
}
|
||||
this._features.setData(newFeatures)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides features summarizing the total amount of features at a given location
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue