1
13693261870
2024-11-15 ab701c1b65894f29459f180573c3951c6c17e939
1
已修改3个文件
61 ■■■■ 文件已修改
src/main/java/com/se/simu/domain/dto/ExtensionDto.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/domain/dto/TerrainDto.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/service/ResultService.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
    }
}
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;
    }
}
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);