From 5adf43a3358e212af3cdf278fdb17a1839a05331 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 7 Apr 2025 03:29:27 +0200 Subject: [PATCH] Themes(onwheels): statistics now don't show too much items, fix #2366 --- .../FeatureSource/Actors/GeoIndexedStore.ts | 18 ++---------------- src/UI/Statistics/LayerStatistics.svelte | 12 ++++++------ 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/src/Logic/FeatureSource/Actors/GeoIndexedStore.ts b/src/Logic/FeatureSource/Actors/GeoIndexedStore.ts index 15bc28fdf0..8e6c392f85 100644 --- a/src/Logic/FeatureSource/Actors/GeoIndexedStore.ts +++ b/src/Logic/FeatureSource/Actors/GeoIndexedStore.ts @@ -25,22 +25,8 @@ export default class GeoIndexedStore implements FeatureSource { */ public GetFeaturesWithin(bbox: BBox): Feature[] { const bboxFeature = bbox.asGeojsonCached() - return this.features.data.filter((f) => { - if (f.geometry.type === "Point") { - return bbox.contains(<[number, number]>f.geometry.coordinates) - } - if (f.geometry.type === "LineString") { - const intersection = GeoOperations.intersect( - BBox.get(f).asGeojsonCached(), - bboxFeature - ) - return intersection !== undefined - } - if (f.geometry.type === "Polygon" || f.geometry.type === "MultiPolygon") { - return GeoOperations.intersect(f, bboxFeature) !== undefined - } - return GeoOperations.intersect(f, bboxFeature) !== undefined - }) + return this.features.data.filter((f) => + GeoOperations.completelyWithin(f, bboxFeature)) } } diff --git a/src/UI/Statistics/LayerStatistics.svelte b/src/UI/Statistics/LayerStatistics.svelte index 6006f5ce9a..ea50f4b1da 100644 --- a/src/UI/Statistics/LayerStatistics.svelte +++ b/src/UI/Statistics/LayerStatistics.svelte @@ -11,12 +11,12 @@ import { AccordionItem } from "flowbite-svelte" import ThemeViewState from "../../Models/ThemeViewState" import DefaultIcon from "../Map/DefaultIcon.svelte" + import { Store } from "../../Logic/UIEventSource" export let layer: LayerConfig export let state: ThemeViewState let bbox = state.mapProperties.bounds - let elements: Feature[] = state.perLayer.get(layer.id).GetFeaturesWithin($bbox) - $: elements = state.perLayer.get(layer.id).GetFeaturesWithin($bbox) + let elements: Store = bbox.mapD(bbox => state.perLayer.get(layer.id).GetFeaturesWithin(bbox)) let trs = layer.tagRenderings.filter((tr) => tr.question) @@ -31,19 +31,19 @@ - ({elements.length} elements in view) + ({$elements.length} elements in view) - {#if elements === undefined} + {#if $elements === undefined} - {:else if elements.length === 0} + {:else if $elements.length === 0} No features in view {:else}
{#each trs as tr} - new TagRenderingChart(elements, tr, { + new TagRenderingChart($elements, tr, { chartclasses: "w-full self-center", includeTitle: true, }).SetClass(tr.multiAnswer ? "w-128" : "w-96")}