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 +++++++++++++++++++++++++++++++++++++
 1 files changed, 37 insertions(+), 0 deletions(-)

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