From 7853c98e3fc26918706a2e58b8ff813ac859a59f Mon Sep 17 00:00:00 2001
From: Bart Arendarczyk <s1924442@ed.ac.uk>
Date: Mon, 22 Jul 2024 18:19:29 +0100
Subject: [PATCH] Fixed issue with forced protected areas.

---
 src/ac/ed/lurg/ModelMain.java                        | 4 +++-
 src/ac/ed/lurg/landuse/InitProtectedAreasReader.java | 6 +++---
 src/ac/ed/lurg/landuse/LandUseItem.java              | 2 +-
 src/ac/ed/lurg/landuse/ProtectedAreasReader.java     | 5 +++--
 4 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/src/ac/ed/lurg/ModelMain.java b/src/ac/ed/lurg/ModelMain.java
index 9efa25d4..b3d1cc80 100644
--- a/src/ac/ed/lurg/ModelMain.java
+++ b/src/ac/ed/lurg/ModelMain.java
@@ -848,7 +848,9 @@ public class ModelMain {
 		RasterSet<LandUseItem> landUseRaster = new RasterSet<LandUseItem>(initialLC.getHeaderDetails());
 		
 		for (Map.Entry<RasterKey, LandCoverItem> entry : initialLC.entrySet()) {
-			landUseRaster.put(entry.getKey(), new LandUseItem(entry.getValue()));
+			if (entry.getValue().getTotalArea() > 0) {
+				landUseRaster.put(entry.getKey(), new LandUseItem(entry.getValue()));
+			}
 		}
 
 		return landUseRaster;
diff --git a/src/ac/ed/lurg/landuse/InitProtectedAreasReader.java b/src/ac/ed/lurg/landuse/InitProtectedAreasReader.java
index 24774e43..3ddc4ae2 100644
--- a/src/ac/ed/lurg/landuse/InitProtectedAreasReader.java
+++ b/src/ac/ed/lurg/landuse/InitProtectedAreasReader.java
@@ -10,9 +10,9 @@ public class InitProtectedAreasReader extends AbstractRasterReader<LandCoverItem
 
 	@Override
 	public void setData(LandCoverItem lcData, String token) {
-		if (!"nan".equals(token)) {	
-			double protFrac = Double.parseDouble(token);
-			lcData.setProtectedFraction(protFrac);
+		double value = Double.parseDouble(token);
+		if (value >= 0) { // no data is -9999
+			lcData.setProtectedFraction(value);
 		}
 	}	
 }
diff --git a/src/ac/ed/lurg/landuse/LandUseItem.java b/src/ac/ed/lurg/landuse/LandUseItem.java
index daa7afa0..5996162d 100644
--- a/src/ac/ed/lurg/landuse/LandUseItem.java
+++ b/src/ac/ed/lurg/landuse/LandUseItem.java
@@ -269,7 +269,7 @@ public class LandUseItem implements InterpolatingRasterItem<LandUseItem>, Serial
 		area = Math.min(area, fromArea);
 
 		// Update unmanaged forest fraction (increases if converting from managed forest, decreased otherwise)
-		if (toKey.getLcType().equals(LandCoverType.NATURAL)) {
+		if (toKey.getLcType().equals(LandCoverType.NATURAL) && !fromKey.getLcType().equals(LandCoverType.NATURAL)) {
 			NaturalDetail naturalDetail = (NaturalDetail) getLandCoverDetail(toKey);
 			double prevUnmanForest = naturalDetail.getArea() * naturalDetail.getUnmanagedForestFraction();
 
diff --git a/src/ac/ed/lurg/landuse/ProtectedAreasReader.java b/src/ac/ed/lurg/landuse/ProtectedAreasReader.java
index 5f1b9c13..45b5dcf1 100644
--- a/src/ac/ed/lurg/landuse/ProtectedAreasReader.java
+++ b/src/ac/ed/lurg/landuse/ProtectedAreasReader.java
@@ -11,8 +11,9 @@ public class ProtectedAreasReader extends AbstractRasterReader<ProtectedAreaItem
 
 	@Override
 	public void setData(ProtectedAreaItem data, String token) {
-		if (!"nan".equals(token)) {	
-			data.setProtectedFraction(Double.parseDouble(token));
+		double value = Double.parseDouble(token);
+		if (value >= 0) { // no data is -9999
+			data.setProtectedFraction(value);
 		}
 	}	
 }
\ No newline at end of file
-- 
GitLab