Google Maps už jsou kolem nás dvacet let

12. 3. 2025

Sdílet

Google Maps
Autor: Google
Google Maps
Google Mapy, které letos oslaví 20 let existence, se staly neodmyslitelnou součástí života více než miliardy uživatelů měsíčně. Služba, která denně poskytuje navigaci pro ohromujících 20 miliard kilometrů, však dávno přerostla svůj původní účel pouhého zobrazování map a navigace. Aktuálně ale prochází zásadními změnami. S problémy se potýká i v Česku.

Klíčem k úspěchu Google Map je jejich neustálá aktualizace. Společnost využívá pestrou škálu zdrojů – od satelitních snímků přes data od místních úřadů až po příspěvky komunity uživatelů. 

Významnou roli hraje také projekt Street View, který nyní obsahuje přes 280 miliard snímků z více než 100 zemí a teritorií. Tento rozsáhlý datový fond umožňuje Google Mapám poskytovat informace o 250 milionech podniků a míst po celém světě.

Máme nové jméno

Po více než třech dekádách existence otvírá magazín Computerworld novou kapitolu. Tradiční průvodce světem IT, který si za 36 let existence vybudoval pověst jednoho z nejdůvěryhodnějších tuzemských zdrojů pro IT profesionály, se od nynějška jmenuje Computertrends.

Na druhou stranu, právě to je i jejich slabina. Typickým příkladem může být plánování cest meziměstskou veřejnou dopravou v Česku. Zkuste si třeba vyhledat spojení autobusy z Prahy do Pece pod Sněžkou. Google Mapy doporučí extrémně zdlouhavou cestu mezinárodním autobusem přes Polsko, místo jednoduché tříhodinové cesty přes Mladou Boleslav. 

Podle informací Computertrends jsou nedostatečné výsledky v hromadné dopravě způsobeny extrémní fragmentací české meziměstské dopravy, kdy zdaleka ne všichni dopravci sdílejí své jízdní řády s Googlem a ten si je sám neumí automaticky vždy obstarat.

Člověk zvyklý plánovat přes Google Maps úplně všechno, pak může být znejistěn, jestli podobně nedobré výsledky nejsou i v jiných případech vyhledávání.

Video ke kávě

Máte čas na rychlé a informativní video?

Podobně spoustu lidí rozladil loňský krok, kdy z Google Maps zmizely všechna lyžařská střediska, respektive sjezdovky, vleky a lanovky. Dokonce vznikla mezinárodní petice za jejich návrat, ale zatím bezúspěšná a podle vyjádření Googlu se s jejich návratem tak jako tak nepočítá.

AI jako hnací motor inovací

Umělá inteligence se, podobně jako v jiných oblastech, stala ústředním prvkem vývoje Google Map. Díky ní mohou vývojáři přetvářet tradiční pojetí map a přinášet uživatelům zcela nové možnosti:

  1. Immersive View: Tato funkce umožňuje uživatelům virtuálně prozkoumat okolí nebo turistické atrakce ještě před samotnou návštěvou. AI kombinuje Street View snímky, satelitní záběry a 3D modely pro vytvoření realistického a interaktivního prostředí.
  2. Ekologické trasy: Google Mapy nyní nabízejí možnost volby nejúspornější trasy z hlediska spotřeby paliva. Od spuštění této funkce koncem roku 2021 pomohla podle Googlu snížit emise skleníkových plynů o ekvivalent 2,9 milionu metrických tun, což odpovídá odstranění 650 000 automobilů se spalovacím motorem z provozu po dobu jednoho roku.
  3. Prediktivní analýza dopravy: AI algoritmy analyzují historická data o dopravě, aktuální informace o rychlosti z mobilních zařízení a data z dalších zdrojů pro přesné předpovědi dopravních podmínek a optimalizaci tras v reálném čase. Já osobně stále raději používám Waze, byť také patří pod Google a zaměstnanci Googlu tvrdí, že obě mapy sdílejí stejné informace-

Budoucnost mapování

Google neustále pracuje na vylepšování svých map. Využívá přitom nejmodernější AI modely, jako je Gemini, pro analýzu miliard obrázků a dat od partnerů i komunity. Díky tomu dokáže provádět více než 100 milionů aktualizací map denně.

Milujete časovou osu?

Jednou z mých nejoblíbenějších funkcí Google Maps je časová osa – podle ni zjistíte, kdy jste byli na jakém místě, jaké výlety jste podnikli. Super věc i třeba v případě, že dostanete pokutu za rychlou jízdu nebo parkování, tak si můžu ověřit, jestli jsem to auto řídil právě já nebo třeba manželka.

Bohužel i tady se smráká. Údajně v důsledku ochrany osobních údajů Google přesouvá uložená data o pobytu z cloudu do zařízení uživatelů. V květnu pak všechna cloudová data všem smaže.

docker + kubernetes školení s dotací tip

Jak je na tom kybernetická bezpečnost v České republice? Jak bezpečné jsou české digitální sítě?
Jak je na tom kybernetická bezpečnost v České republice? Jak bezpečné jsou české digitální sítě?
0:00/

Pokud je chcete zachránit, musíte si v nastavení aplikace Google Maps (nikoliv na webu, tam je již časová osa nedostupná) zapnout zálohování a vypnout automatické mazání. Bohužel to není všespásné. Na jednom telefonu mi časová osa normálně funguje, na dalším nikoliv. Nastavení jsou přitom shodná a nejde ten problém (zatím) nijak vyřešit.

Každopádně i přes tyhle mouchy jsou Google Maps pořád jednou z nejlepších a nejpoužívanějších aplikací, kterou v mobilu mám. A zatím to vypadá, že tam vydrží i těch dalších dvacet let.

 

Computertrends si můžete objednat i jako klasický časopis. Je jediným odborným magazínem na českém a slovenském trhu zaměreným na profesionály v oblasti informačních a komunikačních technologií (ICT). Díky silnému zázemí přináší aktuální zpravodajství, analýzy, komentáře a přehledy nejnovejších technologií dříve a na vyšší odborné úrovni, než ostatní periodika na tuzemském trhu.

Obsah Computertrends je určen odborníkům a manažerům z firem a institucí, kteří se podílejí na rozhodovacím procesu při nákupu ICT technologií. Jednotlivá čísla si můžete objednat i v digitální podobě.

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }