Change padding method, add max bounds, fix zoomlevels on toerisme vlaanderen theme

This commit is contained in:
Pieter Vander Vennet 2021-10-11 21:23:14 +02:00
parent 7576f7069b
commit c010fb5271
5 changed files with 53 additions and 31 deletions

View file

@ -39,7 +39,7 @@ export default class OverpassFeatureSource implements FeatureSource {
} }
private readonly _isActive: UIEventSource<boolean>; private readonly _isActive: UIEventSource<boolean>;
private readonly onBboxLoaded: (bbox: BBox, date: Date, layers: LayerConfig[]) => void; private readonly onBboxLoaded: (bbox: BBox, date: Date, layers: LayerConfig[]) => void;
private readonly padToTiles : number
constructor( constructor(
state: { state: {
readonly locationControl: UIEventSource<Loc>, readonly locationControl: UIEventSource<Loc>,
@ -49,7 +49,8 @@ export default class OverpassFeatureSource implements FeatureSource {
readonly overpassMaxZoom: UIEventSource<number>, readonly overpassMaxZoom: UIEventSource<number>,
readonly currentBounds: UIEventSource<BBox> readonly currentBounds: UIEventSource<BBox>
}, },
options?: { options: {
padToTiles: number,
isActive?: UIEventSource<boolean>, isActive?: UIEventSource<boolean>,
relationTracker: RelationsTracker, relationTracker: RelationsTracker,
onBboxLoaded?: (bbox: BBox, date: Date, layers: LayerConfig[]) => void onBboxLoaded?: (bbox: BBox, date: Date, layers: LayerConfig[]) => void
@ -57,6 +58,7 @@ export default class OverpassFeatureSource implements FeatureSource {
this.state = state this.state = state
this._isActive = options.isActive; this._isActive = options.isActive;
this.padToTiles = options.padToTiles;
this.onBboxLoaded = options.onBboxLoaded this.onBboxLoaded = options.onBboxLoaded
this.relationsTracker = options.relationTracker this.relationsTracker = options.relationTracker
const self = this; const self = this;
@ -109,11 +111,14 @@ export default class OverpassFeatureSource implements FeatureSource {
return undefined; 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) { if (bounds === undefined) {
return 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; const self = this;

View file

@ -116,16 +116,15 @@ export class BBox {
return this.minLat return this.minLat
} }
pad(factor: number): BBox { pad(factor: number, maxIncrease = 2): BBox {
const latDiff = this.maxLat - this.minLat
const lat = (this.maxLat + this.minLat) / 2 const latDiff = Math.min(maxIncrease / 2, Math.abs(this.maxLat - this.minLat) * factor)
const lonDiff = this.maxLon - this.minLon const lonDiff =Math.min(maxIncrease / 2, Math.abs(this.maxLon - this.minLon) * factor)
const lon = (this.maxLon + this.minLon) / 2
return new BBox([[ return new BBox([[
lon - lonDiff * factor, this.minLon - lonDiff,
lat - latDiff * factor this.minLat - latDiff
], [lon + lonDiff * factor, ], [this.maxLon + lonDiff,
lat + latDiff * factor]]) this.maxLat + latDiff]])
} }
toLeaflet() { toLeaflet() {

View file

@ -58,7 +58,7 @@ export default class FeaturePipeline {
private readonly freshnesses = new Map<string, TileFreshnessCalculator>(); private readonly freshnesses = new Map<string, TileFreshnessCalculator>();
private readonly oldestAllowedDate: Date = new Date(new Date().getTime() - 60 * 60 * 24 * 30 * 1000); private readonly oldestAllowedDate: Date = new Date(new Date().getTime() - 60 * 60 * 24 * 30 * 1000);
private readonly osmSourceZoomLevel = 14 private readonly osmSourceZoomLevel = 15
constructor( constructor(
handleFeatureSource: (source: FeatureSourceForLayer & Tiled) => void, 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 // We split them up into tiles anyway as it is an OSM source
TiledFeatureSource.createHierarchy(src, { TiledFeatureSource.createHierarchy(src, {
layer: src.layer, layer: src.layer,
minZoomLevel: 14, minZoomLevel: this.osmSourceZoomLevel,
dontEnforceMinZoom: true, dontEnforceMinZoom: true,
registerTile: (tile) => { registerTile: (tile) => {
new RegisteringAllFromFeatureSourceActor(tile) new RegisteringAllFromFeatureSourceActor(tile)
@ -200,7 +200,7 @@ export default class FeaturePipeline {
new PerLayerFeatureSourceSplitter(state.filteredLayers, new PerLayerFeatureSourceSplitter(state.filteredLayers,
(source) => TiledFeatureSource.createHierarchy(source, { (source) => TiledFeatureSource.createHierarchy(source, {
layer: source.layer, layer: source.layer,
minZoomLevel: 14, minZoomLevel: this.osmSourceZoomLevel,
dontEnforceMinZoom: true, dontEnforceMinZoom: true,
maxFeatureCount: state.layoutToUse.clustering.minNeededElements, maxFeatureCount: state.layoutToUse.clustering.minNeededElements,
maxZoomLevel: state.layoutToUse.clustering.maxZoom, maxZoomLevel: state.layoutToUse.clustering.maxZoom,
@ -333,6 +333,7 @@ export default class FeaturePipeline {
const self = this; const self = this;
const updater = new OverpassFeatureSource(state, const updater = new OverpassFeatureSource(state,
{ {
padToTiles: this.osmSourceZoomLevel,
relationTracker: this.relationTracker, relationTracker: this.relationTracker,
isActive: useOsmApi.map(b => !b && overpassIsActive.data, [overpassIsActive]), isActive: useOsmApi.map(b => !b && overpassIsActive.data, [overpassIsActive]),
onBboxLoaded: ((bbox, date, downloadedLayers) => { onBboxLoaded: ((bbox, date, downloadedLayers) => {

View file

@ -50,13 +50,11 @@ export default class ThemeIntroductionPanel extends Combine {
) )
super([ super([
layout.description.Clone(), layout.description.Clone().SetClass("blcok mb-4"),
"<br/><br/>",
toTheMap, toTheMap,
loginStatus, loginStatus.SetClass("block"),
layout.descriptionTail?.Clone(), layout.descriptionTail?.Clone().SetClass("block mt-4"),
"<br/>", languagePicker.SetClass("block mt-4"),
languagePicker,
...layout.CustomCodeSnippets() ...layout.CustomCodeSnippets()
]) ])

View file

@ -14,7 +14,10 @@
"nl": "Een kaart om toeristisch relevante info op aan te duiden" "nl": "Een kaart om toeristisch relevante info op aan te duiden"
}, },
"description": { "description": {
"nl": "Op deze kaart kan je info zien die relevant is voor toerisme, zoals:<br/><ul><li>Eetgelegenheden</li><li>Cafés en bars</li><li>(Fiets)oplaadpunten</li><li>Fietspompen, fietserverhuur en fietswinkels</li><li>Uitkijktorens</li><li>...</li></ul> 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.<br/><br/>Met de steun van Toerisme Vlaanderen<img src='./assets/themes/toerisme_vlaanderen/logo.png' />" "nl": "Op deze kaart kan je info zien die relevant is voor toerisme, zoals:<br/><ul><li>Eetgelegenheden</li><li>Cafés en bars</li><li>(Fiets)oplaadpunten</li><li>Fietspompen, fietserverhuur en fietswinkels</li><li>Uitkijktorens</li><li>...</li></ul> 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<img style='height:5rem; width: auto;' src='./assets/themes/toerisme_vlaanderen/logo.png' />"
}, },
"icon": "./assets/svg/star.svg", "icon": "./assets/svg/star.svg",
"startZoom": 8, "startZoom": 8,
@ -28,21 +31,37 @@
"cafe_pub" "cafe_pub"
], ],
"override": { "override": {
"minzoom": 16 "minzoom": 17
} }
}, },
{ {
"builtin": "charging_station", "builtin": [
"bench",
"waste_basket"
],
"override": { "override": {
"minzoom": 16 "minzoom": 19
} }
}, },
"toilet", {
"bench", "builtin": [
"waste_basket", "charging_station",
"bike_repair_station", "toilet",
"binocular", "bike_repair_station"
"observation_tower" ],
"override": {
"minzoom": 14
}
},
{
"builtin": [
"binocular",
"observation_tower"
],
"override": {
"minzoom": 10
}
}
], ],
"hideFromOverview": true "hideFromOverview": true
} }