2023-06-02 08:42:08 +02:00
|
|
|
import {Store, UIEventSource} from "../UIEventSource"
|
|
|
|
import {Utils} from "../../Utils"
|
|
|
|
import {RasterLayerPolygon, RasterLayerUtils,} from "../../Models/RasterLayers"
|
2021-01-02 21:03:40 +01:00
|
|
|
|
|
|
|
/**
|
2023-03-11 02:37:07 +01:00
|
|
|
* When a user pans around on the map, they might pan out of the range of the current background raster layer.
|
|
|
|
* This actor will then quickly select a (best) raster layer of the same category which is available
|
2021-01-02 21:03:40 +01:00
|
|
|
*/
|
2021-09-21 02:10:42 +02:00
|
|
|
export default class BackgroundLayerResetter {
|
2021-09-09 00:05:51 +02:00
|
|
|
constructor(
|
2023-03-11 02:37:07 +01:00
|
|
|
currentBackgroundLayer: UIEventSource<RasterLayerPolygon>,
|
|
|
|
availableLayers: Store<RasterLayerPolygon[]>
|
2021-09-28 18:00:44 +02:00
|
|
|
) {
|
2021-11-07 16:34:51 +01:00
|
|
|
if (Utils.runningFromConsole) {
|
2021-10-20 00:09:40 +02:00
|
|
|
return
|
|
|
|
}
|
2021-11-07 16:34:51 +01:00
|
|
|
|
2023-03-11 02:37:07 +01:00
|
|
|
// Change the baseLayer back to OSM if we go out of the current range of the layer
|
|
|
|
availableLayers.addCallbackAndRunD((availableLayers) => {
|
|
|
|
// We only check on move/on change of the availableLayers
|
|
|
|
const currentBgPolygon: RasterLayerPolygon | undefined = currentBackgroundLayer.data
|
2023-04-21 17:37:50 +02:00
|
|
|
if (currentBackgroundLayer === undefined) {
|
|
|
|
return
|
|
|
|
}
|
2021-09-09 00:05:51 +02:00
|
|
|
|
2023-03-11 02:37:07 +01:00
|
|
|
if (availableLayers.findIndex((available) => currentBgPolygon == available) >= 0) {
|
|
|
|
// Still available!
|
|
|
|
return
|
2021-01-02 21:03:40 +01:00
|
|
|
}
|
2023-03-11 02:37:07 +01:00
|
|
|
|
2023-04-21 17:37:50 +02:00
|
|
|
console.log("Current layer properties:", currentBgPolygon)
|
2021-01-02 21:03:40 +01:00
|
|
|
// Oops, we panned out of range for this layer!
|
2023-03-11 02:37:07 +01:00
|
|
|
// What is the 'best' map of the same category which is available?
|
|
|
|
const availableInSameCat = RasterLayerUtils.SelectBestLayerAccordingTo(
|
|
|
|
availableLayers,
|
2023-04-21 17:37:50 +02:00
|
|
|
currentBgPolygon?.properties?.category
|
2021-01-02 21:03:40 +01:00
|
|
|
)
|
2023-05-18 15:56:24 +02:00
|
|
|
if(!availableInSameCat){
|
|
|
|
return
|
|
|
|
}
|
2023-03-11 02:37:07 +01:00
|
|
|
console.log("Selecting a different layer:", availableInSameCat.properties.id)
|
2023-04-21 17:37:50 +02:00
|
|
|
currentBackgroundLayer.setData(availableInSameCat)
|
2021-01-02 21:03:40 +01:00
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|