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/service/SimuService.java | 51 ++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 42 insertions(+), 9 deletions(-) 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