diff options
Diffstat (limited to 'src/map/overlay/useMapOverlays.js')
-rw-r--r-- | src/map/overlay/useMapOverlays.js | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/src/map/overlay/useMapOverlays.js b/src/map/overlay/useMapOverlays.js new file mode 100644 index 00000000..dafb5f83 --- /dev/null +++ b/src/map/overlay/useMapOverlays.js @@ -0,0 +1,103 @@ +import { useMemo } from 'react'; +import { useSelector } from 'react-redux'; +import { useTranslation } from '../../common/components/LocalizationProvider'; +import { useAttributePreference } from '../../common/util/preferences'; + +const sourceCustom = (urls) => ({ + type: 'raster', + tiles: urls, + tileSize: 256, + maxzoom: 18, +}); + +const sourceOpenWeather = (style, key) => sourceCustom([ + `https://tile.openweathermap.org/map/${style}/{z}/{x}/{y}.png?appid=${key}`, +]); + +export default () => { + const t = useTranslation(); + + const openWeatherKey = useAttributePreference('openWeatherKey'); + const tomTomKey = useAttributePreference('tomTomKey'); + const hereKey = useAttributePreference('hereKey'); + const customMapOverlay = useSelector((state) => state.session.server.overlayUrl); + + return useMemo(() => [ + { + id: 'openSeaMap', + title: t('mapOpenSeaMap'), + source: sourceCustom(['https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png']), + available: true, + }, + { + id: 'openRailwayMap', + title: t('mapOpenRailwayMap'), + source: sourceCustom(['https://tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png']), + available: true, + }, + { + id: 'openWeatherClouds', + title: t('mapOpenWeatherClouds'), + source: sourceOpenWeather('clouds_new', openWeatherKey), + available: !!openWeatherKey, + attribute: 'openWeatherKey', + }, + { + id: 'openWeatherPrecipitation', + title: t('mapOpenWeatherPrecipitation'), + source: sourceOpenWeather('precipitation_new', openWeatherKey), + available: !!openWeatherKey, + attribute: 'openWeatherKey', + }, + { + id: 'openWeatherPressure', + title: t('mapOpenWeatherPressure'), + source: sourceOpenWeather('pressure_new', openWeatherKey), + available: !!openWeatherKey, + attribute: 'openWeatherKey', + }, + { + id: 'openWeatherWind', + title: t('mapOpenWeatherWind'), + source: sourceOpenWeather('wind_new', openWeatherKey), + available: !!openWeatherKey, + attribute: 'openWeatherKey', + }, + { + id: 'openWeatherTemperature', + title: t('mapOpenWeatherTemperature'), + source: sourceOpenWeather('temp_new', openWeatherKey), + available: !!openWeatherKey, + attribute: 'openWeatherKey', + }, + { + id: 'tomTomFlow', + title: t('mapTomTomFlow'), + source: sourceCustom([`https://api.tomtom.com/traffic/map/4/tile/flow/absolute/{z}/{x}/{y}.png?key=${tomTomKey}`]), + available: !!tomTomKey, + attribute: 'tomTomKey', + }, + { + id: 'tomTomIncidents', + title: t('mapTomTomIncidents'), + source: sourceCustom([`https://api.tomtom.com/traffic/map/4/tile/incidents/s3/{z}/{x}/{y}.png?key=${tomTomKey}`]), + available: !!tomTomKey, + attribute: 'tomTomKey', + }, + { + id: 'hereFlow', + title: t('mapHereFlow'), + source: sourceCustom( + [1, 2, 3, 4].map((i) => `https://${i}.traffic.maps.ls.hereapi.com/maptile/2.1/flowtile/newest/normal.day/{z}/{x}/{y}/256/png8?apiKey=${hereKey}`), + ), + available: !!hereKey, + attribute: 'hereKey', + }, + { + id: 'custom', + title: t('mapOverlayCustom'), + source: sourceCustom(customMapOverlay), + available: !!customMapOverlay, + }, + ], [t, openWeatherKey, tomTomKey, hereKey, customMapOverlay]); +}; |