Explorar el Código

Merge branch 'f-xiaogu' into dev

gushoubang hace 10 meses
padre
commit
f91ac07c86

+ 2 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/domain/vo/CutFillVo.java

@@ -6,4 +6,6 @@ import lombok.Data;
 public class CutFillVo {
     String geom;
     Double height;
+    // 缓冲区距离
+    Float buffer;
 }

+ 0 - 1
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/vector/AnalyseUtilsDBMapper.java

@@ -8,7 +8,6 @@ import java.util.List;
 
 @Mapper
 public interface AnalyseUtilsDBMapper {
-
     /**
      * table中与wkt数据是否有交集
      *

+ 0 - 1
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/vector/CreateUtilsDBMapper.java

@@ -1,6 +1,5 @@
 package com.onemap.analyse.mapper.vector;
 
-import com.onemap.common.datasource.annotation.Master;
 import com.onemap.common.datasource.annotation.Slave;
 import org.apache.ibatis.annotations.Param;
 

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

@@ -3,6 +3,7 @@ package com.onemap.analyse.service.impl;
 import com.onemap.analyse.domain.vo.CutFillVo;
 import com.onemap.analyse.mapper.raster.RasterMapper;
 import com.onemap.analyse.mapper.vector.AnalyseUtilsDBMapper;
+import com.onemap.analyse.mapper.vector.CreateUtilsDBMapper;
 import com.onemap.analyse.service.IRasterService;
 import org.springframework.stereotype.Service;
 
@@ -20,9 +21,15 @@ public class RasterServiceImpl implements IRasterService {
 
     @Resource
     private AnalyseUtilsDBMapper analyseUtilsDBMapper;
+    @Resource
+    private CreateUtilsDBMapper createUtilsDBMapper;
 
     @Override
     public Double getValue(String tableName, String geomWkt, String type) {
+        if (!geomWkt.contains(";")) {
+            geomWkt = "SRID=4326;" + geomWkt;
+        }
+
         Double value = (double) 0;
         if (type.equals("min")) {
             value = rasterMapper.getMinValue(tableName, geomWkt);
@@ -36,18 +43,29 @@ public class RasterServiceImpl implements IRasterService {
 
     @Override
     public Map<String, Object> getCutFill(CutFillVo cutFillVo, String tableName) {
+        String useGeom = cutFillVo.getGeom();
+        if (!useGeom.contains(";")) {
+            useGeom = "SRID=4326;" + useGeom;
+        }
+
+        // 缓冲区距离,单位米,目的是为了和周边高度缓和
+        if (cutFillVo.getBuffer() != null) {
+            useGeom = createUtilsDBMapper.bufferEwkt(useGeom, cutFillVo.getBuffer());
+        }
+
+        String bottomGeom = cutFillVo.getGeom();
 
         Double midHeight = cutFillVo.getHeight();
         if (midHeight == null) {
-            midHeight = rasterMapper.getAveValue(tableName, cutFillVo.getGeom());
+            midHeight = rasterMapper.getAveValue(tableName, useGeom);
         }
-        Double maxHeight = rasterMapper.getMaxValue(tableName, cutFillVo.getGeom());
-        Double minHeight = rasterMapper.getMinValue(tableName, cutFillVo.getGeom());
+        Double maxHeight = rasterMapper.getMaxValue(tableName, useGeom);
+        Double minHeight = rasterMapper.getMinValue(tableName, useGeom);
 
         // 给定高程填平需要的土方体积
         Map<String, Object> heightMap = new HashMap<>();
         heightMap.put("tableName", tableName);
-        heightMap.put("geomWkt", cutFillVo.getGeom());
+        heightMap.put("geomWkt", useGeom);
         heightMap.put("height", midHeight);
 
         // 计算给定区域,指定高程填平需要的土方体积
@@ -58,7 +76,7 @@ public class RasterServiceImpl implements IRasterService {
 
         Map<String, Object> ringMap = new HashMap<>();
         ringMap.put("tableName", tableName);
-        ringMap.put("geomWkt", cutFillVo.getGeom());
+        ringMap.put("geomWkt", useGeom);
 
         // ringMap.put("height", (midHeight + maxHeight) / 2);
         // String midUpGeom = rasterMapper.getDemRing(ringMap);
@@ -69,7 +87,6 @@ public class RasterServiceImpl implements IRasterService {
         // ringMap.put("height", (midHeight + minHeight) / 2);
         // String midDownGeom = rasterMapper.getDemRing(ringMap);
 
-        String bottomGeom = cutFillVo.getGeom();
 
         Map<String, Object> resMap = new HashMap<>();
 

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

@@ -3,7 +3,7 @@
 
 <mapper namespace="com.onemap.analyse.mapper.raster.RasterMapper">
     <select id="getAveValue" resultType="Double">
-        WITH poly AS (SELECT PUBLIC.st_transform(public.st_geomfromtext(#{geomWkt}, 4326), 3857) AS geom)
+        WITH poly AS (SELECT public.ST_GeomFromEWKT(#{geomWkt}) AS geom)
         SELECT AVG((gv).val) AS avg_dsm
         FROM (SELECT public.st_clip(rast, 1, geom, false) AS clipped_rast
               FROM ${tableName},
@@ -13,7 +13,7 @@
         WHERE (gv).val IS NOT NULL;
     </select>
     <select id="getMaxValue" resultType="Double">
-        WITH poly AS (SELECT PUBLIC.st_transform(public.st_geomfromtext(#{geomWkt}, 4326), 3857) AS geom)
+        WITH poly AS (SELECT public.ST_GeomFromEWKT(#{geomWkt}) AS geom)
         SELECT MAX((gv).val) AS max_dsm
         FROM (SELECT public.st_clip(rast, 1, geom, false) AS clipped_rast
               FROM ${tableName},
@@ -23,7 +23,7 @@
         WHERE (gv).val IS NOT NULL;
     </select>
     <select id="getMinValue" resultType="Double">
-        WITH poly AS (SELECT PUBLIC.st_transform(public.st_geomfromtext(#{geomWkt}, 4326), 3857) AS geom)
+        WITH poly AS (SELECT public.ST_GeomFromEWKT(#{geomWkt}) AS geom)
         SELECT MIN((gv).val) AS min_dsm
         FROM (SELECT public.st_clip(rast, 1, geom, false) AS clipped_rast
               FROM ${tableName},
@@ -34,7 +34,7 @@
     </select>
 
     <select id="getHilltopVolume" parameterType="map" resultType="Double">
-        WITH geom AS (SELECT PUBLIC.st_transform(PUBLIC.ST_GeomFromText('${geomWkt}', 4326), 3857) AS geom),
+        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
         FROM ${tableName} LIMIT 1
             ), clipped_raster AS (
@@ -55,7 +55,7 @@
     </select>
 
     <select id="getFillVolume" parameterType="map" resultType="Double">
-        WITH geom AS (SELECT PUBLIC.st_transform(PUBLIC.ST_GeomFromText('${geomWkt}', 4326), 3857) AS geom),
+        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
         FROM ${tableName} LIMIT 1
             ), clipped_raster AS (
@@ -76,7 +76,7 @@
     </select>
 
     <select id="getDemRing" parameterType="map" resultType="String">
-        WITH geom AS (SELECT PUBLIC.ST_TRANSFORM(PUBLIC.ST_GEOMFROMTEXT('${geomWkt}', 4326), 3857) AS geom),
+        WITH geom AS (SELECT PUBLIC.ST_TRANSFORM(public.ST_GeomFromEWKT(#{geomWkt}), 3857) AS geom),
              clipped_raster AS (
                  SELECT PUBLIC.ST_CLIP(rast, 1, geom.geom, FALSE) AS rast from ${tableName}, geom WHERE PUBLIC.ST_INTERSECTS(rast, geom.geom)
              ),