From 9c2c0f00e21b26ac6e659d5c9726766242005c2f Mon Sep 17 00:00:00 2001 From: SundaySee <xgybdcb@163.com> Date: 星期四, 15 五月 2025 17:48:07 +0800 Subject: [PATCH] 增加4548到4326坐标转换,通过水深tif设置layer.json中的范围 --- src/main/java/com/se/nsl/service/TestService.java | 37 +++++++++++++++++++++++++++++++++++++ src/main/java/com/se/nsl/helper/ComHelper.java | 8 ++++---- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/se/nsl/helper/ComHelper.java b/src/main/java/com/se/nsl/helper/ComHelper.java index 77fed45..417ee73 100644 --- a/src/main/java/com/se/nsl/helper/ComHelper.java +++ b/src/main/java/com/se/nsl/helper/ComHelper.java @@ -72,10 +72,10 @@ public static void Resample2(Dataset ds, String dest, int width, int height, LayerDto layer) { Vector<String> vector = new Vector<>(); - //vector.add("-s_srs"); - //vector.add("EPSG:" + 4548); - //vector.add("-t_srs"); - //vector.add("EPSG:" + 4326); + vector.add("-s_srs"); + vector.add("EPSG:" + 4548); + vector.add("-t_srs"); + vector.add("EPSG:" + 4326); vector.add("-ts"); vector.add("" + width); vector.add("" + height); diff --git a/src/main/java/com/se/nsl/service/TestService.java b/src/main/java/com/se/nsl/service/TestService.java index a6f1079..5953381 100644 --- a/src/main/java/com/se/nsl/service/TestService.java +++ b/src/main/java/com/se/nsl/service/TestService.java @@ -222,6 +222,10 @@ public void setWaterHeight(LayerDto layer, List<String> files) { int c = files.size(), step = files.size() / 10; if (step < 1) step = 1; + double minx = Double.MAX_VALUE; + double miny = Double.MAX_VALUE; + double maxx = Double.MIN_VALUE; + double maxy = Double.MIN_VALUE; for (int i = 0; i < c; i += step) { Dataset ds = null; try { @@ -231,6 +235,16 @@ double[] mm = new double[2]; ds.GetRasterBand(1).ComputeRasterMinMax(mm, 0); layer.getWaters().setHeight(mm[0], mm[1]); + + double[] bbox = readTifBbox(ds); + double minLon = bbox[0]; + double maxLon = bbox[1]; + double minLat = bbox[2]; + double maxLat = bbox[3]; + if (minx > minLon) minx = minLon; + if (miny > minLat) miny = minLat; + if (maxx < maxLon) maxx = maxLon; + if (maxy < maxLat) maxy = maxLat; } finally { if (null != ds) ds.delete(); } @@ -242,6 +256,29 @@ layer.getExtension().setDiffer(); } + private double[] readTifBbox(Dataset ds) { + // 1. 鑾峰彇鍥惧儚灏哄 + int width = ds.getRasterXSize(); + int height = ds.getRasterYSize(); + + // 2. 鑾峰彇GeoTransform鍙傛暟 + double[] geoTransform = new double[6]; + ds.GetGeoTransform(geoTransform); + + // 3. 瑙f瀽GeoTransform鍙傛暟锛堢粡绾害鍧愭爣锛� + double originLon = geoTransform[0]; // 宸︿笂瑙掔粡搴� + double originLat = geoTransform[3]; // 宸︿笂瑙掔含搴� + double pixelWidth = geoTransform[1]; // 缁忓害鏂瑰悜鍒嗚鲸鐜囷紙搴�/鍍忕礌锛� + double pixelHeight = geoTransform[5]; // 绾害鏂瑰悜鍒嗚鲸鐜囷紙搴�/鍍忕礌锛岄�氬父涓鸿礋锛� + + // 4. 璁$畻鍥涜嚦鑼冨洿锛堢粡绾害锛� + double minLon = Math.min(originLon, originLon + width * pixelWidth); + double maxLon = Math.max(originLon, originLon + width * pixelWidth); + double minLat = Math.min(originLat, originLat + height * pixelHeight); + double maxLat = Math.max(originLat, originLat + height * pixelHeight); + return new double[] {minLon, maxLon, minLat, maxLat}; + } + public void processWaters(ResultDto dto, List<String> files, LayerDto layer) { for (int i = 0, c = files.size(); i < c; i++) { Dataset ds = null; -- Gitblit v1.9.3