Skip to content
Snippets Groups Projects
Commit 818bea8d authored by Jakob Severin Steffensen Hjelseth's avatar Jakob Severin Steffensen Hjelseth
Browse files

Merge branch '30-input-polygon' into 'dev'

Resolve "Input Polygon"

See merge request !68
parents 4e190256 d7d38f5c
No related branches found
No related tags found
2 merge requests!69Dev,!68Resolve "Input Polygon"
...@@ -36,6 +36,11 @@ function makeBuffer() { ...@@ -36,6 +36,11 @@ function makeBuffer() {
var buffer = turf.buffer(layer, distance, {units: "meters"}); // Lager buffer var buffer = turf.buffer(layer, distance, {units: "meters"}); // Lager buffer
if (document.getElementById("bufferCheck").checked) { // Om en har huket av for at en skal 'dissolve' gjøres det if (document.getElementById("bufferCheck").checked) { // Om en har huket av for at en skal 'dissolve' gjøres det
if (isMultiPolygon(buffer)) { // Kan ikke sende MultiPolygon inn i dissolved
buffer = fixMultiPolygons(buffer);
}
var dissolved = turf.dissolve(buffer); var dissolved = turf.dissolve(buffer);
var newLayer = L.geoJSON(dissolved, {style: getStyle()}); var newLayer = L.geoJSON(dissolved, {style: getStyle()});
} else { // Ellers lager den bare mange ulike buffer-soner } else { // Ellers lager den bare mange ulike buffer-soner
......
...@@ -22,6 +22,11 @@ function doDissolve() { ...@@ -22,6 +22,11 @@ function doDissolve() {
// Prøver å kjøre dissolve-funksjonen: // Prøver å kjøre dissolve-funksjonen:
try { try {
if (isMultiPolygon(layer)) { // Kan ikke sende MultiPolygon inn i dissolved
layer = fixMultiPolygons(layer);
}
var dissolved = turf.dissolve(layer); // Kjører dissolve var dissolved = turf.dissolve(layer); // Kjører dissolve
var newLayer = L.geoJSON(dissolved, {style: getStyle()}); var newLayer = L.geoJSON(dissolved, {style: getStyle()});
......
...@@ -59,13 +59,28 @@ function closeBox(id) { // Lukker aktuell boks og justerer siden motsatt av hva ...@@ -59,13 +59,28 @@ function closeBox(id) { // Lukker aktuell boks og justerer siden motsatt av hva
// Fyller select i de ulike boksene med alternativ: // Fyller select i de ulike boksene med alternativ:
function isPolygon(layer) {
var objects = layer["features"];
for (var i = 0; i < objects.lenght; i++) {
if (objects[i]["geometry"]["type"] == "Polygon") {
return true;
}
}
return false;
}
function fillSelect(id) { function fillSelect(id) {
var select = document.getElementById(id); var select = document.getElementById(id);
select.innerHTML = ""; select.innerHTML = "";
select.add(new Option(text="- - -")); select.add(new Option(text="- - -"));
for (key in overlayMaps) { for (key in overlayMaps) {
select.add(new Option(text = key, value = key)); if (id == "bufferSelect") {
select.add(new Option(text = key, value = key));
}
else if (id != "bufferSelect" && isPolygon(overlayMaps[key])) {
select.add(new Option(text = key, value = key));
}
} }
} }
......
...@@ -17,15 +17,33 @@ function featureCollectionToMultiPolygon(layer) { // Funksjon som gjør om featu ...@@ -17,15 +17,33 @@ function featureCollectionToMultiPolygon(layer) { // Funksjon som gjør om featu
} }
function isMultiPolygon(layer) { // Inneholder 'layer' features som er MultiPolygon? function isMultiPolygon(layer) { // Inneholder 'layer' features som er MultiPolygon?
if (layer["geometry"]["type"] == "MultiPolygon") { var more = false;
return true;
try { // Justerer i forhold til hvor mye innhold 'layer' har
if (layer["features"]) {
more = true;
}
} catch {}
if (more) {
for (var i = 0; i < layer["features"].length; i++) {
if (layer["features"][i]["geometry"]["type"] == "MultiPolygon") {
return true;
}
}
} else {
if (layer["geometry"]["type"] == "MultiPolygon") {
return true;
}
} }
return false; return false;
} }
function multiPolygonToFeatureCollection(layer) {// Funksjon som gjør om features i 'layer' til FeatureCollection istedenfor MultiPolygon function multiPolygonToFeatureCollection(layer) { // Funksjon som gjør om features i 'layer' til FeatureCollection istedenfor MultiPolygon
// 'layer' er her et GeoJSON-lag // 'layer' er her et GeoJSON-lag
var features = [];
features = [];
for (var i = 0; i < layer["geometry"]["coordinates"].length; i++) { for (var i = 0; i < layer["geometry"]["coordinates"].length; i++) {
var geometry = { var geometry = {
"type": "Polygon", "type": "Polygon",
...@@ -33,9 +51,47 @@ function multiPolygonToFeatureCollection(layer) {// Funksjon som gjør om featur ...@@ -33,9 +51,47 @@ function multiPolygonToFeatureCollection(layer) {// Funksjon som gjør om featur
}; };
features.push(turf.feature(geometry)); features.push(turf.feature(geometry));
} }
return turf.featureCollection(features); return turf.featureCollection(features);
} }
function fixMultiPolygons(layer) { // Annen variant som løser MultiPolygon-problemet for de ulike GIS-funksjonene
var features = layer["features"];
var k = features.length;
for (var i = 0; i < k; i++) {
/*
Her itererer en gjennom alle features i FeatureCollection,
plukker ut alle features som er registrert som MultiPolygon,
og gjør dem om til flere Polygons
*/
if (features[i]["geometry"]["type"] == "MultiPolygon") { // Er det MultiPolygon?
var coord = features[i]["geometry"]["coordinates"]; // Henter geometrien til alle Polygonene
// Oppdaterer første polygon:
features[i]["geometry"]["type"] = "Polygon";
features[i]["geometry"]["coordinates"] = coord[0];
for (var j = 1; j < coord.length; j++) {
// Lager så nye features for resten av polygonene i MultiPolygonet:
var newFeature = {};
for (key in features[i]) { // Vil ha de samme nøklene og deres verdier som originalen
if (key != "geometry") { // ... men ikke lik geometri
newFeature[key] = features[i][key];
}
}
newFeature["geometry"] = { // Legger til geometri
"type": "Polygon",
"coordinates": coord[j] // Henter koordinat fra original-lista
};
features.push(newFeature); // Legger til ny feature
}
}
}
layer["features"] = features; // Oppdaterer features-lista
return layer;
}
/* /*
Håndtering av input-filer fra bruker for å få de på rett format egnet for turf-operasjoner Håndtering av input-filer fra bruker for å få de på rett format egnet for turf-operasjoner
*/ */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment