Parcourir la source

Merge branch 'f-xiaogu' into dev

gushoubang il y a 9 mois
Parent
commit
32235bbb3c

+ 3 - 1
onemap-modules/onemap-spatial/src/main/java/com/onemap/spatial/mapper/ImageMapper.java

@@ -9,5 +9,7 @@ import java.util.List;
 public interface ImageMapper extends BaseMapper<ImageRaster> {
     List<ImageRaster> getRasterDataByWKT(@Param("wkt") String wkt);
 
-    List<Integer> getRids();
+
+
+    String getRasterImage(@Param("wkt") String wkt);
 }

+ 35 - 17
onemap-modules/onemap-spatial/src/main/java/com/onemap/spatial/service/impl/ImageServiceImpl.java

@@ -1,6 +1,5 @@
 package com.onemap.spatial.service.impl;
 
-import com.onemap.spatial.domain.ImageRaster;
 import com.onemap.spatial.mapper.ImageMapper;
 import com.onemap.spatial.service.IImageService;
 import org.geotools.coverage.grid.GridCoverage2D;
@@ -27,15 +26,14 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.opengis.style.ContrastMethod;
 import org.postgresql.util.PGobject;
 import org.springframework.stereotype.Service;
+import org.springframework.util.Base64Utils;
 
 import javax.annotation.Resource;
 import javax.imageio.ImageIO;
 import java.awt.*;
 import java.awt.image.BufferedImage;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
+import java.io.*;
+import java.util.Base64;
 import java.util.List;
 
 /**
@@ -45,24 +43,44 @@ import java.util.List;
 public class ImageServiceImpl implements IImageService {
     @Resource
     private ImageMapper imageMapper;
+
+
+    @Override
+    public String getSensingImage(String wkt) throws Exception {
+        String outputFilePath = "output.png";
+        String base64Image = imageMapper.getRasterImage(wkt);
+        if (base64Image != null) {
+
+            base64Image = base64Image.replaceAll("\n", "");
+            byte[] imageBytes = Base64.getDecoder().decode(base64Image);
+            OutputStream os = new FileOutputStream(outputFilePath);
+            os.write(imageBytes);
+            System.out.println("Image saved as " + outputFilePath);
+        } else {
+            System.out.println("No raster data found for the given polygon.");
+        }
+        return "";
+    }
+
+
     /**
      * 获取遥感图像
      *
      * @param wkt
      * @return
      */
-    @Override
-    public String getSensingImage(String wkt) throws Exception {
-        List<ImageRaster> rasterDataList = imageMapper.getRasterDataByWKT(wkt);
-        List<GridCoverageLayer> layers = new ArrayList<>();
-        for (ImageRaster imageRaster : rasterDataList) {
-            GridCoverage2D coverage = convertToGridCoverage2D(imageRaster.getRast());
-            GridCoverageLayer layer = new GridCoverageLayer(coverage, createDefaultStyle());
-            layers.add(layer);
-        }
-        wktToImage(wkt, layers);
-        return "";
-    }
+    // @Override
+    // public String getSensingImage(String wkt) throws Exception {
+    //     List<ImageRaster> rasterDataList = imageMapper.getRasterDataByWKT(wkt);
+    //     List<GridCoverageLayer> layers = new ArrayList<>();
+    //     for (ImageRaster imageRaster : rasterDataList) {
+    //         GridCoverage2D coverage = convertToGridCoverage2D(imageRaster.getRast());
+    //         GridCoverageLayer layer = new GridCoverageLayer(coverage, createDefaultStyle());
+    //         layers.add(layer);
+    //     }
+    //     wktToImage(wkt, layers);
+    //     return "";
+    // }
 
 
     // 读取栅格数据

+ 13 - 4
onemap-modules/onemap-spatial/src/main/resources/mapper/postgresql/ImageMapper.xml

@@ -13,9 +13,18 @@
         FROM image_16
         WHERE public.ST_Intersects(rast, public.ST_GeomFromText(#{wkt}, 4326))
     </select>
-    <select id="getRids" resultType="Integer">
-        SELECT rid
-        FROM image_16
-        WHERE rid = 0;
+    <select id="getRasterImage" resultType="String">
+        SET
+        postgis.gdal_enabled_drivers = 'ENABLE_ALL';
+        WITH geom AS (SELECT PUBLIC.ST_GeomFromText(
+                                     #{wkt}, 4326
+                             ) AS POLYGON),
+             merged_raster AS (SELECT PUBLIC.ST_Union(rast) AS rast
+                               FROM image15,
+                                    geom
+                               WHERE PUBLIC.ST_Intersects(rast, geom.POLYGON))
+        SELECT encode(PUBLIC.ST_AsPNG(PUBLIC.ST_Clip(rast, 1, geom.POLYGON, TRUE)), 'base64') AS png
+        FROM merged_raster,
+             geom;
     </select>
 </mapper>