From 7b2459ba1c1f14c06f17914f3d53ebcd6e2641a3 Mon Sep 17 00:00:00 2001
From: wuww <252740454@qq.com>
Date: 星期五, 16 五月 2025 17:27:51 +0800
Subject: [PATCH] 解决土地利用裁剪后使用异常

---
 src/main/java/com/se/nsl/service/ResolveService.java |   35 +++++++++++++++++++++++++++++++++--
 1 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/se/nsl/service/ResolveService.java b/src/main/java/com/se/nsl/service/ResolveService.java
index 8b10d9d..63b3fa5 100644
--- a/src/main/java/com/se/nsl/service/ResolveService.java
+++ b/src/main/java/com/se/nsl/service/ResolveService.java
@@ -16,6 +16,7 @@
 import com.se.nsl.helper.WebHelper;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
+import org.gdal.gdal.Band;
 import org.gdal.gdal.Dataset;
 import org.gdal.gdal.gdal;
 import org.gdal.gdalconst.gdalconstConstants;
@@ -161,15 +162,45 @@
 
         String terrainFile = inPath + File.separator + config.getTerrainFile();
         Dataset dsDem = gdal.Open(config.getSourceDem(), gdalconstConstants.GA_ReadOnly);
-        ComHelper.Resample(dsDem, null, terrainFile, wkt, null, null);
+        ComHelper.Resample(dsDem, null, terrainFile, null, wkt, null, null);
         dsDem.delete();
 
         String landuseFile = inPath + File.separator + config.getLanduseFile();
         Dataset dsLanduse = gdal.Open(config.getSourceLanduse(), gdalconstConstants.GA_ReadOnly);
-        ComHelper.Resample(dsLanduse, null, landuseFile, wkt, null, null);
+        ComHelper.Resample(dsLanduse, null, landuseFile, null, wkt, null, null);
         dsLanduse.delete();
     }
 
+    public void updateTif(Simu simu, SimuData data2) throws IOException {
+        Dataset ds = gdal.Open(config.getSourceLanduse(), gdalconstConstants.GA_Update); // 浠ヨ鍐欐ā寮忔墦寮�TIFF鏂囦欢
+
+        Band band = ds.GetRasterBand(1);
+        if (band.GetRasterDataType() != gdalconstConstants.GDT_Byte) {
+            System.err.println("閿欒锛氶潪Byte绫诲瀷鏁版嵁");
+            ds.delete();
+            return;
+        }
+
+        int width = band.getXSize();
+        int height = band.getYSize();
+
+        // 璇诲彇Byte绫诲瀷鏁版嵁
+        byte[] data = new byte[width * height];
+        band.ReadRaster(0, 0, width, height, data);
+
+        // 鏇挎崲0鍊间负8锛堟敞鎰廕ava鐨刡yte鏄湁绗﹀彿鐨勶紝闇�澶勭悊0-255鑼冨洿锛�
+        for (int i = 0; i < data.length; i++) {
+            if ((data[i] & 0xFF) == 0) {  // 鏃犵鍙锋瘮杈�
+                data[i] = (byte) 8;
+            }
+        }
+
+        band.WriteRaster(0, 0, width, height, data); // 鍐欏洖鏁版嵁骞朵繚瀛�
+        band.SetNoDataValue(8.0);  // 璁剧疆鏂癗odata鍊�
+        band.FlushCache(); // 寮哄埗鍐欏叆鏇存敼
+        ds.delete();
+    }
+
     private void createDir(String path) {
         File f = new File(path);
         if (f.exists() && f.isDirectory()) {

--
Gitblit v1.9.3