Pokročilý Leaflet Cvičení 8 Webová kartografie Podzim 2019 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Úvod Leaflet Závěr Zápis funkce HTTP dotazy Naučíme se: zobrazovat v mapě externí data – GeoJSON načítat externí data – asynchronní JavaScript používat v Leafletu pluginy zobrazovat velké objemy dat v Leafletu – clustering, vlastní ikony Podzim 2019 Pokročilý Leaflet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Úvod Leaflet Závěr Zápis funkce HTTP dotazy Zápis funkce Běžný zápis: function (data) { return data.user; } function (a, b) { return a + b; } ES6+: (data) => { return data.user; } (a, b) => { return a + b; } // nebo jednoduše: data => data.user; (a, b) => a + b; pokud má funkce pouze jeden argument, můžeme vypustit závorky pokud vracíme pouze jednoduchý výraz, můžeme vypustit složené závorky i klíčové slovo return Podzim 2019 Pokročilý Leaflet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Úvod Leaflet Závěr Zápis funkce HTTP dotazy HTTP dotazy AJAX – Asynchronous JavaScript And XML umožňují dynamicky načítat data na HTTP dotazy se vztahuje řada bezpečnostních limitů: Stránky načtené přes HTTPS by měly dotazovat další zdroje opět přes HTTPS, ne HTTP https://www.codecademy.com/articles/what-is-cors https://en.wikipedia.org/wiki/Cross-site_scripting skript není zpracován lineárně, ale části kódu se spustí až po načtení externího zdroje Podzim 2019 Pokročilý Leaflet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Úvod Leaflet Závěr Zápis funkce HTTP dotazy XMLHttpRequest Dříve (nebudeme používat): var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState === 4 && this.status === 200) { console.log(JSON.parse(this.response)); } }; xhttp.open("GET", "http://example.com/data.json", true); xhttp.send(); // jednodušeji pomocí jQuery: $.get("http://example.com/data.json", function (data) { console.log(data); }); Podzim 2019 Pokročilý Leaflet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Úvod Leaflet Závěr Zápis funkce HTTP dotazy Fetch API Budeme používat (ES6+): fetch("http://example.com/data.json") .then(response => response.json()) .then(data => console.log(data)); Výraz v metodě .then() je zpracován asynchronně, po získání odpovědi. http://bit.ly/medium-fetch-api https://css-tricks.com/using-fetch/ Podzim 2019 Pokročilý Leaflet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Úvod Leaflet Závěr Zápis funkce HTTP dotazy Špinavý trik Pokud pracujete lokálně a nepoužíváte webserver, fetch("./lokalni_data.json") vám nebude fungovat :-( buďto nahrajete data na server (např. https://bit.ly/vozejkmap-geojson) nebo použijete dočasně špinavý trik: v souboru data.json vložíte před JSON objekt const DATA = data.json nejlépe uložíte jako data.js data.js načtete ve stránce jako skript: vozejkmap.js const DATA = { … } // objekt obsahuje celý GeoJSON objekt script.js console.log(DATA); // funguje! Podzim 2019 Pokročilý Leaflet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Úvod Leaflet Závěr L.geoJSON Leaflet Pluginy L.markerCluster L.geoJSON https://leafletjs.com/reference-1.3.4.html#geojson const VOZEJK = L.geoJSON(DATA) .addTo(MAP); Dále je dobré: přidat popis bodu pomocí .bindPopup() přidat vrstvu do překryvných vrstev pomocí .addOverlay() Podzim 2019 Pokročilý Leaflet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Úvod Leaflet Závěr L.geoJSON Leaflet Pluginy L.markerCluster Leaflet Pluginy https://leafletjs.com/plugins.html Přidáváme jako jakékoliv jiné zdroje, např.: index.html Podzim 2019 Pokročilý Leaflet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Úvod Leaflet Závěr L.geoJSON Leaflet Pluginy L.markerCluster L.markerCluster const CLUSTER = L.markerClusterGroup() .bindPopup(layer => layer.feature.properties.description) .addTo(MAP); CLUSTER.addLayer(SOME_LAYER); Podzim 2019 Pokročilý Leaflet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Úvod Leaflet Závěr Jak dál? Úkol dokončete svoji webovou stránku včetně připomínek vkusně použitá interaktivní mapa v Leafletu použijte vámi připravený GeoJSON / jiná geografická data vhodně použijte vybraný Leaflet plugin odevzdat do 2. 12. 24:00 bodované (max 10 b.) odevzdávat v archivu (web.zip) Podzim 2019 Pokročilý Leaflet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Úvod Leaflet Závěr Jak dál? Jak dál? Přečtěte si víc a procvičujte procvičování: https://bl.ocks.org/a74c670fc445f235654abe0cd1b12b42 Vladimir Agafonkin: https://github.com/mourner https://javascript.info/ e-booky zdarma https://github.com/getify/You-Dont-Know-JS https://medium.com/ https://bost.ocks.org/mike/ Podzim 2019 Pokročilý Leaflet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Úvod Leaflet Závěr Jak dál? Ptejte se kdykoliv kdekoliv jakkoliv co nejdřív … e-mail: leitgeb@mail.muni.cz discord: https://discord.gg/ppscspX Podzim 2019 Pokročilý Leaflet