diff options
author | Anton Tananaev <anton.tananaev@gmail.com> | 2020-11-01 18:44:31 -0800 |
---|---|---|
committer | Anton Tananaev <anton.tananaev@gmail.com> | 2020-11-01 18:44:31 -0800 |
commit | 47b95d6739d8bfcb2ee285ffaaffc8fc41520f1f (patch) | |
tree | 54767ba07ca2785d4dd613cf23956fbdc206597e /modern/src/map/Map.js | |
parent | 4cbb539001e8ba536674373efb60160b16a5d111 (diff) | |
download | trackermap-web-47b95d6739d8bfcb2ee285ffaaffc8fc41520f1f.tar.gz trackermap-web-47b95d6739d8bfcb2ee285ffaaffc8fc41520f1f.tar.bz2 trackermap-web-47b95d6739d8bfcb2ee285ffaaffc8fc41520f1f.zip |
Improve map switching
Diffstat (limited to 'modern/src/map/Map.js')
-rw-r--r-- | modern/src/map/Map.js | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/modern/src/map/Map.js b/modern/src/map/Map.js index d5e86171..71fb5e56 100644 --- a/modern/src/map/Map.js +++ b/modern/src/map/Map.js @@ -5,7 +5,7 @@ import { SwitcherControl } from './switcher/switcher'; import React, { useRef, useLayoutEffect, useEffect, useState } from 'react'; import { deviceCategories } from '../common/deviceCategories'; import { loadIcon, loadImage } from './mapUtil'; -import { styleCarto, styleOsm } from './mapStyles'; +import { styleCarto, styleMapbox, styleOsm } from './mapStyles'; import t from '../common/localization'; const element = document.createElement('div'); @@ -29,30 +29,39 @@ const updateReadyValue = value => { readyListeners.forEach(listener => listener(value)); } -map.on('load', async () => { +const initMap = async () => { const background = await loadImage('images/background.svg'); await Promise.all(deviceCategories.map(async category => { const imageData = await loadIcon(category, background, `images/icon/${category}.svg`); - map.addImage(category, imageData, { pixelRatio: window.devicePixelRatio }); + if (!map.hasImage(category)) map.addImage(category, imageData, { pixelRatio: window.devicePixelRatio }); })); updateReadyValue(true); -}); +}; + +map.on('load', initMap); map.addControl(new mapboxgl.NavigationControl({ showCompass: false, })); map.addControl(new SwitcherControl( - [{ - title: t('mapOsm'), - uri: styleOsm(), - }, { - title: t('mapCarto'), - uri: styleCarto(), - }], + [ + { title: t('mapOsm'), uri: styleOsm() }, + { title: t('mapCarto'), uri: styleCarto() }, + { title: 'Mapbox Streets', uri: styleMapbox('streets-v11') }, + ], t('mapOsm'), () => updateReadyValue(false), - () => updateReadyValue(true), + () => { + const waiting = () => { + if (!map.loaded()) { + setTimeout(waiting, 100); + } else { + initMap(); + } + }; + waiting(); + }, )); const Map = ({ children }) => { |