From c010fb5271cc944b37ec9e6b07bd34a1234677c1 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Mon, 11 Oct 2021 21:23:14 +0200 Subject: [PATCH] Change padding method, add max bounds, fix zoomlevels on toerisme vlaanderen theme --- Logic/Actors/OverpassFeatureSource.ts | 11 ++++-- Logic/BBox.ts | 17 ++++---- Logic/FeatureSource/FeaturePipeline.ts | 7 ++-- UI/BigComponents/ThemeIntroductionPanel.ts | 10 ++--- .../toerisme_vlaanderen.json | 39 ++++++++++++++----- 5 files changed, 53 insertions(+), 31 deletions(-) diff --git a/Logic/Actors/OverpassFeatureSource.ts b/Logic/Actors/OverpassFeatureSource.ts index 4f4f7a77f8..e27e0665d9 100644 --- a/Logic/Actors/OverpassFeatureSource.ts +++ b/Logic/Actors/OverpassFeatureSource.ts @@ -39,7 +39,7 @@ export default class OverpassFeatureSource implements FeatureSource { } private readonly _isActive: UIEventSource; private readonly onBboxLoaded: (bbox: BBox, date: Date, layers: LayerConfig[]) => void; - + private readonly padToTiles : number constructor( state: { readonly locationControl: UIEventSource, @@ -49,7 +49,8 @@ export default class OverpassFeatureSource implements FeatureSource { readonly overpassMaxZoom: UIEventSource, readonly currentBounds: UIEventSource }, - options?: { + options: { + padToTiles: number, isActive?: UIEventSource, relationTracker: RelationsTracker, onBboxLoaded?: (bbox: BBox, date: Date, layers: LayerConfig[]) => void @@ -57,6 +58,7 @@ export default class OverpassFeatureSource implements FeatureSource { this.state = state this._isActive = options.isActive; + this.padToTiles = options.padToTiles; this.onBboxLoaded = options.onBboxLoaded this.relationsTracker = options.relationTracker const self = this; @@ -109,11 +111,14 @@ export default class OverpassFeatureSource implements FeatureSource { return undefined; } - const bounds = this.state.currentBounds.data?.pad(this.state.layoutToUse.widenFactor)?.expandToTileBounds(14); + const bounds = this.state.currentBounds.data?.pad(this.state.layoutToUse.widenFactor)?.expandToTileBounds(this.padToTiles); if (bounds === undefined) { return undefined; } + console.log("Current bounds are", this.state.currentBounds.data," padded with",this.state.layoutToUse.widenFactor+":", + this.state.currentBounds.data.pad(this.state.layoutToUse.widenFactor), + "Tileexpanded: ",this.state.currentBounds.data?.pad(this.state.layoutToUse.widenFactor)?.expandToTileBounds(this.padToTiles) ) const self = this; diff --git a/Logic/BBox.ts b/Logic/BBox.ts index a6f350cf83..0205b15337 100644 --- a/Logic/BBox.ts +++ b/Logic/BBox.ts @@ -116,16 +116,15 @@ export class BBox { return this.minLat } - pad(factor: number): BBox { - const latDiff = this.maxLat - this.minLat - const lat = (this.maxLat + this.minLat) / 2 - const lonDiff = this.maxLon - this.minLon - const lon = (this.maxLon + this.minLon) / 2 + pad(factor: number, maxIncrease = 2): BBox { + + const latDiff = Math.min(maxIncrease / 2, Math.abs(this.maxLat - this.minLat) * factor) + const lonDiff =Math.min(maxIncrease / 2, Math.abs(this.maxLon - this.minLon) * factor) return new BBox([[ - lon - lonDiff * factor, - lat - latDiff * factor - ], [lon + lonDiff * factor, - lat + latDiff * factor]]) + this.minLon - lonDiff, + this.minLat - latDiff + ], [this.maxLon + lonDiff, + this.maxLat + latDiff]]) } toLeaflet() { diff --git a/Logic/FeatureSource/FeaturePipeline.ts b/Logic/FeatureSource/FeaturePipeline.ts index 3aa0af3562..ea33827f60 100644 --- a/Logic/FeatureSource/FeaturePipeline.ts +++ b/Logic/FeatureSource/FeaturePipeline.ts @@ -58,7 +58,7 @@ export default class FeaturePipeline { private readonly freshnesses = new Map(); private readonly oldestAllowedDate: Date = new Date(new Date().getTime() - 60 * 60 * 24 * 30 * 1000); - private readonly osmSourceZoomLevel = 14 + private readonly osmSourceZoomLevel = 15 constructor( handleFeatureSource: (source: FeatureSourceForLayer & Tiled) => void, @@ -147,7 +147,7 @@ export default class FeaturePipeline { // We split them up into tiles anyway as it is an OSM source TiledFeatureSource.createHierarchy(src, { layer: src.layer, - minZoomLevel: 14, + minZoomLevel: this.osmSourceZoomLevel, dontEnforceMinZoom: true, registerTile: (tile) => { new RegisteringAllFromFeatureSourceActor(tile) @@ -200,7 +200,7 @@ export default class FeaturePipeline { new PerLayerFeatureSourceSplitter(state.filteredLayers, (source) => TiledFeatureSource.createHierarchy(source, { layer: source.layer, - minZoomLevel: 14, + minZoomLevel: this.osmSourceZoomLevel, dontEnforceMinZoom: true, maxFeatureCount: state.layoutToUse.clustering.minNeededElements, maxZoomLevel: state.layoutToUse.clustering.maxZoom, @@ -333,6 +333,7 @@ export default class FeaturePipeline { const self = this; const updater = new OverpassFeatureSource(state, { + padToTiles: this.osmSourceZoomLevel, relationTracker: this.relationTracker, isActive: useOsmApi.map(b => !b && overpassIsActive.data, [overpassIsActive]), onBboxLoaded: ((bbox, date, downloadedLayers) => { diff --git a/UI/BigComponents/ThemeIntroductionPanel.ts b/UI/BigComponents/ThemeIntroductionPanel.ts index fec58bb29f..c7c0964210 100644 --- a/UI/BigComponents/ThemeIntroductionPanel.ts +++ b/UI/BigComponents/ThemeIntroductionPanel.ts @@ -50,13 +50,11 @@ export default class ThemeIntroductionPanel extends Combine { ) super([ - layout.description.Clone(), - "

", + layout.description.Clone().SetClass("blcok mb-4"), toTheMap, - loginStatus, - layout.descriptionTail?.Clone(), - "
", - languagePicker, + loginStatus.SetClass("block"), + layout.descriptionTail?.Clone().SetClass("block mt-4"), + languagePicker.SetClass("block mt-4"), ...layout.CustomCodeSnippets() ]) diff --git a/assets/themes/toerisme_vlaanderen/toerisme_vlaanderen.json b/assets/themes/toerisme_vlaanderen/toerisme_vlaanderen.json index 0a2eaa9e2f..7a401b0ab8 100644 --- a/assets/themes/toerisme_vlaanderen/toerisme_vlaanderen.json +++ b/assets/themes/toerisme_vlaanderen/toerisme_vlaanderen.json @@ -14,7 +14,10 @@ "nl": "Een kaart om toeristisch relevante info op aan te duiden" }, "description": { - "nl": "Op deze kaart kan je info zien die relevant is voor toerisme, zoals:
  • Eetgelegenheden
  • Cafés en bars
  • (Fiets)oplaadpunten
  • Fietspompen, fietserverhuur en fietswinkels
  • Uitkijktorens
  • ...
Zie je fouten op de kaart? Dan kan je zelf makkelijk aanpasingen maken, die zichtbaar zijn voor iedereen. Hiervoor dien je een gratis OpenStreetMap account voor te maken.

Met de steun van Toerisme Vlaanderen" + "nl": "Op deze kaart kan je info zien die relevant is voor toerisme, zoals:
  • Eetgelegenheden
  • Cafés en bars
  • (Fiets)oplaadpunten
  • Fietspompen, fietserverhuur en fietswinkels
  • Uitkijktorens
  • ...
Zie je fouten op de kaart? Dan kan je zelf makkelijk aanpasingen maken, die zichtbaar zijn voor iedereen. Hiervoor dien je een gratis OpenStreetMap account voor te maken." + }, + "descriptionTail": { + "nl": "Met de steun van Toerisme Vlaanderen" }, "icon": "./assets/svg/star.svg", "startZoom": 8, @@ -28,21 +31,37 @@ "cafe_pub" ], "override": { - "minzoom": 16 + "minzoom": 17 } }, { - "builtin": "charging_station", + "builtin": [ + "bench", + "waste_basket" + ], "override": { - "minzoom": 16 + "minzoom": 19 } }, - "toilet", - "bench", - "waste_basket", - "bike_repair_station", - "binocular", - "observation_tower" + { + "builtin": [ + "charging_station", + "toilet", + "bike_repair_station" + ], + "override": { + "minzoom": 14 + } + }, + { + "builtin": [ + "binocular", + "observation_tower" + ], + "override": { + "minzoom": 10 + } + } ], "hideFromOverview": true } \ No newline at end of file