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 | 53 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 44 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 2cbe0bf..31b0834 100644 --- a/src/main/java/com/se/nsl/service/SimuService.java +++ b/src/main/java/com/se/nsl/service/SimuService.java @@ -13,6 +13,7 @@ import com.se.nsl.helper.StringHelper; import com.se.nsl.mapper.SimuMapper; import com.se.nsl.utils.CoordinateTransformer; +import com.se.nsl.utils.TimeFormatUtil; import lombok.extern.slf4j.Slf4j; import org.gdal.gdal.Band; import org.gdal.gdal.Dataset; @@ -24,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; @@ -36,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; @@ -141,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]; @@ -190,13 +204,37 @@ ColumnRow cr = getColumnRow(tifFile, x, y); if (cr == null) return null; - System.out.println("col:" + cr.col + " ,row:" + cr.row); +// System.out.println("col:" + cr.col + " ,row:" + cr.row); 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); + 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) { @@ -253,10 +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, YYYY_MM_DD_HHMMSS); } } -- Gitblit v1.9.3