From fadc4c7a796d7d8c40239a951cb00d80cdab778f Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期六, 16 十一月 2024 10:14:55 +0800
Subject: [PATCH] 1

---
 src/main/java/com/se/simu/service/ResultService.java |   40 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 40 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/se/simu/service/ResultService.java b/src/main/java/com/se/simu/service/ResultService.java
index dfdfcd1..a16e96f 100644
--- a/src/main/java/com/se/simu/service/ResultService.java
+++ b/src/main/java/com/se/simu/service/ResultService.java
@@ -374,6 +374,46 @@
         return file.substring(file.lastIndexOf(File.separator) + 1, file.lastIndexOf("."));
     }
 
+    private void water2Png2(ResultDto dto, LayerDto layer, String tif, String png, int width, int height) {
+        Dataset ds = null;
+        try {
+            ds = gdal.Open(tif, gdalconst.GA_ReadOnly);
+            if (null == ds || 0 == ds.getRasterCount()) return;
+
+            Band band = ds.GetRasterBand(1);
+            float[] buffer = new float[width * height];
+            band.ReadRaster(0, 0, width, height, buffer);
+
+            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
+            double differ = layer.getExtension().getDiffer(), maxHeight = layer.getExtension().getMaxHeight(), minHeight = layer.getExtension().getMinHeight();
+            float[] ts = layer.getTerrain().getVals().get(width + "_" + height);
+
+            /*layer.getTerrain().getXyo().get(width + "_" + height).stream().forEach(xyo -> {
+
+            });*/
+            for (XYO xyo : layer.getTerrain().getXyo().get(width + "_" + height)) {
+                float depth = buffer[xyo.getOffset()] + ts[xyo.getOffset()];
+                if (Float.isNaN(depth) || depth < minHeight) continue;
+
+                int r = 0, g, b;
+                if (depth > maxHeight) {
+                    g = b = 255;
+                } else {
+                    int val = (int) ((depth - minHeight) / differ * 65535);
+                    g = val / 256;
+                    b = val % 256;
+                }
+
+                Color color = new Color(r, g, b, 127);
+                image.setRGB(xyo.getX(), xyo.getY(), color.getRGB());
+            }
+
+            savePng(image, png);
+        } finally {
+            if (null != ds) ds.delete();
+        }
+    }
+
     private void water2Png(ResultDto dto, LayerDto layer, String tif, String png, int width, int height) {
         Dataset ds = null;
         try {

--
Gitblit v1.9.3