From a7766f8c1619fde0ea8233fd078205031bab54ef Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期二, 16 七月 2024 17:13:25 +0800
Subject: [PATCH] 创建金字塔

---
 src/main/java/com/se/simu/SimuApplication.java      |    9 ++++
 src/main/java/com/se/simu/helper/GdalHelper.java    |   42 +++++++++++++++++++--
 src/main/java/com/se/simu/service/WaterService.java |    7 +++
 pom.xml                                             |    3 +
 4 files changed, 55 insertions(+), 6 deletions(-)

diff --git a/pom.xml b/pom.xml
index 70e64f7..2f3583f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -117,7 +117,8 @@
         <dependency>
             <groupId>org.gdal</groupId>
             <artifactId>gdal</artifactId>
-            <version>3.9.0</version>
+            <!--<version>3.9.0</version>-->
+            <version>3.2.0</version>
         </dependency>
     </dependencies>
 
diff --git a/src/main/java/com/se/simu/SimuApplication.java b/src/main/java/com/se/simu/SimuApplication.java
index 0ce7a55..3d99701 100644
--- a/src/main/java/com/se/simu/SimuApplication.java
+++ b/src/main/java/com/se/simu/SimuApplication.java
@@ -3,6 +3,8 @@
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
 
 /**
  * 鍚姩绋嬪簭绫�
@@ -11,8 +13,13 @@
  * @date 2024-07-16
  */
 @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}, scanBasePackages = {"com.se.simu"})
-public class SimuApplication {
+public class SimuApplication  extends SpringBootServletInitializer {
 	public static void main(String[] args) {
 		SpringApplication.run(SimuApplication.class, args);
 	}
+
+	@Override
+	protected SpringApplicationBuilder configure(SpringApplicationBuilder springApplicationBuilder) {
+		return springApplicationBuilder.sources(SimuApplication.class);
+	}
 }
diff --git a/src/main/java/com/se/simu/helper/GdalHelper.java b/src/main/java/com/se/simu/helper/GdalHelper.java
index 5de0452..5c03481 100644
--- a/src/main/java/com/se/simu/helper/GdalHelper.java
+++ b/src/main/java/com/se/simu/helper/GdalHelper.java
@@ -1,7 +1,11 @@
 package com.se.simu.helper;
 
 import lombok.extern.slf4j.Slf4j;
+import org.gdal.gdal.Band;
+import org.gdal.gdal.Dataset;
 import org.gdal.gdal.gdal;
+import org.gdal.gdalconst.gdalconst;
+import org.gdal.gdalconst.gdalconstConstants;
 import org.gdal.ogr.ogr;
 
 import java.io.File;
@@ -15,6 +19,9 @@
 @Slf4j
 @SuppressWarnings("ALL")
 public class GdalHelper {
+    /**
+     * 鍒濆鍖�
+     */
     public static void init(String gdalPath) {
         // 鏀寔涓枃璺緞
         gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
@@ -25,10 +32,10 @@
 
         // 閰嶇疆鐜鍙橀噺
         if (!StringHelper.isEmpty(gdalPath)) {
-            gdal.SetConfigOption("GDAL_DATA", gdalPath + File.separator + "gdal-data");
-            gdal.SetConfigOption("PROJ_LIB", gdalPath + File.separator + "proj7" + File.separator + "share");
-            //System.setProperty("PROJ_LIB", gdalPath + File.separator + "proj7" + File.separator + "share")
-            gdal.SetConfigOption("GDAL_DRIVER_PATH", gdalPath + File.separator + "gdalplugins");
+            gdal.SetConfigOption("GDAL_DATA", gdalPath + "/gdal-data");
+            gdal.SetConfigOption("PROJ_LIB", gdalPath + "/proj7/share");
+            //System.setProperty("PROJ_LIB", gdalPath + "/proj7/share")
+            gdal.SetConfigOption("GDAL_DRIVER_PATH", gdalPath + "/gdalplugins");
 
             String path = System.getenv("PATH");
             if (!path.contains(gdalPath)) {
@@ -40,4 +47,31 @@
         gdal.AllRegister();
         ogr.RegisterAll();
     }
+
+    /**
+     * 鍒涘缓閲戝瓧濉�
+     */
+    public static void createPyramid(String file) {
+        try {
+            File f = new File(file);
+            if (!f.exists() || f.isDirectory()) {
+                return;
+            }
+
+            Dataset ds = gdal.Open(file, gdalconst.GA_ReadOnly);
+            if (null == ds) {
+                return;
+            }
+
+            // 鍒涘缓閲戝瓧濉�
+            Band band = ds.GetRasterBand(1);
+            if (0 == band.GetOverviewCount()) {
+                ds.BuildOverviews("nearest", new int[]{2, 4, 6, 8, 16}, null);
+            }
+
+            ds.delete();
+        } catch (Exception ex) {
+            log.error(ex.getMessage(), ex);
+        }
+    }
 }
diff --git a/src/main/java/com/se/simu/service/WaterService.java b/src/main/java/com/se/simu/service/WaterService.java
index 04e408c..eceeb3b 100644
--- a/src/main/java/com/se/simu/service/WaterService.java
+++ b/src/main/java/com/se/simu/service/WaterService.java
@@ -1,6 +1,7 @@
 package com.se.simu.service;
 
 import com.se.simu.domain.LayerVo;
+import com.se.simu.helper.GdalHelper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -28,6 +29,12 @@
     String dataPath;
 
     public LayerVo getLayer(String serviceName) {
+        String file = "D:/simu/test/DEM_M.tif";
+        GdalHelper.createPyramid(file);
+
+        String file2 = "D:/simu/test/DOM_M.tif";
+        GdalHelper.createPyramid(file2);
+
         LayerVo layer = new LayerVo();
         layer.setVer(ver);
         layer.setDuration(new LayerVo.Duration(1719812810225L, 1719812810225L));

--
Gitblit v1.9.3