diff options
| author | user <user@node5.net> | 2024-12-07 15:53:14 +0100 |
|---|---|---|
| committer | user <user@node5.net> | 2024-12-07 15:53:14 +0100 |
| commit | cebc41159c642524ea4023fc94579ac2ce488457 (patch) | |
| tree | 83d6c2a1633725b66e42fc88f9c8b1b555f1434e /src/static/main.js | |
| parent | e5a49d8ed382d022ca62ded052074b718eec8da9 (diff) | |
Add heatmap with intensity input elements and URL parameters
Diffstat (limited to 'src/static/main.js')
| -rw-r--r-- | src/static/main.js | 73 |
1 files changed, 57 insertions, 16 deletions
diff --git a/src/static/main.js b/src/static/main.js index ecaf650..22a9048 100644 --- a/src/static/main.js +++ b/src/static/main.js @@ -15,11 +15,10 @@ const CategoryField = document.getElementById('Category'); const LoadingIndicator = document.getElementById('LoadingIndicator'); const SubmitButton = document.getElementById('SubmitButton'); const form = document.getElementById('QueryForm'); +const heatmap_intensity_element = document.getElementById("HeatmapIntensity"); +const heatmap_radius_element = document.getElementById("HeatmapRadius"); -form.addEventListener('submit', (event) => { - event.preventDefault(); // Prevents the default form submission - runQueryAfterLoad() -}); +var shops; const DefaultSearchValue = "supermarket"; var Categories = [] @@ -27,12 +26,36 @@ var Categories = [] var overlayMaps = { "POI markers": markers, "Nearest POI polygons": polygons, -// "POI heatmap": heatmap + "POI heatmap": heatmap }; var layerControl = L.control.layers({},overlayMaps).addTo(map); -function runQueryAfterLoad() { + + +form.addEventListener('submit', (event) => { + event.preventDefault(); // Prevents the default form submission + changeCategory(); +}); + +heatmap_intensity_element.addEventListener('input', (event) => { + changeHeatmap(); +}); + +heatmap_radius_element.addEventListener('input', (event) => { + changeHeatmap(); +}); + +function changeHeatmap() { + const url = new URL(location); + url.searchParams.set("HeatmapIntensity", heatmap_intensity_element.value); + history.pushState({}, "", url); + url.searchParams.set("HeatmapRadius", heatmap_radius_element.value); + history.pushState({}, "", url); + drawHeatmap(); +} + +function changeCategory() { if (!SubmitButton.disabled) { // Disallow double queries SubmitButton.disabled = true; LoadingIndicator.hidden = false; @@ -47,6 +70,10 @@ function runQueryAfterLoad() { } } +function alterHeatMapParameter(event) { + event.srcElement.value; +} + async function fetchCategories() { const response = await fetch("categories.json"); try { @@ -123,24 +150,38 @@ function addShop(shop) { title: shop.name, icon: icon, }).addTo(markers); - addPolygon(shop) + addPolygon(shop); } +function drawHeatmap() { + const queryString = window.location.search; + const urlParams = new URLSearchParams(queryString); + const HeatmapIntensityUrlParam = urlParams.get("HeatmapIntensity") + if (HeatmapIntensityUrlParam){ + heatmap_intensity_element.value = HeatmapIntensityUrlParam; + } + const HeatmapRadiusUrlParam = urlParams.get("HeatmapRadius") + if (HeatmapRadiusUrlParam){ + heatmap_radius_element.value = HeatmapRadiusUrlParam; + } + + heatmap.clearLayers(); + const shops_heatmap_format = shops.map(r => [r.lat, r.long, parseInt(heatmap_intensity_element.value)]); // Convert data to heatmap format + var heat = L.heatLayer(shops_heatmap_format, {radius: parseInt(heatmap_radius_element.value)}).addTo(heatmap); +} async function fetchAll(Category) { const response = await fetch(`all.json?Category=${Category}`) - const shops = await response.json(); - shops.forEach((shop) => addShop(shop)); + shops = await response.json(); + + shops.forEach((shop) => addShop(shop)); // Add icons and polygons + + drawHeatmap(); + LoadingIndicator.hidden = true; SubmitButton.disabled = false; } -async function fetchShopHeatmap() { - const response = await fetch("stores.json"); - const shops = await response.json(); - var heat = L.heatLayer(shops, {radius: 30}).addTo(heatmap); -} - fetchChains(); fetchCategories(); -//fetchShopHeatmap(); + |
