forked from MapComplete/MapComplete
		
	Reselect better background layer when ELI is loaded
This commit is contained in:
		
							parent
							
								
									29cfe3672e
								
							
						
					
					
						commit
						151487be66
					
				
					 1 changed files with 69 additions and 59 deletions
				
			
		|  | @ -155,7 +155,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|         this.featureSwitches = new FeatureSwitchState(layout) | ||||
|         this.guistate = new MenuState( | ||||
|             this.featureSwitches.featureSwitchWelcomeMessage.data, | ||||
|             layout.id | ||||
|             layout.id, | ||||
|         ) | ||||
|         this.map = new UIEventSource<MlMap>(undefined) | ||||
|         const geolocationState = new GeoLocationState() | ||||
|  | @ -171,14 +171,14 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|             oauth_token: QueryParameters.GetQueryParameter( | ||||
|                 "oauth_token", | ||||
|                 undefined, | ||||
|                 "Used to complete the login" | ||||
|                 "Used to complete the login", | ||||
|             ), | ||||
|         }) | ||||
|         this.userRelatedState = new UserRelatedState( | ||||
|             this.osmConnection, | ||||
|             layout, | ||||
|             this.featureSwitches, | ||||
|             this.mapProperties | ||||
|             this.mapProperties, | ||||
|         ) | ||||
|         this.userRelatedState.fixateNorth.addCallbackAndRunD((fixated) => { | ||||
|             this.mapProperties.allowRotating.setData(fixated !== "yes") | ||||
|  | @ -189,20 +189,20 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|             geolocationState, | ||||
|             this.selectedElement, | ||||
|             this.mapProperties, | ||||
|             this.userRelatedState.gpsLocationHistoryRetentionTime | ||||
|             this.userRelatedState.gpsLocationHistoryRetentionTime, | ||||
|         ) | ||||
|         this.geolocationControl = new GeolocationControlState(this.geolocation, this.mapProperties) | ||||
| 
 | ||||
|         this.availableLayers = AvailableRasterLayers.layersAvailableAt( | ||||
|             this.mapProperties.location, | ||||
|             this.osmConnection.isLoggedIn | ||||
|             this.osmConnection.isLoggedIn, | ||||
|         ) | ||||
| 
 | ||||
|         this.layerState = new LayerState( | ||||
|             this.osmConnection, | ||||
|             layout.layers, | ||||
|             layout.id, | ||||
|             this.featureSwitches.featureSwitchLayerDefault | ||||
|             this.featureSwitches.featureSwitchLayerDefault, | ||||
|         ) | ||||
| 
 | ||||
|         { | ||||
|  | @ -211,7 +211,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|                 const isDisplayed = QueryParameters.GetBooleanQueryParameter( | ||||
|                     "overlay-" + rasterInfo.id, | ||||
|                     rasterInfo.defaultState ?? true, | ||||
|                     "Whether or not overlay layer " + rasterInfo.id + " is shown" | ||||
|                     "Whether or not overlay layer " + rasterInfo.id + " is shown", | ||||
|                 ) | ||||
|                 const state = { isDisplayed } | ||||
|                 overlayLayerStates.set(rasterInfo.id, state) | ||||
|  | @ -236,7 +236,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|                 this.osmConnection.Backend(), | ||||
|                 (id) => this.layerState.filteredLayers.get(id).isDisplayed, | ||||
|                 mvtAvailableLayers, | ||||
|                 this.fullNodeDatabase | ||||
|                 this.fullNodeDatabase, | ||||
|             ) | ||||
| 
 | ||||
|             let currentViewIndex = 0 | ||||
|  | @ -254,7 +254,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|                             id: "current_view_" + currentViewIndex, | ||||
|                         }), | ||||
|                     ] | ||||
|                 }) | ||||
|                 }), | ||||
|             ) | ||||
|             this.featuresInView = new BBoxFeatureSource(layoutSource, this.mapProperties.bounds) | ||||
| 
 | ||||
|  | @ -272,19 +272,19 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|                     featureSwitches: this.featureSwitches, | ||||
|                 }, | ||||
|                 layout?.isLeftRightSensitive() ?? false, | ||||
|                 (e) => this.reportError(e) | ||||
|                 (e) => this.reportError(e), | ||||
|             ) | ||||
|             this.historicalUserLocations = this.geolocation.historicalUserLocations | ||||
|             this.newFeatures = new NewGeometryFromChangesFeatureSource( | ||||
|                 this.changes, | ||||
|                 layoutSource, | ||||
|                 this.featureProperties | ||||
|                 this.featureProperties, | ||||
|             ) | ||||
|             layoutSource.addSource(this.newFeatures) | ||||
| 
 | ||||
|             const perLayer = new PerLayerFeatureSourceSplitter( | ||||
|                 Array.from(this.layerState.filteredLayers.values()).filter( | ||||
|                     (l) => l.layerDef?.source !== null | ||||
|                     (l) => l.layerDef?.source !== null, | ||||
|                 ), | ||||
|                 new ChangeGeometryApplicator(this.indexedFeatures, this.changes), | ||||
|                 { | ||||
|  | @ -295,10 +295,10 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|                             "Got ", | ||||
|                             features.length, | ||||
|                             "leftover features, such as", | ||||
|                             features[0].properties | ||||
|                             features[0].properties, | ||||
|                         ) | ||||
|                     }, | ||||
|                 } | ||||
|                 }, | ||||
|             ) | ||||
|             this.perLayer = perLayer.perLayer | ||||
|         } | ||||
|  | @ -338,12 +338,12 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|         this.lastClickObject = new LastClickFeatureSource( | ||||
|             this.layout, | ||||
|             this.mapProperties.lastClickLocation, | ||||
|             this.userRelatedState.addNewFeatureMode | ||||
|             this.userRelatedState.addNewFeatureMode, | ||||
|         ) | ||||
| 
 | ||||
|         this.osmObjectDownloader = new OsmObjectDownloader( | ||||
|             this.osmConnection.Backend(), | ||||
|             this.changes | ||||
|             this.changes, | ||||
|         ) | ||||
| 
 | ||||
|         this.perLayerFiltered = this.showNormalDataOn(this.map) | ||||
|  | @ -354,7 +354,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|                 currentZoom: this.mapProperties.zoom, | ||||
|                 layerState: this.layerState, | ||||
|                 bounds: this.visualFeedbackViewportBounds, | ||||
|             } | ||||
|             }, | ||||
|         ) | ||||
|         this.hasDataInView = new NoElementsInViewDetector(this).hasFeatureInView | ||||
|         this.imageUploadManager = new ImageUploadManager( | ||||
|  | @ -362,7 +362,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|             Imgur.singleton, | ||||
|             this.featureProperties, | ||||
|             this.osmConnection, | ||||
|             this.changes | ||||
|             this.changes, | ||||
|         ) | ||||
|         this.favourites = new FavouritesFeatureSource(this) | ||||
|         const longAgo = new Date() | ||||
|  | @ -408,7 +408,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|                 LayoutSource.fromCacheZoomLevel, | ||||
|                 fs, | ||||
|                 this.featureProperties, | ||||
|                 fs.layer.layerDef.maxAgeOfCache | ||||
|                 fs.layer.layerDef.maxAgeOfCache, | ||||
|             ) | ||||
|             toLocalStorage.set(layerId, storage) | ||||
|         }) | ||||
|  | @ -421,7 +421,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|             const doShowLayer = this.mapProperties.zoom.map( | ||||
|                 (z) => | ||||
|                     (fs.layer.isDisplayed?.data ?? true) && z >= (fs.layer.layerDef?.minzoom ?? 0), | ||||
|                 [fs.layer.isDisplayed] | ||||
|                 [fs.layer.isDisplayed], | ||||
|             ) | ||||
| 
 | ||||
|             if (!doShowLayer.data && this.featureSwitches.featureSwitchFilter.data === false) { | ||||
|  | @ -438,7 +438,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|                 fs.layer, | ||||
|                 fs, | ||||
|                 (id) => this.featureProperties.getStore(id), | ||||
|                 this.layerState.globalFilters | ||||
|                 this.layerState.globalFilters, | ||||
|             ) | ||||
|             filteringFeatureSource.set(layerName, filtered) | ||||
| 
 | ||||
|  | @ -582,7 +582,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|                     return | ||||
|                 } | ||||
|                 this.selectClosestAtCenter(0) | ||||
|             } | ||||
|             }, | ||||
|         ) | ||||
| 
 | ||||
|         for (let i = 1; i < 9; i++) { | ||||
|  | @ -600,7 +600,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|                     onUp: true, | ||||
|                 }, | ||||
|                 doc, | ||||
|                 () => this.selectClosestAtCenter(i - 1) | ||||
|                 () => this.selectClosestAtCenter(i - 1), | ||||
|             ) | ||||
|         } | ||||
| 
 | ||||
|  | @ -617,7 +617,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|                     if (this.featureSwitches.featureSwitchBackgroundSelection.data) { | ||||
|                         this.guistate.backgroundLayerSelectionIsOpened.setData(true) | ||||
|                     } | ||||
|                 } | ||||
|                 }, | ||||
|             ) | ||||
|             Hotkeys.RegisterHotkey( | ||||
|                 { | ||||
|  | @ -629,50 +629,60 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|                     if (this.featureSwitches.featureSwitchFilter.data) { | ||||
|                         this.guistate.openFilterView() | ||||
|                     } | ||||
|                 } | ||||
|                 }, | ||||
|             ) | ||||
|             Hotkeys.RegisterHotkey( | ||||
|                 { shift: "O" }, | ||||
|                 Translations.t.hotkeyDocumentation.selectMapnik, | ||||
|                 () => { | ||||
|                     this.mapProperties.rasterLayer.setData(AvailableRasterLayers.osmCarto) | ||||
|                 } | ||||
|                 }, | ||||
|             ) | ||||
|             const setLayerCategory = (category: EliCategory) => { | ||||
|                 const available = this.availableLayers.store.data | ||||
|                 const timeOfCall = new Date() | ||||
|                 const available = this.availableLayers.store.addCallbackAndRunD( | ||||
|                     available => { | ||||
|                         const now = new Date() | ||||
|                         const timeDiff=  (now.getTime() - timeOfCall.getTime()) / 1000 | ||||
|                         if(timeDiff > 3){ | ||||
|                             return true // unregister
 | ||||
|                         } | ||||
|                         const current = this.mapProperties.rasterLayer | ||||
|                         const best = RasterLayerUtils.SelectBestLayerAccordingTo( | ||||
|                             available, | ||||
|                             category, | ||||
|                     current.data | ||||
|                             current.data, | ||||
|                         ) | ||||
|                         console.log("Best layer for category", category, "is", best.properties.id) | ||||
|                         current.setData(best) | ||||
| 
 | ||||
|                     }, | ||||
|                 ) | ||||
|             } | ||||
| 
 | ||||
|             Hotkeys.RegisterHotkey( | ||||
|                 { nomod: "O" }, | ||||
|                 Translations.t.hotkeyDocumentation.selectOsmbasedmap, | ||||
|                 () => setLayerCategory("osmbasedmap") | ||||
|                 () => setLayerCategory("osmbasedmap"), | ||||
|             ) | ||||
| 
 | ||||
|             Hotkeys.RegisterHotkey( | ||||
|                 { nomod: "M" }, | ||||
|                 Translations.t.hotkeyDocumentation.selectMap, | ||||
|                 () => setLayerCategory("map") | ||||
|                 () => setLayerCategory("map"), | ||||
|             ) | ||||
| 
 | ||||
|             Hotkeys.RegisterHotkey( | ||||
|                 { nomod: "P" }, | ||||
|                 Translations.t.hotkeyDocumentation.selectAerial, | ||||
|                 () => setLayerCategory("photo") | ||||
|                 () => setLayerCategory("photo"), | ||||
|             ) | ||||
|             Hotkeys.RegisterHotkey( | ||||
|                 { nomod: "L" }, | ||||
|                 Translations.t.hotkeyDocumentation.geolocate, | ||||
|                 () => { | ||||
|                     this.geolocationControl.handleClick() | ||||
|                 } | ||||
|                 }, | ||||
|             ) | ||||
|             return true | ||||
|         }) | ||||
|  | @ -684,7 +694,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|             Translations.t.hotkeyDocumentation.translationMode, | ||||
|             () => { | ||||
|                 Locale.showLinkToWeblate.setData(!Locale.showLinkToWeblate.data) | ||||
|             } | ||||
|             }, | ||||
|         ) | ||||
|     } | ||||
| 
 | ||||
|  | @ -695,7 +705,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|         const normalLayers = this.layout.layers.filter( | ||||
|             (l) => | ||||
|                 Constants.priviliged_layers.indexOf(<any>l.id) < 0 && | ||||
|                 !l.id.startsWith("note_import") | ||||
|                 !l.id.startsWith("note_import"), | ||||
|         ) | ||||
|         const maxzoom = Math.min(...normalLayers.map((l) => l.minzoom)) | ||||
| 
 | ||||
|  | @ -703,7 +713,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|             (l) => | ||||
|                 Constants.priviliged_layers.indexOf(<any>l.id) < 0 && | ||||
|                 l.source.geojsonSource === undefined && | ||||
|                 l.doCount | ||||
|                 l.doCount, | ||||
|         ) | ||||
|         const summaryTileSource = new SummaryTileSource( | ||||
|             Constants.SummaryServer, | ||||
|  | @ -712,7 +722,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|             this.mapProperties, | ||||
|             { | ||||
|                 isActive: this.mapProperties.zoom.map((z) => z < maxzoom), | ||||
|             } | ||||
|             }, | ||||
|         ) | ||||
| 
 | ||||
|         return new SummaryTileSourceRewriter(summaryTileSource, this.layerState.filteredLayers) | ||||
|  | @ -733,12 +743,12 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|             gps_location_history: this.geolocation.historicalUserLocations, | ||||
|             gps_track: this.geolocation.historicalUserLocationsTrack, | ||||
|             selected_element: new StaticFeatureSource( | ||||
|                 this.selectedElement.map((f) => (f === undefined ? empty : [f])) | ||||
|                 this.selectedElement.map((f) => (f === undefined ? empty : [f])), | ||||
|             ), | ||||
|             range: new StaticFeatureSource( | ||||
|                 this.mapProperties.maxbounds.map((bbox) => | ||||
|                     bbox === undefined ? empty : <Feature[]>[bbox.asGeoJson({ id: "range" })] | ||||
|                 ) | ||||
|                     bbox === undefined ? empty : <Feature[]>[bbox.asGeoJson({ id: "range" })], | ||||
|                 ), | ||||
|             ), | ||||
|             current_view: this.currentView, | ||||
|             favourite: this.favourites, | ||||
|  | @ -753,7 +763,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|             ShowDataLayer.showRange( | ||||
|                 this.map, | ||||
|                 new StaticFeatureSource([bbox.asGeoJson({ id: "range" })]), | ||||
|                 this.featureSwitches.featureSwitchIsTesting | ||||
|                 this.featureSwitches.featureSwitchIsTesting, | ||||
|             ) | ||||
|         } | ||||
|         const currentViewLayer = this.layout.layers.find((l) => l.id === "current_view") | ||||
|  | @ -767,7 +777,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|                     currentViewLayer, | ||||
|                     this.layout, | ||||
|                     this.osmObjectDownloader, | ||||
|                     this.featureProperties | ||||
|                     this.featureProperties, | ||||
|                 ) | ||||
|             }) | ||||
|         } | ||||
|  | @ -811,7 +821,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
| 
 | ||||
|         const lastClickLayerConfig = new LayerConfig( | ||||
|             <LayerConfigJson>last_click_layerconfig, | ||||
|             "last_click" | ||||
|             "last_click", | ||||
|         ) | ||||
|         const lastClickFiltered = | ||||
|             lastClickLayerConfig.isShown === undefined | ||||
|  | @ -819,11 +829,11 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|                 : specialLayers.last_click.features.mapD((fs) => | ||||
|                     fs.filter((f) => { | ||||
|                         const matches = lastClickLayerConfig.isShown.matchesProperties( | ||||
|                               f.properties | ||||
|                             f.properties, | ||||
|                         ) | ||||
|                         console.debug("LastClick ", f, "matches", matches) | ||||
|                         return matches | ||||
|                       }) | ||||
|                     }), | ||||
|                 ) | ||||
|         new ShowDataLayer(this.map, { | ||||
|             features: new StaticFeatureSource(lastClickFiltered), | ||||
|  | @ -871,7 +881,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|             this.mapProperties.rasterLayer, | ||||
|             this.availableLayers, | ||||
|             this.featureSwitches.backgroundLayerId, | ||||
|             this.userRelatedState.preferredBackgroundLayer | ||||
|             this.userRelatedState.preferredBackgroundLayer, | ||||
|         ) | ||||
|     } | ||||
| 
 | ||||
|  | @ -887,7 +897,7 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|                 ? ">>> _Not_ reporting error to report server as testmode is on" | ||||
|                 : ">>> Reporting error to", | ||||
|             Constants.ErrorReportServer, | ||||
|             message | ||||
|             message, | ||||
|         ) | ||||
|         if (isTesting) { | ||||
|             return | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue