From fe50dd9614060ad8639a3567b0197fe55842afbd Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期一, 28 八月 2023 16:25:34 +0800
Subject: [PATCH] 修改坐标转换功能

---
 src/main/java/com/moon/server/service/data/RasterService.java |   64 +++++++++++++++----------------
 1 files changed, 31 insertions(+), 33 deletions(-)

diff --git a/src/main/java/com/moon/server/service/data/RasterService.java b/src/main/java/com/moon/server/service/data/RasterService.java
index b82a7a1..e16e9ff 100644
--- a/src/main/java/com/moon/server/service/data/RasterService.java
+++ b/src/main/java/com/moon/server/service/data/RasterService.java
@@ -58,22 +58,20 @@
             }
 
             ds = gdal.Open(file, gdalconst.GA_ReadOnly);
-            if (null == ds || ds.getRasterCount() == 0) {
+            if (null == ds || ds.getRasterCount() == 0 || null == ds.GetSpatialRef()) {
                 return;
             }
 
             SpatialReference sr = ds.GetSpatialRef();
-            if (sr != null) {
-                // 鍧愭爣绯荤粺
-                mf.setCoorSys(sr.GetName());
-                if (StaticData.MOON200.equals(mf.getCoorSys())) {
-                    // EPSG缂栫爜
-                    mf.setEpsg("ESRI:" + StaticData.I104903);
-                } else {
-                    String code = sr.GetAuthorityCode(null);
-                    // EPSG缂栫爜
-                    mf.setEpsg(StringHelper.isEmpty(code) ? null : "EPSG:" + code);
-                }
+            // 鍧愭爣绯荤粺
+            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);
             }
 
             // 琛屽垪鏁�
@@ -90,11 +88,11 @@
             mf.sethDatum(null);
 
             // 鍒嗚鲸鐜�
-            double[] transform = new double[6];
-            ds.GetGeoTransform(transform);
-            mf.setResolution(String.format("%f,%f", transform[1], transform[5]));
+            double[] tr = new double[6];
+            ds.GetGeoTransform(tr);
+            mf.setResolution(String.format("%f,%f", tr[1], tr[5]));
 
-            if (!StaticData.EPSGS.contains(mf.getEpsg())) {
+            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;
             }
             Geometry minPoint = getMinPoint(ds);
@@ -164,58 +162,58 @@
         double[] transform = new double[6];
         ds.GetGeoTransform(transform);
 
-        String epsg = ds.GetSpatialRef().GetAuthorityCode(null);
         double xMin = transform[0];
         double yMin = transform[3] - ds.getRasterYSize() * transform[1];
 
         Geometry point = new Geometry(ogr.wkbPoint);
         point.AddPoint(xMin, yMin, 0);
 
-        return transform(ds, point, epsg);
+        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);
 
-        String epsg = ds.GetSpatialRef().GetAuthorityCode(null);
         double xMax = transform[0] + (ds.getRasterXSize() * transform[1]);
         double yMax = transform[3];
 
         Geometry point = new Geometry(ogr.wkbPoint);
         point.AddPoint(xMax, yMax, 0);
 
-        return transform(ds, point, epsg);
+        return transform(ds, point);
     }
 
     /**
      * 鍧愭爣杞崲
      */
-    private Geometry transform(Dataset ds, Geometry point, String epsg) {
+    private Geometry transform(Dataset ds, Geometry point) {
         this.initSpatialReference();
 
-        if (StringHelper.isEmpty(epsg)) {
-            point.AssignSpatialReference(sr104903);
-            return point;
-        }
-        if (String.valueOf(StaticData.I4326).equals(epsg)) {
-            point.AssignSpatialReference(sr4326);
-            return point;
-        }
-        if (String.valueOf(StaticData.I4490).equals(epsg)) {
-            point.AssignSpatialReference(sr4490);
+        point.AssignSpatialReference(ds.GetSpatialRef());
+        if (ds.GetSpatialRef().IsGeographic() > 0) {
             return point;
         }
 
-        point.AssignSpatialReference(ds.GetSpatialRef());
-        if (ds.GetSpatialRef().GetName().contains(StaticData.CGCS2000)) {
+        String srsName = ds.GetSpatialRef().GetName();
+        if (srsName.contains(StaticData.CGCS2000)) {
             point.TransformTo(sr4490);
         } else {
             point.TransformTo(sr4326);
         }
+        point.SwapXY();
 
         return point;
     }

--
Gitblit v1.9.3