dcb
2025-06-19 303058307780d49e2ae4c815669f34b866206d86
根据位置查询,不提供时间则返回服务中所有符合条件的列表
已修改3个文件
73 ■■■■ 文件已修改
src/main/java/com/se/nsl/controller/SimuController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/nsl/domain/vo/SimuResult.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/nsl/service/SimuService.java 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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("服务名不能为空");
        }
        if (time != null) {
        SimuResult result = simuService.queryByPosition(lon, lat, time, serviceName);
        if (result == null) {
            return notFound("未查找到相关数据");
        }
        return success(result);
            return success(result, 1);
        } else {
            List<SimuResult> simuResults = simuService.queryByPosition(lon, lat, serviceName);
            if (simuResults.isEmpty()) {
                return notFound("未查找到相关数据");
            }
            return success(simuResults, simuResults.size());
        }
    }
    @ApiOperation(value = "realTime")
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;
    }
}
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("转换前的坐标:x:%s,y:%s", lon, lat));
//        System.out.println(String.format("转换后的坐标:x:%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);
    }
}