From 303058307780d49e2ae4c815669f34b866206d86 Mon Sep 17 00:00:00 2001 From: dcb <xgybdcb@163.com> Date: 星期四, 19 六月 2025 15:42:45 +0800 Subject: [PATCH] 根据位置查询,不提供时间则返回服务中所有符合条件的列表 --- src/main/java/com/se/nsl/controller/SimuController.java | 19 ++++++--- src/main/java/com/se/nsl/service/SimuService.java | 51 +++++++++++++++++++++---- src/main/java/com/se/nsl/domain/vo/SimuResult.java | 9 ++++ 3 files changed, 63 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/se/nsl/controller/SimuController.java b/src/main/java/com/se/nsl/controller/SimuController.java index e7b52b0..c790ff9 100644 --- a/src/main/java/com/se/nsl/controller/SimuController.java +++ b/src/main/java/com/se/nsl/controller/SimuController.java @@ -179,17 +179,22 @@ if (lat > 90 || lat < -90) { return clientError("绾害鑼冨洿搴旇鍦�-90鍒�90"); } - if (time == null) { - return clientError("鏃堕棿鎴充笉鑳戒负绌�"); - } if (serviceName == null || serviceName.trim().isEmpty()) { return clientError("鏈嶅姟鍚嶄笉鑳戒负绌�"); } - SimuResult result = simuService.queryByPosition(lon, lat, time, serviceName); - if (result == null) { - return notFound("鏈煡鎵惧埌鐩稿叧鏁版嵁"); + if (time != null) { + SimuResult result = simuService.queryByPosition(lon, lat, time, serviceName); + if (result == null) { + return notFound("鏈煡鎵惧埌鐩稿叧鏁版嵁"); + } + return success(result, 1); + } else { + List<SimuResult> simuResults = simuService.queryByPosition(lon, lat, serviceName); + if (simuResults.isEmpty()) { + return notFound("鏈煡鎵惧埌鐩稿叧鏁版嵁"); + } + return success(simuResults, simuResults.size()); } - return success(result); } @ApiOperation(value = "realTime") diff --git a/src/main/java/com/se/nsl/domain/vo/SimuResult.java b/src/main/java/com/se/nsl/domain/vo/SimuResult.java index 1046f80..15aaede 100644 --- a/src/main/java/com/se/nsl/domain/vo/SimuResult.java +++ b/src/main/java/com/se/nsl/domain/vo/SimuResult.java @@ -4,6 +4,7 @@ private double depth; private double velocity; + private long time; public double getDepth() { return depth; @@ -20,4 +21,12 @@ public void setVelocity(double velocity) { this.velocity = velocity; } + + public long getTime() { + return time; + } + + public void setTime(long time) { + this.time = time; + } } diff --git a/src/main/java/com/se/nsl/service/SimuService.java b/src/main/java/com/se/nsl/service/SimuService.java index 1c314bc..31b0834 100644 --- a/src/main/java/com/se/nsl/service/SimuService.java +++ b/src/main/java/com/se/nsl/service/SimuService.java @@ -25,10 +25,9 @@ import javax.annotation.Resource; import java.io.File; import java.io.IOException; -import java.time.Instant; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.format.DateTimeFormatter; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -37,6 +36,7 @@ @SuppressWarnings("ALL") public class SimuService { public static final String TIF_EXTSION = ".tif"; + public static final String YYYY_MM_DD_HHMMSS = "yyyyMMddHHmmss"; @Resource SimuMapper simuMapper; @@ -142,6 +142,19 @@ } + public List<SimuResult> queryByPosition(double lon, double lat, String serviceName) { + //transform coordiante from 4326 to 4548 + double[] xy = CoordinateTransformer.transform(4326, 4548, lon, lat); +// System.out.println(String.format("杞崲鍓嶇殑鍧愭爣锛歺:%s,y:%s", lon, lat)); +// System.out.println(String.format("杞崲鍚庣殑鍧愭爣锛歺:%s,y:%s", xy[0], xy[1])); + //read from zarr +// return queryByZarr(xy, time, serviceName); + + //read from tif file + return queryByTif(xy, serviceName); + + } + private SimuResult queryByZarr(double[] xy, long time, String serviceName) { double x = xy[0]; double y = xy[1]; @@ -197,7 +210,31 @@ SimuResult result = new SimuResult(); result.setDepth(depth); result.setVelocity(velocity); + result.setTime(time); return result; + } + + private List<SimuResult> queryByTif(double[] xy, String serviceName) { + double x = xy[0]; + double y = xy[1]; + List<SimuResult> res = new ArrayList<>(); + File inPath = new File(config.getInPath()); + Path depthPath = Paths.get(inPath.getAbsolutePath(), serviceName, "depth"); + File depthDir = depthPath.toFile(); + File[] files = depthDir.listFiles(); + for (File tifFile : files) { + ColumnRow cr = getColumnRow(tifFile, x, y); + if (cr == null) continue; + float depth = readPixelValue(cr.dataset, cr.col, cr.row, 1); + float velocity = calcVelocity(cr.dataset, cr.col, cr.row); + SimuResult result = new SimuResult(); + result.setDepth(depth); + result.setVelocity(velocity); + String time = tifFile.getName().replace(".tif", ""); + result.setTime(TimeFormatUtil.toMillis(time, YYYY_MM_DD_HHMMSS)); + res.add(result); + } + return res; } private static ColumnRow getColumnRow(File tifFile, double x, double y) { @@ -254,11 +291,7 @@ } private String formatTime(long time) { -// Instant instant = Instant.ofEpochMilli(time); -// LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); -// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); -// return localDateTime.format(formatter); - return TimeFormatUtil.formatTime(time, "yyyyMMddHHmmss"); + return TimeFormatUtil.formatTime(time, YYYY_MM_DD_HHMMSS); } } -- Gitblit v1.9.3