diff --git a/css/style.css b/css/style.css index 5c13ed0f7c1aacef233a3e5408dcbb1a523c1676..915f0c2244d336062646122d879668581845cdcb 100644 --- a/css/style.css +++ b/css/style.css @@ -5,6 +5,10 @@ margin: 0; } +p { + font-size: 18px; +} + .box { font-family: monospace; background-color: orange; @@ -90,7 +94,7 @@ .sidebarButton { font-family: monospace; - background-color: orangered; + background-color: black; color: white; width: 20vw; text-align: center; diff --git a/index.html b/index.html index 71144d46c23e02be5f5f9542eaf5f11dbfc8db7d..a3b6cf5349002934cd6ba011c252201310477b1d 100644 --- a/index.html +++ b/index.html @@ -8,6 +8,9 @@ <!-- Leaflet css --> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin="" /> + + <!-- Turfjs --> + <script src='https://unpkg.com/@turf/turf@6/turf.min.js'></script> </head> @@ -60,6 +63,10 @@ </div> </div> + <div> + <button id="exampleData" class="onClick" onclick="loadExampleData()">Click here to load the sample datasets</button> + </div> + <div id="layers" style="font-family: monospace; margin-left: 10px; margin-top: 25px; font-size: 18px; height: 50vh;"></div> </div> @@ -75,6 +82,17 @@ <path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM5.354 4.646a.5.5 0 1 0-.708.708L7.293 8l-2.647 2.646a.5.5 0 0 0 .708.708L8 8.707l2.646 2.647a.5.5 0 0 0 .708-.708L8.707 8l2.647-2.646a.5.5 0 0 0-.708-.708L8 7.293 5.354 4.646z"/> </svg> </div> + + <p>Choose a layer to create a buffer around:</p> + <select id="bufferSelect">Layer:</select> + + <p>Write the distance you want for the buffer (in meter):</p> + <input id="bufferDistance"> + + <p>Choose a name for the new buffer:</p> + <input id="bufferName"><br> + + <button class="button" style="font-size: 25px;" onclick="makeBuffer()">Make buffer</button> </div> <div id="differenceBox" class="box"> @@ -161,7 +179,7 @@ <div style="padding-right: 2vw;"> <svg style="cursor: pointer; border: none; position: relative; color: orangered; z-index: 999;" onclick="openBox('tutorialBox')" - xmlns="http://www.w3.org/2000/svg" width="6vh" height="6v" fill="currentColor" class="bi bi-question-circle-fill" viewBox="0 0 16 16"> + xmlns="http://www.w3.org/2000/svg" width="6vh" height="6vh" fill="currentColor" class="bi bi-question-circle-fill" viewBox="0 0 16 16"> <path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM5.496 6.033h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286a.237.237 0 0 0 .241.247zm2.325 6.443c.61 0 1.029-.394 1.029-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94 0 .533.425.927 1.01.927z"/> </svg> </div> @@ -179,6 +197,7 @@ <script src="javascript/fileHandler.js"></script> <script src="javascript/geoJSON.js"></script> <script src="javascript/leafletLayerControl.js"></script> + <script src="javascript/buffer.js"></script> <!-- Imported js --> <!-- <script src="https://unpkg.com/shpjs@latest/dist/shp.js"></script> --> diff --git a/javascript/buffer.js b/javascript/buffer.js new file mode 100644 index 0000000000000000000000000000000000000000..230703a6edee979e72be6b20c8e10d69de7f6240 --- /dev/null +++ b/javascript/buffer.js @@ -0,0 +1,25 @@ +/* +Link til nettside med turfjs-funksjoner: +https://turfjs.org/docs/ +*/ + +function makeBuffer() { + var input = document.getElementById("bufferSelect").value; + var layer = overlayMaps[input]; + var distance = parseFloat(document.getElementById("bufferDistance").value); + var name = document.getElementById("bufferName").value; + + try { + var buffer = turf.buffer(layer.toGeoJSON(), distance, {units: "meters"}); // Denne må ryddes opp i! + var newLayer = L.geoJSON(turf.dissolve(buffer)); + + overlayMaps[name] = newLayer; + + updateSidebar(); + handleLayer(name); + document.getElementById("bufferDistance").value = ""; + document.getElementById("bufferName").value = ""; + } catch(failure) { + alert(failure); + } +} \ No newline at end of file diff --git a/javascript/geoJSON.js b/javascript/geoJSON.js index 688392304d8e368f57e75b1fec402d08da0faa01..ab174703cc88c1588c73f75d9a0b6b8171ffb759 100644 --- a/javascript/geoJSON.js +++ b/javascript/geoJSON.js @@ -69,11 +69,6 @@ var TC = { ] }; -/* -var layer1 = L.geoJSON(U); -var layer2 = L.geoJSON(TC); -*/ - var test1 = L.geoJSON(); var test2 = L.geoJSON(); diff --git a/javascript/leafletLayerControl.js b/javascript/leafletLayerControl.js index 30913cc92d7238aa9ed2be0bdc2acf6179bf9a95..9585943e99d06fda50ad4652a6aba4210e2429f4 100644 --- a/javascript/leafletLayerControl.js +++ b/javascript/leafletLayerControl.js @@ -5,34 +5,61 @@ var baselayers = { "Satellite": googleSat } -var overlayMaps = { - "Arealdekke": Arealdekke, - "Bygg_f": Bygg_f, - "Bygg_l": Bygg_l, - "Samferdsel": Samferdsel, - "test1": test1, - "test2": test2 -} +var overlayMaps = {}; var controller = L.control.layers(baselayers).addTo(map); +var exampleLoaded = false; + +var addedLayers = []; // Til sidebaren: -for (key in overlayMaps) { - var layerButton = document.createElement("div"); - layerButton.innerHTML = "<button id='" + key + "' class='sidebarButton' onclick=handleLayer(" + key + ") />" + key; - - container = document.getElementById("layers"); - container.appendChild(layerButton); - container.appendChild(document.createElement("br")); +function loadExampleData() { + if (!exampleLoaded) { + + overlayMaps["Arealdekke"] = Arealdekke; + overlayMaps["Bygg_f"] = Bygg_f; + overlayMaps["Bygg_l"] = Bygg_l; + overlayMaps["Samferdsel"] = Samferdsel; + overlayMaps["test1"] = test1; + overlayMaps["test2"] = test2; + + updateSidebar(); + exampleLoaded = true; + document.getElementById("exampleData").style.display = "none"; + } +} + +function updateSidebar() { + for (key in overlayMaps) { + if (!addedLayers.includes(key)) { + addedLayers.push(key); + + var layerButton = document.createElement("div"); + layerButton.innerHTML = `<button id=${key} class='sidebarButton' onclick='handleLayer("${key}")' />${key}`; + + container = document.getElementById("layers"); + container.appendChild(layerButton); + container.appendChild(document.createElement("br")); + } + } } -function handleLayer(layer) { - if(map.hasLayer(layer)) { +function handleLayer(name) { + var layer = null; + + for (key in overlayMaps) { + if (key == name) { + layer = overlayMaps[key]; + break; + } + } + + if (map.hasLayer(layer)) { map.removeLayer(layer); - document.getElementById(layer).style.backgroundColor = "black"; // Dette må endres opp i! + document.getElementById(name).style.backgroundColor = "black"; } else { map.addLayer(layer); - document.getElementById(layer.innerHTML).style.backgroundColor = "green"; + document.getElementById(name).style.backgroundColor = "green"; } } diff --git a/javascript/sidebar&boxes.js b/javascript/sidebar&boxes.js index 12fd8f1f98a906e37261998dacb3823699d776ac..f08ff14e4bc787638a7fd98b8d9bcff55ef55b60 100644 --- a/javascript/sidebar&boxes.js +++ b/javascript/sidebar&boxes.js @@ -24,6 +24,12 @@ function openBox(id) { if (boolskNav) { closeNav(); } + + // Fyller aktuell select med alternativ avhengig av hvilken boks en åpner: + if (id == "bufferBox") { + fillSelect("bufferSelect"); + } + document.getElementById(String(id)).style.width = "40vw"; document.getElementById(String(id)).style.height = "40vh"; document.getElementById(String(id)).style.borderWidth = "20px"; @@ -39,4 +45,17 @@ function closeBox(id) { boolskBox = false; box = null; activateMap(); +} + +// Fyller select i de ulike boksene med alternativ: + +function fillSelect(id) { + var select = document.getElementById(id); + + select.innerHTML = ""; + + //select.options.lenght = 0; + for (key in overlayMaps) { + select.add(new Option(text = key, value = key)); + } } \ No newline at end of file