Quellcode durchsuchen

高程接口支持全部字段查询

gushoubang vor 10 Monaten
Ursprung
Commit
841860df2c

+ 3 - 1
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/raster/RasterMapper.java

@@ -11,6 +11,8 @@ public interface RasterMapper {
 
     Double getAveValue(@Param("tableName") String tableName, @Param("geomWkt") String geomWkt);
 
+    Map getAllValue(@Param("tableName") String tableName, @Param("geomWkt") String geomWkt);
+
     /**
      * 计算给定区域,指定高程以上土方的体积
      * tableName
@@ -33,5 +35,5 @@ public interface RasterMapper {
      * geomWkt
      * height
      */
-    String getDemRing(Map<String,Object> map);
+    String getDemRing(Map<String, Object> map);
 }

+ 3 - 2
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/IRasterService.java

@@ -8,7 +8,8 @@ import java.util.Map;
  * 单波段栅格数据服务
  */
 public interface IRasterService {
-    Double getValue(String tableName, String geomWkt, String type);
+    Map<String, Double>
+    getValue(String tableName, String geomWkt, String type);
 
-    Map<String,Object> getCutFill(CutFillVo cutFillVo,String tableName);
+    Map<String, Object> getCutFill(CutFillVo cutFillVo, String tableName);
 }

+ 11 - 6
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/RasterServiceImpl.java

@@ -25,20 +25,25 @@ public class RasterServiceImpl implements IRasterService {
     private CreateUtilsDBMapper createUtilsDBMapper;
 
     @Override
-    public Double getValue(String tableName, String geomWkt, String type) {
+    public Map<String, Double> getValue(String tableName, String geomWkt, String type) {
         if (!geomWkt.contains(";")) {
             geomWkt = "SRID=4326;" + geomWkt;
         }
 
-        Double value = (double) 0;
+        Map<String, Double> mapRes = new HashMap<>();
         if (type.equals("min")) {
-            value = rasterMapper.getMinValue(tableName, geomWkt);
+            Double min = rasterMapper.getMinValue(tableName, geomWkt);
+            mapRes.put("min", min);
         } else if (type.equals("max")) {
-            value = rasterMapper.getMaxValue(tableName, geomWkt);
+            Double max = rasterMapper.getMaxValue(tableName, geomWkt);
+            mapRes.put("max", max);
         } else if (type.equals("ave")) {
-            value = rasterMapper.getAveValue(tableName, geomWkt);
+            Double ave = rasterMapper.getAveValue(tableName, geomWkt);
+            mapRes.put("ave", ave);
+        } else {
+            mapRes = rasterMapper.getAllValue(tableName, geomWkt);
         }
-        return value;
+        return mapRes;
     }
 
     @Override

+ 11 - 0
onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/raster/RasterMapper.xml

@@ -33,6 +33,17 @@
         WHERE (gv).val IS NOT NULL;
     </select>
 
+    <select id="getAllValue" resultType="map">
+        WITH poly AS (SELECT public.ST_GeomFromEWKT(#{geomWkt}) AS geom)
+        SELECT MIN((gv).val) AS min, MAX((gv).val) AS max, AVG((gv).val) AS avg
+        FROM (SELECT public.st_clip(rast, 1, geom, false) AS clipped_rast
+              FROM ${tableName},
+                   poly
+              WHERE public.st_intersects(rast, geom)) AS clipped,
+             LATERAL public.st_pixelaspoints(clipped_rast) AS gv
+        WHERE (gv).val IS NOT NULL;
+    </select>
+
     <select id="getHilltopVolume" parameterType="map" resultType="Double">
         WITH geom AS (SELECT PUBLIC.st_transform(public.ST_GeomFromEWKT(#{geomWkt}), 3857) AS geom),
              pixel AS (SELECT (PUBLIC.ST_MetaData(rast)).scalex AS pixel_width