diff --git a/javascript/fileHandler.js b/javascript/fileHandler.js index c6dbe100c82cd1844bd3a364f8febc13f2414aea..f30c3b5fa0239e73a9381f07c7106a4d5fd981df 100644 --- a/javascript/fileHandler.js +++ b/javascript/fileHandler.js @@ -4,30 +4,43 @@ function handleFile() { const selectedFile = fileHandler.files[0]; if (selectedFile == null) { - return alert("No chosen file!") + return alert("No chosen file!"); } - //console.log(selectedFile); // Printer bare selve filen til loggen - fileHandler.value = ""; document.getElementById("loadButton").style.backgroundColor = "orangered"; var read = new FileReader(); read.readAsDataURL(selectedFile); - var newLayer = L.geoJSON(null, {style: getStyle()}) + var newLayer = L.geoJSON(null, {style: getStyle()}); + + var info = null; read.onloadend = function() { fetch(read.result).then(function(response) { return response.json(); }).then(function(data) { - newLayer.addData(data); + info = isInputMultiPolygon(data); + + if (info[0]) { + if (info[1] == "P") { + data = inputMultiPolygon(data); + } else if (info[1] == "L") { + data = inputMultiLine(data); + } + } + + console.log(JSON.stringify(data)); + + //newLayer.addData(data); }) } - + /* overlayMaps[selectedFile.name] = newLayer; updateSidebar(); handleLayer(selectedFile.name); + */ } diff --git a/javascript/turfFormatConverter.js b/javascript/turfFormatConverter.js index 2b2e9d6bd07d7bd04a26dccfe4f74f0f3c9a7ca9..6afbca4fb23d4395916e5ba0f44e25bf3f9d08a5 100644 --- a/javascript/turfFormatConverter.js +++ b/javascript/turfFormatConverter.js @@ -33,3 +33,98 @@ function multiPolygonToFeatureCollection(layer) { } return turf.featureCollection(features); } + +/* +Håndtering av input-filer fra bruker for å få de på rett format egnet for turf-operasjoner +*/ + +function isInputMultiPolygon(layer) { + liste = layer["features"]; + for (var i = 0; i < liste.length; i++) { + if (liste[i]["geometry"]["type"] == "MultiPolygon") { + return [true, "P"]; + } else if (liste[i]["geometry"]["type"] == "MultiLineString") { + return [true, "L"]; + } + } + return [false, null]; +} + +function turnList(liste) { + var more = false; + try { + var test = liste[0][0][0]; + if (test != null) { + more = true; + } + } catch { + + more = false; + } + + if (more) { + var newList = []; + + for (var i = 0; i < layer.length; i++) { + newList.push(turnList(liste[i])); + } + } else { + var newList = []; + + for (var i = liste.length - 1; i > -1; i--) { + newList.push(liste[i]); + } + } + + return newList; +} + +function inputMultiPolygon(layer) { + liste = layer["features"]; + k = liste.length; + + for (var i = 0; i < k; i++) { + if (liste[i]["geometry"]["coordinates"].length == 1) { + liste[i]["geometry"]["type"] = "Polygon"; + liste[i]["geometry"]["coordinates"] = [turnList(liste[i]["geometry"]["coordinates"][0][0])]; + } + else if (liste[i]["geometry"]["coordinates"].length > 1) { + var coordinates = liste[i]["geometry"]["coordinates"]; + liste[i]["geometry"]["type"] = "Polygon"; + liste[i]["geometry"]["coordinates"] = [turnList(coordinates[0][0])]; + for (var j = 1; j < coordinates.length; j++) { + newElement = {"type": liste[i]["type"], "properties": liste[i]["properties"], "geometry": {"type": "Polygon", "coordinates": [turnList(coordinates[j][0])]}}; + liste.push(newElement); + } + } + } + + layer["features"] = liste; + + return layer; +} + +function inputMultiLine(layer) { + liste = layer["features"]; + k = liste.length; + + for (var i = 0; i < k; i++) { + if (liste[i]["geometry"]["coordinates"].length == 1) { + liste[i]["geometry"]["type"] = "LineString"; + liste[i]["geometry"]["coordinates"] = turnList(liste[i]["geometry"]["coordinates"][0][0]); + } + else if (liste[i]["geometry"]["coordinates"].length > 1) { + var coordinates = liste[i]["geometry"]["coordinates"]; + liste[i]["geometry"]["type"] = "LineString"; + liste[i]["geometry"]["coordinates"] = turnList(coordinates[0][0]); + for (var j = 1; j < coordinates.length; j++) { + newElement = {"type": liste[i]["type"], "properties": liste[i]["properties"], "geometry": {"type": "Polygon", "coordinates": turnList(coordinates[j][0])}}; + liste.push(newElement); + } + } + } + + layer["features"] = liste; + + return layer; +}