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 ++++++++++++++++++++ src/main/java/com/se/simu/domain/dto/XYO.java | 43 +++++++++++++++++++++ src/main/resources/application.yml | 3 + src/main/java/com/se/simu/domain/dto/TerrainDto.java | 20 ++++++++++ 4 files changed, 105 insertions(+), 1 deletions(-) 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 e041746..bf2b1d3 100644 --- a/src/main/java/com/se/simu/domain/dto/TerrainDto.java +++ b/src/main/java/com/se/simu/domain/dto/TerrainDto.java @@ -15,9 +15,13 @@ @JSONField(serialize = false) private Map<String, float[]> vals; + @JSONField(serialize = false) + private Map<String, List<XYO>> xyo; + public TerrainDto() { vals = new HashMap<>(); size = new ArrayList<>(); + xyo = new HashMap<>(); } public TerrainDto(List<Integer> sizes) { @@ -25,6 +29,14 @@ for (Integer i : sizes) { size.add(new int[]{i, i}); + + /*List<XYO> list = new ArrayList<>(); + for (int x = 0; x < i; x++) { + for (int y = 0; y < i; y++) { + list.add(new XYO(x, y, i)); + } + } + xyo.put(i + "_" + i, list);*/ } } @@ -51,4 +63,12 @@ public void setVals(Map<String, float[]> vals) { this.vals = vals; } + + public Map<String, List<XYO>> getXyo() { + return xyo; + } + + public void setXyo(Map<String, List<XYO>> xyo) { + this.xyo = xyo; + } } diff --git a/src/main/java/com/se/simu/domain/dto/XYO.java b/src/main/java/com/se/simu/domain/dto/XYO.java new file mode 100644 index 0000000..2af6ad3 --- /dev/null +++ b/src/main/java/com/se/simu/domain/dto/XYO.java @@ -0,0 +1,43 @@ +package com.se.simu.domain.dto; + +@SuppressWarnings("ALL") +public class XYO { + private int x; + + private int y; + + private int offset; + + public XYO() { + } + + public XYO(int x, int y, int width) { + this.x = x; + this.y = y; + this.offset = x + y * width; + } + + public int getX() { + return x; + } + + public void setX(int x) { + this.x = x; + } + + public int getY() { + return y; + } + + public void setY(int y) { + this.y = y; + } + + public int getOffset() { + return offset; + } + + public void setOffset(int offset) { + this.offset = offset; + } +} 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 { diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 7b02ef6..9d9e7b5 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -131,6 +131,7 @@ # 杈撳嚭鏂囦欢 terrainFile: DEM.tif buildingFile: buildings_inside.shp - buildingKey: seid + # buildingKey: seid + buildingKey: KJSFBM waterPath: depth flowPath: velocity -- Gitblit v1.9.3