From 59b432c883011119649c283cc9d4c1d357599802 Mon Sep 17 00:00:00 2001 From: dcb <xgybdcb@163.com> Date: 星期一, 30 六月 2025 15:13:56 +0800 Subject: [PATCH] 对于没有不能获取到数据的雨量计,使用其他雨量计数据填充 --- src/main/java/com/se/nsl/service/SimuService.java | 138 +++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 130 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/se/nsl/service/SimuService.java b/src/main/java/com/se/nsl/service/SimuService.java index 430b427..b98d3ee 100644 --- a/src/main/java/com/se/nsl/service/SimuService.java +++ b/src/main/java/com/se/nsl/service/SimuService.java @@ -4,22 +4,41 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bc.zarr.ZarrArray; +import com.bc.zarr.ZarrGroup; +import com.se.nsl.config.PropertiesConfig; import com.se.nsl.domain.po.Simu; +import com.se.nsl.domain.vo.SimuResult; import com.se.nsl.domain.vo.SimuVo; import com.se.nsl.helper.StringHelper; import com.se.nsl.mapper.SimuMapper; +import com.se.nsl.utils.CoordinateTransformer; +import com.se.nsl.utils.SolverTifUtil; +import com.se.nsl.utils.TimeFormatUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import ucar.ma2.InvalidRangeException; import javax.annotation.Resource; +import java.io.File; +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; @Slf4j @Service @SuppressWarnings("ALL") public class SimuService { + public static final String TIF_EXTSION = ".tif"; + public static final String YYYY_MM_DD_HH_MM_SS = "yyyyMMddHHmmss"; @Resource SimuMapper simuMapper; + + @Resource + PropertiesConfig config; /** * 鍒嗛〉鏌ヨ鎺ㄦ紨妯℃嫙 @@ -34,9 +53,7 @@ Page<Simu> page = new Page<>(pageNum, pageSize); page.addOrder(OrderItem.desc("id")); - IPage<Simu> paged = simuMapper.selectPage(page, wrapper); - - return paged; + return simuMapper.selectPage(page, wrapper); } private QueryWrapper<Simu> getPageWrapper(SimuVo vo, int pageNum, int pageSize) { @@ -70,7 +87,7 @@ * @return 鍒犻櫎鎴愬姛鐨勮褰曟暟 */ public int deleteByIds(List<Integer> ids) { - return simuMapper.deleteByIds(ids); + return simuMapper.deleteBatchIds(ids); } /** @@ -79,8 +96,22 @@ * @param Simu 鎺ㄦ紨妯℃嫙瀵硅薄 * @return 鏂板鎴愬姛鐨勮褰曟暟 */ - public int insert(Simu Simu) { - return simuMapper.insert(Simu); + public int insert(Simu simu) { + return simuMapper.insert(simu); + } + + public int inserts(List<Simu> list) { + return simuMapper.inserts(list); + } + + /** + * 鏍规嵁ID鏌ヨ + * + * @param id ID + * @return Simu + */ + public Simu selectById(Integer id) { + return simuMapper.selectById(id); } /** @@ -89,7 +120,98 @@ * @param Simu 鎺ㄦ紨妯℃嫙瀵硅薄 * @return 淇敼鎴愬姛鐨勮褰曟暟 */ - public int updateById(Simu Simu) { - return simuMapper.updateById(Simu); + public int updateById(Simu simu) { + return simuMapper.updates(Arrays.asList(simu)); } + + public SimuResult queryByPosition(double lon, double lat, long time, 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, time, serviceName); + + } + + public List<SimuResult> queryByPosition(double lon, double lat, String serviceName) { + //transform coordiante from 4326 to 4548 + double[] xy = CoordinateTransformer.transform(4326, config.getEpsg(), 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]; + String prefix = formatTime(time); + File inPath = new File(config.getInPath()); +// File tifDir = new File(inPath, serviceName + File.separator + "depth"); +// int index = 0; +// File[] files = tifDir.listFiles(); +// for (File file : files) { +// String name = file.getName(); +// if (!name.endsWith(TIF_EXTSION)) continue; +// if (name.equals(prefix + TIF_EXTSION)) { +// break; +// } +// index++; +// } + File dem = new File(inPath, serviceName + File.separator + "DEM.tif"); + //TODO + + File zarr = new File(inPath, serviceName + File.separator + "result.zarr"); + try { + ZarrGroup group = ZarrGroup.open(zarr.toPath()); + ZarrArray depthArray = group.openArray("depth"); + int[] shape = new int[] {60, 637, 351}; +// int[] offset = new int[]{210, 384}; + float[] depth = (float[]) depthArray.read(shape); + System.out.println("depth:" + depth.length); + } catch (IOException | InvalidRangeException e) { + throw new RuntimeException(e); + } + return null; + } + + private SimuResult queryByTif(double[] xy, long time, String serviceName) { + File inPath = new File(config.getInPath()); + String prefix = formatTime(time); + String child = serviceName + File.separator + "depth" + File.separator + prefix + TIF_EXTSION; + File tifFile = new File(inPath, child); + if (!tifFile.exists()) { + return null; + } + return SolverTifUtil.getSimuResult(tifFile, xy); + } + + private List<SimuResult> queryByTif(double[] xy, String serviceName) { + 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) { + String name = tifFile.getName(); + if (!name.endsWith(TIF_EXTSION)) continue; + SimuResult result = SolverTifUtil.getSimuResult(tifFile, xy); + if (result == null) continue; + res.add(result); + } + return res; + } + + private String formatTime(long time) { + return TimeFormatUtil.formatTime(time, YYYY_MM_DD_HH_MM_SS); + } + } -- Gitblit v1.9.3