From 796b44ea813a1133beae4f3a67f1c0263510c0c7 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期日, 17 十一月 2024 09:45:07 +0800
Subject: [PATCH] 1

---
 src/main/java/com/moon/server/service/data/ReadRasterService.java |   91 +++++++++++++--------------------------------
 1 files changed, 26 insertions(+), 65 deletions(-)

diff --git a/src/main/java/com/moon/server/service/data/ReadRasterService.java b/src/main/java/com/moon/server/service/data/ReadRasterService.java
index c1036f8..8ea5206 100644
--- a/src/main/java/com/moon/server/service/data/ReadRasterService.java
+++ b/src/main/java/com/moon/server/service/data/ReadRasterService.java
@@ -2,6 +2,7 @@
 
 import com.moon.server.entity.all.StaticData;
 import com.moon.server.entity.data.MetaFileEntity;
+import com.moon.server.helper.GeoHelper;
 import com.moon.server.helper.StringHelper;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -15,40 +16,14 @@
 import org.springframework.stereotype.Service;
 
 import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
 
-/**
- * 璇诲彇鏍呮牸鏈嶅姟
- * @author WWW
- * @date 2023-08-25
- */
 @Service
+@SuppressWarnings("ALL")
 public class ReadRasterService {
-    private SpatialReference sr4326;
-
-    private SpatialReference sr4490;
-
-    private SpatialReference sr104903;
-
     private final static Log log = LogFactory.getLog(ReadRasterService.class);
 
-    /**
-     * 鍒濆鍖栫┖闂村紩鐢�
-     */
-    private void initSpatialReference() {
-        if (null == sr4326) {
-            sr4326 = new SpatialReference();
-            sr4326.ImportFromEPSG(StaticData.I4326);
-
-            sr4490 = new SpatialReference();
-            sr4490.ImportFromEPSG(StaticData.I4490);
-
-            sr104903 = new SpatialReference(StaticData.MOON_2000_WKT);
-        }
-    }
-
-    /**
-     * 璇诲彇鏍呮牸淇℃伅
-     */
     public void readRasterInfo(MetaFileEntity mf, String file) {
         Dataset ds = null;
         try {
@@ -63,34 +38,26 @@
             }
 
             SpatialReference sr = ds.GetSpatialRef();
-            // 鍧愭爣绯荤粺
             mf.setCoorSys(sr.GetName());
             if (StaticData.MOON200.equals(mf.getCoorSys())) {
-                // EPSG缂栫爜
                 mf.setEpsg("ESRI:" + StaticData.I104903);
             } else {
-                // EPSG缂栫爜锛歅ROJCS銆丟EOGCS銆丟EOGCS|UNIT 鎴� NULL
                 String code = sr.GetAuthorityCode(null);
                 mf.setEpsg(StringHelper.isEmpty(code) ? null : "EPSG:" + code);
             }
 
-            // 琛屽垪鏁�
             mf.setGridsize(String.format("%d,%d", ds.getRasterXSize(), ds.getRasterYSize()));
-            // 娉㈡鏁�
             mf.setBands(String.valueOf(ds.getRasterCount()));
-            // 鏁版嵁绫诲瀷
             int dataType = ds.GetRasterBand(1).GetRasterDataType();
             mf.setBandType(getDataType(dataType));
-            // 鏁版嵁棰滆壊琛�
             ColorTable colorTable = ds.GetRasterBand(1).GetRasterColorTable();
             mf.setCt(null == colorTable ? null : colorTable.toString());
-            // 楂樼▼鍩哄噯
             mf.sethDatum(null);
+            setMinAndMax(ds, mf);
 
-            // 鍒嗚鲸鐜�
             double[] tr = new double[6];
             ds.GetGeoTransform(tr);
-            mf.setResolution(String.format("%f,%f", tr[1], tr[5]));
+            mf.setResolution(String.format("%f,%f", tr[1], Math.abs(tr[5])));
 
             if (tr[StaticData.I0] == 0.0 && tr[StaticData.I1] == 1.0 && tr[StaticData.I2] == 0.0 && tr[StaticData.I3] == 0.0 && tr[StaticData.I4] == 0.0 && tr[StaticData.I5] == 1.0) {
                 return;
@@ -102,7 +69,6 @@
             double xmax = maxPoint.GetX(0);
             double ymax = maxPoint.GetY(0);
 
-            // 鍥涜嚦鑼冨洿
             String geom = String.format("ST_GeomFromText('POLYGON ((%f %f,%f %f,%f %f,%f %f,%f %f))')", xmin, ymax, xmax, ymax, xmax, ymin, xmin, ymin, xmin, ymax);
             mf.setGeom(geom);
         } catch (Exception ex) {
@@ -114,9 +80,6 @@
         }
     }
 
-    /**
-     * 鑾峰彇鏁版嵁绫诲瀷
-     */
     private String getDataType(int dataType) {
         if (dataType == gdalconst.GDT_Byte) {
             return "GDT_Byte";
@@ -155,9 +118,6 @@
         return null;
     }
 
-    /**
-     * 鑾峰彇Dataset鐨勬渶灏忕偣
-     */
     private Geometry getMinPoint(Dataset ds) {
         double[] transform = new double[6];
         ds.GetGeoTransform(transform);
@@ -171,19 +131,7 @@
         return transform(ds, point);
     }
 
-    /**
-     * 鑾峰彇Dataset鐨勬渶澶х偣
-     */
     private Geometry getMaxPoint(Dataset ds) {
-        /**
-         * transform[0] 宸︿笂瑙抶鍧愭爣
-         * transform[1] 涓滆タ鏂瑰悜鍒嗚鲸鐜�
-         * transform[2] 鏃嬭浆瑙掑害, 0琛ㄧず鍥惧儚 "鍖楁柟鏈濅笂"
-         *
-         * transform[3] 宸︿笂瑙抷鍧愭爣
-         * transform[4] 鏃嬭浆瑙掑害, 0琛ㄧず鍥惧儚 "鍖楁柟鏈濅笂"
-         * transform[5] 鍗楀寳鏂瑰悜鍒嗚鲸鐜�
-         */
         double[] transform = new double[6];
         ds.GetGeoTransform(transform);
 
@@ -196,12 +144,7 @@
         return transform(ds, point);
     }
 
-    /**
-     * 鍧愭爣杞崲
-     */
     private Geometry transform(Dataset ds, Geometry point) {
-        this.initSpatialReference();
-
         point.AssignSpatialReference(ds.GetSpatialRef());
         if (ds.GetSpatialRef().IsGeographic() > 0) {
             return point;
@@ -209,12 +152,30 @@
 
         String srsName = ds.GetSpatialRef().GetName();
         if (srsName.contains(StaticData.CGCS2000)) {
-            point.TransformTo(sr4490);
+            point.TransformTo(GeoHelper.sr4490);
         } else {
-            point.TransformTo(sr4326);
+            point.TransformTo(GeoHelper.sr4326);
         }
         point.SwapXY();
 
         return point;
     }
+
+    private void setMinAndMax(Dataset ds, MetaFileEntity mf) {
+        List<Double> minList = new ArrayList<>();
+        List<Double> maxList = new ArrayList<>();
+
+        for (int i = 1; i <= ds.getRasterCount(); i++) {
+            Double[] min = new Double[1];
+            Double[] max = new Double[1];
+            ds.GetRasterBand(i).GetMinimum(min);
+            ds.GetRasterBand(i).GetMaximum(max);
+
+            minList.add(min[0]);
+            maxList.add(max[0]);
+        }
+
+        mf.setMin(StringHelper.join(minList, ","));
+        mf.setMax(StringHelper.join(maxList, ","));
+    }
 }

--
Gitblit v1.9.3