forked from MapComplete/MapComplete
		
	Change padding method, add max bounds, fix zoomlevels on toerisme vlaanderen theme
This commit is contained in:
		
							parent
							
								
									7576f7069b
								
							
						
					
					
						commit
						c010fb5271
					
				
					 5 changed files with 53 additions and 31 deletions
				
			
		| 
						 | 
					@ -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;
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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() {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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) => {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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()
 | 
				
			||||||
        ])
 | 
					        ])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue