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