Browse Source

给定指定高度计算填加土石方量

gushoubang 7 months ago
parent
commit
3aee666371

+ 2 - 2
onemap-auth/src/main/resources/bootstrap.yml

@@ -15,11 +15,11 @@ spring:
       discovery:
         namespace: model
         # 服务注册地址
-        server-addr: 192.168.100.30:8848
+        server-addr: 127.0.0.10:8848
       config:
         namespace: model
         # 配置中心地址
-        server-addr: 192.168.100.30:8848
+        server-addr: 127.0.0.10:8848
         # 配置文件格式
         file-extension: yml
         # 共享配置

+ 4 - 4
onemap-gateway/src/main/resources/bootstrap.yml

@@ -19,11 +19,11 @@ spring:
       discovery:
         namespace: model
         # 服务注册地址
-        server-addr: 192.168.100.30:8848
+        server-addr: 127.0.0.10:8848
       config:
         namespace: model
         # 配置中心地址
-        server-addr: 192.168.100.30:8848
+        server-addr: 127.0.0.10:8848
         # 配置文件格式
         file-extension: yml
         # 共享配置
@@ -34,13 +34,13 @@ spring:
       eager: true
       transport:
         # 控制台地址
-        dashboard: 192.168.100.30:8718
+        dashboard: 127.0.0.10:8718
 
       # nacos配置持久化
       datasource:
         ds1:
           nacos:
-            server-addr: 192.168.100.30:8848
+            server-addr: 127.0.0.10:8848
             dataId: sentinel-onemap-gateway
             groupId: DEFAULT_GROUP
             data-type: json

+ 11 - 6
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/controller/analyse/RasterController.java

@@ -1,12 +1,10 @@
 package com.onemap.analyse.controller.analyse;
 
+import com.onemap.analyse.domain.vo.CutFillVo;
 import com.onemap.analyse.service.IRasterService;
 import com.onemap.common.core.web.domain.RequestResult;
 import com.onemap.common.datasource.annotation.Slave;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 
@@ -19,12 +17,19 @@ public class RasterController {
     @GetMapping("/dsm")
     @Slave
     public RequestResult getDsm(@RequestParam(value = "geom") String geom, @RequestParam(value = "type") String type) {
-        return RequestResult.success(iRasterService.getValue("raster.sy_dsm", geom, type));
+        return RequestResult.success(iRasterService.getValue("vector.\"RASTER_DSM\"", geom, type));
     }
 
     @GetMapping("/slope")
     @Slave
     public RequestResult getSlope(@RequestParam(value = "geom") String geom, @RequestParam(value = "type") String type) {
-        return RequestResult.success(iRasterService.getValue("raster.sy_slop", geom, type));
+        return RequestResult.success(iRasterService.getValue("vector.\"RASTER_SLOPE\"", geom, type));
+    }
+
+    @PostMapping("/cutFill")
+    @Slave
+    public RequestResult getCutFill(@RequestBody CutFillVo cutFillVo) {
+        iRasterService.getCutFill(cutFillVo);
+        return RequestResult.success();
     }
 }

+ 10 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/domain/vector/FillVolumeSql.java

@@ -0,0 +1,10 @@
+package com.onemap.analyse.domain.vector;
+
+import lombok.Data;
+
+// @Data
+// public class FillVolumeSql {
+//     String tableName;
+//     String geomWkt;
+//     Double demHeight;
+// }

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

@@ -0,0 +1,9 @@
+package com.onemap.analyse.domain.vo;
+
+import lombok.Data;
+
+@Data
+public class CutFillVo {
+    String geom;
+    Double height;
+}

+ 5 - 7
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/raster/RasterMapper.java

@@ -2,7 +2,7 @@ package com.onemap.analyse.mapper.raster;
 
 import org.apache.ibatis.annotations.Param;
 
-import java.util.List;
+import java.util.Map;
 
 public interface RasterMapper {
     Double getMinValue(@Param("tableName") String tableName, @Param("geomWkt") String geomWkt);
@@ -19,19 +19,17 @@ public interface RasterMapper {
 
     /**
      * 计算给定区域,指定高程填平需要的土方体积
-     * @param tableName
-     * @param geomWkt
-     * @param height
+     *
      * @return
      */
-    Double getFillVolume(@Param("tableName") String tableName, @Param("geomWkt") String geomWkt,
-                         @Param("height") Double height);
+    Double getFillVolume(Map<String,Object> fillVolumeMap);
 
     /**
      * 获取等到带的矢量数据
+     *
      * @param tableName
      * @param geomWkt
      * @return
      */
-    String getDemRing(@Param("tableName") String tableName, @Param("geomWkt") String geomWkt);
+    String getDemRing(@Param("tableName") String tableName, @Param("geomWkt") String geomWkt, @Param("height") Double height);
 }

+ 4 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/IRasterService.java

@@ -1,8 +1,12 @@
 package com.onemap.analyse.service;
 
+import com.onemap.analyse.domain.vo.CutFillVo;
+
 /**
  * 单波段栅格数据服务
  */
 public interface IRasterService {
     Double getValue(String tableName, String geomWkt, String type);
+
+    void getCutFill(CutFillVo cutFillVo);
 }

+ 1 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/CreateUtilsDBServiceImpl.java

@@ -53,6 +53,7 @@ public class CreateUtilsDBServiceImpl implements CreateUtilsDBService {
         String newTableName = StringUtils.getTemporaryTableName();
 
         String temporaryTable = "temporaryTable_" + timestamp;
+        // TODO:天涯区有问题
         createUtilsDBMapper.differenceTables(tableNameA, tableIdsA, tableNameB, newTableName, temporaryTable);
         return newTableName;
     }

+ 30 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/RasterServiceImpl.java

@@ -1,10 +1,13 @@
 package com.onemap.analyse.service.impl;
 
+import com.onemap.analyse.domain.vo.CutFillVo;
 import com.onemap.analyse.mapper.raster.RasterMapper;
 import com.onemap.analyse.service.IRasterService;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * 高程分析服务
@@ -13,6 +16,7 @@ import javax.annotation.Resource;
 public class RasterServiceImpl implements IRasterService {
     @Resource
     private RasterMapper rasterMapper;
+
     @Override
     public Double getValue(String tableName, String geomWkt, String type) {
         Double value = (double) 0;
@@ -25,4 +29,30 @@ public class RasterServiceImpl implements IRasterService {
         }
         return value;
     }
+
+    @Override
+    public void getCutFill(CutFillVo cutFillVo) {
+        String tableName = "vector.\"temp_15_3857\"";
+        Double midHeight = cutFillVo.getHeight();
+        if (midHeight == null) {
+            midHeight = rasterMapper.getAveValue(tableName, cutFillVo.getGeom());
+        }
+        Double maxHeight = rasterMapper.getMaxValue(tableName, cutFillVo.getGeom());
+        Double minHeight = rasterMapper.getMinValue(tableName, cutFillVo.getGeom());
+
+        Map<String,Object> fillVolumeMap = new HashMap<>();
+        fillVolumeMap.put("tableName",tableName);
+        fillVolumeMap.put("geomWkt",cutFillVo.getGeom());
+        fillVolumeMap.put("height",midHeight);
+        Double fillVolume = rasterMapper.getFillVolume(fillVolumeMap);
+
+        Double cutVolume = rasterMapper.getDemVolume(tableName, cutFillVo.getGeom(), midHeight, maxHeight);
+
+        String midUpGeom = rasterMapper.getDemRing(tableName, cutFillVo.getGeom(), (midHeight + maxHeight) / 2);
+        String midGeom = rasterMapper.getDemRing(tableName, cutFillVo.getGeom(), midHeight);
+        String midDownGeom = rasterMapper.getDemRing(tableName, cutFillVo.getGeom(), (midHeight + minHeight) / 2);
+        String bottomGeom = cutFillVo.getGeom();
+
+        System.out.println("fillVolume: " + fillVolume);
+    }
 }

+ 2 - 2
onemap-modules/onemap-analyse/src/main/resources/bootstrap.yml

@@ -20,11 +20,11 @@ spring:
       discovery:
         namespace: model
         # 服务注册地址
-        server-addr: 192.168.100.30:8848
+        server-addr: 127.0.0.10:8848
       config:
         namespace: model
         # 配置中心地址
-        server-addr: 192.168.100.30:8848
+        server-addr: 127.0.0.10:8848
         # 配置文件格式
         file-extension: yml
         # 共享配置

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

@@ -35,39 +35,66 @@
 
     <select id="getDemVolume" resultType="Double">
         SELECT (stats.count * (pixel_info.pixel_size * pixel_info.pixel_size) * (stats.mean - #{minHeight})) AS volume
-        FROM (SELECT (ST_SummaryStats(
-                ST_MapAlgebra(
-                        ST_Clip(rast, 1, ST_GeomFromText(#{geomWkt}, 4326)),
-                        1,
+        FROM (SELECT (public.ST_SummaryStats(
+                public.ST_MapAlgebra(
+                        public.ST_Clip(rast, 1, public.ST_GeomFromText(#{geomWkt}, 4326)),1,
                         'CASE WHEN [rast] &gt;= #{minHeight} AND [rast] &lt;= #{maxHeight} THEN [rast] ELSE NULL END',
                         '32BF')
                       )).*) AS stats,
-             (SELECT ST_PixelWidth(ST_Clip(rast, 1, ST_GeomFromText(#{geomWkt}, 4326))) as pixel_size
+             (SELECT public.ST_PixelWidth(public.ST_Clip(rast, 1, public.ST_GeomFromText(#{geomWkt}, 4326))) as pixel_size
               FROM ${tableName}
-              WHERE ST_Intersects(rast, ST_GeomFromText(#{geomWkt}, 4326)) LIMIT 1) AS pixel_info;
+              WHERE public.ST_Intersects(rast, public.ST_GeomFromText(#{geomWkt}, 4326)) LIMIT 1) AS pixel_info;
     </select>
-    <select id="getFillVolume" resultType="Double">
-        SELECT SUM((#{height} - stats.mean) * stats.count *
-                   (pixel_info.pixel_size * pixel_info.pixel_size)) AS fill_volume
-        FROM (SELECT (ST_SummaryStats(
-                ST_MapAlgebra(
-                        ST_Clip(rast, 1, ST_GeomFromText(#{geomWkt}, 4326)),
-                        1,
-                        'CASE WHEN [rast] &lt; #{height} THEN [rast] ELSE NULL END',
-                        '32BF'
-                )
-                      )).*) AS stats,
-             (SELECT ST_PixelWidth(ST_Clip(rast, 1, ST_GeomFromText(#{geomWkt}, 4326))) as pixel_size
-              FROM ${tableName}
-              WHERE ST_Intersects(rast, ST_GeomFromText(#{geomWkt}, 4326)) LIMIT 1) AS pixel_info;
+
+    <select id="getFillVolume" parameterType="map" resultType="Double">
+        WITH geom AS (
+            SELECT PUBLIC.st_transform(PUBLIC.ST_GeomFromText('${geomWkt}', 4326), 3857) AS geom
+        ),
+             pixel AS (
+                 SELECT (PUBLIC.ST_MetaData(rast)).scalex AS pixel_width FROM ${tableName} LIMIT 1
+            ),
+            clipped_raster AS (
+        SELECT PUBLIC.ST_Clip(rast, 1, geom.geom, FALSE) AS rast FROM ${tableName}, geom
+        WHERE PUBLIC.ST_Intersects(rast, geom.geom)
+            ),
+            stats AS (
+        SELECT (PUBLIC.ST_SummaryStats(PUBLIC.ST_MapAlgebraExpr(
+            rast, 1, '32BF',
+            'CASE WHEN [rast] &lt; ${height} THEN [rast] ELSE NULL END'
+            ), 1)).*
+        FROM clipped_raster
+            )
+        SELECT SUM((#{height} - stats.mean) * stats.count * (pixel.pixel_width * pixel.pixel_width)) AS fill_volume
+        FROM stats, pixel;
     </select>
 
+<!--    <select id="getFillVolume" parameterType="map" resultType="Double">-->
+<!--        WITH geom AS (-->
+<!--            SELECT PUBLIC.st_transform(PUBLIC.ST_GeomFromText('${geomWkt}', 4326), 3857) AS geom-->
+<!--        ),-->
+<!--             pixel AS (-->
+<!--                 SELECT (PUBLIC.ST_MetaData(rast)).scalex AS pixel_width FROM ${tableName} LIMIT 1-->
+<!--            ),-->
+<!--            clipped_raster AS (-->
+<!--        SELECT PUBLIC.ST_Clip(rast, 1, geom.geom, FALSE) AS rast FROM ${tableName}, geom-->
+<!--        WHERE PUBLIC.ST_Intersects(rast, geom.geom)-->
+<!--            ),-->
+<!--            stats AS (-->
+<!--        SELECT (PUBLIC.ST_SummaryStats(PUBLIC.ST_MapAlgebra(-->
+<!--            rast, 1, '32BF',-->
+<!--            'CASE WHEN [rast] &lt; ${height} THEN [rast] ELSE NULL END'-->
+<!--            ), 1)).*-->
+<!--        FROM clipped_raster-->
+<!--            )-->
+<!--        SELECT SUM((#{height} - stats.mean) * stats.count * (pixel.pixel_width * pixel.pixel_width)) AS fill_volume-->
+<!--        FROM stats, pixel;-->
+<!--    </select>-->
+
     <select id="getDemRing" resultType="String">
-        WITH contour AS (SELECT (ST_Dump(ST_Contour(rast, 1, interval => 1))).geom AS geom, (ST_Value(rast, ST_Centroid((ST_Dump(ST_Contour(rast, 1, interval => 1))).geom)):: int) AS elevation
+        WITH contour AS (SELECT (public.ST_Dump(public.ST_Contour(rast, 1, interval => 1))).geom AS geom, (public.ST_Value(rast, public.ST_Centroid((public.ST_Dump(public.ST_Contour(rast, 1, interval => 1))).geom)):: int) AS elevation
         FROM ${tableName}
-        WHERE ST_Intersects(rast, ST_GeomFromText(#{geomWkt}, 4326))
-            )
-        SELECT ST_Intersection(geom, ST_GeomFromText(#{geomWkt}, 4326)) AS geom
+        WHERE public.ST_Intersects(rast, public.ST_GeomFromText(#{geomWkt}, 4326)))
+        SELECT public.ST_Intersection(geom, public.ST_GeomFromText(#{geomWkt}, 4326)) AS geom
         FROM contour
         WHERE elevation = #{height}
     </select>

+ 2 - 2
onemap-modules/onemap-apply/src/main/resources/bootstrap.yml

@@ -30,11 +30,11 @@ spring:
       discovery:
         namespace: model
         # 服务注册地址
-        server-addr: 192.168.100.30:8848
+        server-addr: 127.0.0.10:8848
       config:
         namespace: model
         # 配置中心地址
-        server-addr: 192.168.100.30:8848
+        server-addr: 127.0.0.10:8848
         # 配置文件格式
         file-extension: yml
         # 共享配置

+ 2 - 2
onemap-modules/onemap-file/src/main/resources/bootstrap.yml

@@ -34,11 +34,11 @@ spring:
       discovery:
         namespace: model
         # 服务注册地址
-        server-addr: 192.168.100.30:8848
+        server-addr: 127.0.0.10:8848
       config:
         namespace: model
         # 配置中心地址
-        server-addr: 192.168.100.30:8848
+        server-addr: 127.0.0.10:8848
         # 配置文件格式
         file-extension: yml
         # 共享配置

+ 2 - 2
onemap-modules/onemap-model/src/main/resources/bootstrap.yml

@@ -31,11 +31,11 @@ spring:
       discovery:
         namespace: model
         # 服务注册地址
-        server-addr: 192.168.100.30:8848
+        server-addr: 127.0.0.10:8848
       config:
         namespace: model
         # 配置中心地址
-        server-addr: 192.168.100.30:8848
+        server-addr: 127.0.0.10:8848
         # 配置文件格式
         file-extension: yml
         # 共享配置

+ 2 - 2
onemap-modules/onemap-spatial/src/main/resources/bootstrap.yml

@@ -20,11 +20,11 @@ spring:
       discovery:
         namespace: model
         # 服务注册地址
-        server-addr: 192.168.100.30:8848
+        server-addr: 127.0.0.10:8848
       config:
         namespace: model
         # 配置中心地址
-        server-addr: 192.168.100.30:8848
+        server-addr: 127.0.0.10:8848
         # 配置文件格式
         file-extension: yml
         # 共享配置

+ 2 - 2
onemap-modules/onemap-system/src/main/resources/bootstrap.yml

@@ -15,11 +15,11 @@ spring:
       discovery:
         namespace: model
         # 服务注册地址
-        server-addr: 192.168.100.30:8848
+        server-addr: 127.0.0.10:8848
       config:
         namespace: model
         # 配置中心地址
-        server-addr: 192.168.100.30:8848
+        server-addr: 127.0.0.10:8848
         # 配置文件格式
         file-extension: yml
         # 共享配置