From ab701c1b65894f29459f180573c3951c6c17e939 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期五, 15 十一月 2024 21:19:15 +0800
Subject: [PATCH] 1

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

diff --git a/src/main/java/com/se/simu/service/ResultService.java b/src/main/java/com/se/simu/service/ResultService.java
index 26e5da8..4741a97 100644
--- a/src/main/java/com/se/simu/service/ResultService.java
+++ b/src/main/java/com/se/simu/service/ResultService.java
@@ -81,8 +81,8 @@
             if (null == ds || 0 == ds.getRasterCount()) return;
 
             setTerrainInfo(ds, layer);
-            setWaterInfo(dto, layer);
             createTerrainPng(dto, ds, layer);
+            setWaterInfo(dto, layer);
         } finally {
             if (null != ds) ds.delete();
         }
@@ -101,7 +101,7 @@
         double[] mm = new double[2];
         band.ComputeRasterMinMax(mm, 0);
         //layer.getTerrain().setHeight(getMinVal(mm[0], 1000), getMaxVal(mm[1], 1000));
-        layer.setExtension(new ExtensionDto(minx, miny, maxx, maxy, getMinVal(mm[0] - 1, 1000), getMaxVal(mm[1] + 1, 1000)));
+        layer.setExtension(new ExtensionDto(minx, miny, maxx, maxy, mm[0], mm[1]));
     }
 
     private double getMinVal(double val, double radix) {
@@ -163,6 +163,7 @@
             float[] buffer = new float[width * height];
             //band.ReadRaster(0, 0, width, height, buffer, width, height, 0, 0);
             band.ReadRaster(0, 0, width, height, buffer);
+            layer.getTerrain().getVals().put(width + "_" + height, buffer);
 
             BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
             double differ = layer.getExtension().getMaxHeight() - layer.getExtension().getMinHeight(), minHeight = layer.getExtension().getMinHeight();
@@ -330,8 +331,10 @@
         });
         //layer.getExtension().setMinHeight(getMinVal(layer.getExtension().getMinHeight() - 1, 1000));
         //layer.getExtension().setMaxHeight(getMaxVal(layer.getExtension().getMaxHeight() + 1, 1000));
-        layer.getWaters().setMinHeight(getMinVal(layer.getWaters().getMinHeight() - 1, 1000));
-        layer.getWaters().setMaxHeight(getMaxVal(layer.getWaters().getMaxHeight() + 1, 1000));
+        //layer.getWaters().setMinHeight(getMinVal(layer.getWaters().getMinHeight() - 1, 1000));
+        //layer.getWaters().setMaxHeight(getMaxVal(layer.getWaters().getMaxHeight() + 1, 1000));
+        layer.getExtension().setMaxHeight(layer.getExtension().getMinHeight() + layer.getWaters().getMaxHeight());
+        layer.getExtension().setDiffer();
     }
 
     private void processWaters(ResultDto dto, List<String> files, LayerDto layer) {
@@ -344,7 +347,7 @@
 
                 createWaterPng(dto, ds, layer, layer.getWaters().getData().get(i));
                 copyWaterTif(dto, ds, layer.getWaters().getData().get(i));
-                createVectors(dto, ds, layer, layer.getWaters().getData().get(i));
+                //createVectors(dto, ds, layer, layer.getWaters().getData().get(i));
             } finally {
                 if (null != ds) ds.delete();
             }
@@ -383,12 +386,15 @@
             double[] transform = ds.GetGeoTransform();
 
             BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
-            double differ = layer.getWaters().getMaxHeight() - layer.getWaters().getMinHeight(), minHeight = layer.getWaters().getMinHeight();
+            //double differ = layer.getWaters().getMaxHeight() - layer.getWaters().getMinHeight(), minHeight = layer.getWaters().getMinHeight();
+            double differ = layer.getExtension().getDiffer(), maxHeight=layer.getExtension().getMaxHeight(), minHeight = layer.getExtension().getMinHeight();
+            float[] ts = layer.getTerrain().getVals().get(width + "_" + height);
             for (int x = 0; x < width; x++) {
                 for (int y = 0; y < height; y++) {
                     int offset = x + y * width;
+                    float depth = buffer[offset] + ts[offset];
                     //if (Float.isNaN(buffer[offset]) || buffer[offset] < -999 || buffer[offset] < minHeight) continue;
-                    if (Float.isNaN(buffer[offset]) || buffer[offset] <= 0 || buffer[offset] < minHeight) continue;
+                    if (Float.isNaN(depth) || depth < minHeight) continue;
 
                     //double X = transform[0] + x * transform[1] + y * transform[2];
                     //double Y = transform[3] + x * transform[4] + y * transform[5];
@@ -396,10 +402,10 @@
                     //if (null != building) continue;
 
                     int r = 0, g, b;
-                    if (buffer[offset] - layer.getWaters().getMaxHeight() > 0) {
+                    if (depth > maxHeight) {
                         g = b = 255;
                     } else {
-                        int val = (int) ((buffer[offset] - minHeight) / differ * 65535);
+                        int val = (int) ((depth - minHeight) / differ * 65535);
                         g = val / 256;
                         b = val % 256;
                     }
@@ -695,6 +701,7 @@
     private void copeLayerJson(ResultDto dto, LayerDto layer) throws IOException {
         layer.getWaters().setFiles(null);
         layer.getTerrain().setEpsg(null);
+        layer.getExtension().setDiffer(null);
 
         String json = JSON.toJSONString(layer);
         // String json = JSONUtil.toJsonPrettyStr(layer);

--
Gitblit v1.9.3