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/domain/dto/ExtensionDto.java | 17 ++++++++ src/main/java/com/se/simu/service/ResultService.java | 25 ++++++++---- src/main/java/com/se/simu/domain/dto/TerrainDto.java | 19 ++++++++- 3 files changed, 49 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/se/simu/domain/dto/ExtensionDto.java b/src/main/java/com/se/simu/domain/dto/ExtensionDto.java index 41f855e..b5079c8 100644 --- a/src/main/java/com/se/simu/domain/dto/ExtensionDto.java +++ b/src/main/java/com/se/simu/domain/dto/ExtensionDto.java @@ -1,5 +1,7 @@ package com.se.simu.domain.dto; +import com.alibaba.fastjson.annotation.JSONField; + @SuppressWarnings("ALL") public class ExtensionDto { private double minx; @@ -13,6 +15,9 @@ private double minHeight; private double maxHeight; + + @JSONField(serialize = false) + private Double differ; public ExtensionDto() { } @@ -80,4 +85,16 @@ public void setMaxHeight(double maxHeight) { this.maxHeight = maxHeight; } + + public Double getDiffer() { + return differ; + } + + public void setDiffer(Double differ) { + this.differ = differ; + } + + public void setDiffer() { + this.differ = this.maxHeight - this.minHeight; + } } diff --git a/src/main/java/com/se/simu/domain/dto/TerrainDto.java b/src/main/java/com/se/simu/domain/dto/TerrainDto.java index 474e984..e041746 100644 --- a/src/main/java/com/se/simu/domain/dto/TerrainDto.java +++ b/src/main/java/com/se/simu/domain/dto/TerrainDto.java @@ -3,8 +3,7 @@ import com.alibaba.fastjson.annotation.JSONField; import com.fasterxml.jackson.annotation.JsonIgnore; -import java.util.ArrayList; -import java.util.List; +import java.util.*; @SuppressWarnings("ALL") public class TerrainDto { @@ -13,11 +12,17 @@ @JSONField(serialize = false) private String epsg; + @JSONField(serialize = false) + private Map<String, float[]> vals; + public TerrainDto() { + vals = new HashMap<>(); + size = new ArrayList<>(); } public TerrainDto(List<Integer> sizes) { - size = new ArrayList<>(); + this(); + for (Integer i : sizes) { size.add(new int[]{i, i}); } @@ -38,4 +43,12 @@ public void setEpsg(String epsg) { this.epsg = epsg; } + + public Map<String, float[]> getVals() { + return vals; + } + + public void setVals(Map<String, float[]> vals) { + this.vals = vals; + } } 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