月球大数据地理空间分析展示平台-【后端】-月球后台服务
13693261870
2023-09-11 636f52fc934cd4fdc61472d786dec14616b2f2fa
修改栅格分析-1
已修改5个文件
93 ■■■■■ 文件已修改
src/main/java/com/moon/server/controller/data/RasterAnalysisController.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/moon/server/service/data/RasterAnalysisService.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/moon/server/service/data/ShuJianService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sys/LayerMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/moon/server/controller/data/RasterAnalysisController.java
@@ -107,55 +107,4 @@
            return fail(ex, null);
        }
    }
    @SysLog()
    @ApiOperation(value = "下载点分析")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "wkt", value = "点WKT", dataType = "String", example = "")
    })
    @GetMapping(value = "/downloadByPoint")
    public void downloadByPoint(String wkt, HttpServletResponse res) {
        try {
            // ...
            String filePath = "生成文件的路径";
            WebHelper.download(filePath, "文件名", res);
        } catch (Exception ex) {
            log.error(ex.getMessage(), ex);
        }
    }
    @SysLog()
    @ApiOperation(value = "下载线分析")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "wkt", value = "线WKT", dataType = "String", example = "")
    })
    @GetMapping(value = "/downloadByPolyline")
    public void downloadByPolyline(String wkt, HttpServletResponse res) {
        try {
            // ...
            String filePath = "生成文件的路径";
            WebHelper.download(filePath, "文件名", res);
        } catch (Exception ex) {
            log.error(ex.getMessage(), ex);
        }
    }
    @SysLog()
    @ApiOperation(value = "下载面分析")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "wkt", value = "面WKT", dataType = "String", example = "")
    })
    @GetMapping(value = "/downloadByPolygon")
    public void downloadByPolygon(String wkt, HttpServletResponse res) {
        try {
            // ...
            String filePath = "生成文件的路径";
            WebHelper.download(filePath, "文件名", res);
        } catch (Exception ex) {
            log.error(ex.getMessage(), ex);
        }
    }
}
src/main/java/com/moon/server/service/data/RasterAnalysisService.java
@@ -133,20 +133,23 @@
        double[] transform = ds.GetGeoTransform();
        // double rotationX = transform[2]; double rotationY = transform[4]
        double minX = transform[0], pixelWidth = transform[1], maxY = transform[3], pixelHeight = transform[5];
        double[] env = new double[4];
        polyline.GetEnvelope(env);
        double[] bounds = new double[4];
        polyline.GetEnvelope(bounds);
        double startX = bounds[0], endX = bounds[1], startY = bounds[2], endY = bounds[3];
        int xMinPixel = (int) Math.floor((env[0] - minX) / pixelWidth);
        int yMinPixel = (int) Math.floor((maxY - env[3]) / Math.abs(pixelHeight));
        int xMaxPixel = (int) Math.floor((env[1] - minX) / pixelWidth);
        int yMaxPixel = (int) Math.floor((maxY - env[2]) / Math.abs(pixelHeight));
        int bandCount = ds.getRasterCount();
        int xStartPixel = (int) Math.floor((startX - minX) / pixelWidth);
        int yStartPixel = (int) Math.floor((maxY - startY) / Math.abs(pixelHeight));
        int xEndPixel = (int) Math.floor((endX - minX) / pixelWidth);
        int yEndPixel = (int) Math.floor((maxY - endY) / Math.abs(pixelHeight));
        int xMin = Math.min(xMinPixel, xMaxPixel);
        int xMax = Math.max(xMinPixel, xMaxPixel);
        int yMin = Math.min(yMinPixel, yMaxPixel);
        int yMax = Math.max(yMinPixel, yMaxPixel);
        List<Double> list = new ArrayList<>();
        for (int y = Math.min(yStartPixel, yEndPixel); y <= Math.max(yStartPixel, yEndPixel); y++) {
            for (int x = Math.min(xStartPixel, xEndPixel); x <= Math.max(xStartPixel, xEndPixel); x++) {
        for (int y = yMin; y <= yMax; y++) {
            for (int x = xMin; x <= xMax; x++) {
                Geometry point = new Geometry(ogr.wkbPoint);
                point.AddPoint(minX + pixelWidth * x, maxY - pixelHeight * y);
                if (polyline.Contains(point)) {
@@ -173,9 +176,9 @@
        polygon.GetEnvelope(env);
        int xMinPixel = (int) Math.floor((env[0] - minX) / pixelWidth);
        int yMinPixel = (int) Math.floor((maxY - env[2]) / Math.abs(pixelHeight));
        int yMinPixel = (int) Math.floor((maxY - env[3]) / Math.abs(pixelHeight));
        int xMaxPixel = (int) Math.floor((env[1] - minX) / pixelWidth);
        int yMaxPixel = (int) Math.floor((maxY - env[3]) / Math.abs(pixelHeight));
        int yMaxPixel = (int) Math.floor((maxY - env[2]) / Math.abs(pixelHeight));
        int bandCount = ds.getRasterCount();
        int geoWidth = Math.abs(xMaxPixel - xMinPixel);
@@ -225,8 +228,11 @@
     * 处理结果
     */
    private void processResult(List<Double> rs, AnalysisResultEntity entity) {
        double avg = rs.stream().mapToDouble(Double::valueOf).average().getAsDouble();
        if (null == rs || rs.isEmpty()) {
            return;
        }
        double avg = rs.stream().mapToDouble(Double::valueOf).average().getAsDouble();
        entity.setMin(Collections.min(rs));
        entity.setMax(Collections.max(rs));
        entity.setAvg(avg);
src/main/java/com/moon/server/service/data/ShuJianService.java
@@ -45,6 +45,12 @@
    @Value("${shujian.path}")
    String sjPath;
    @Value("${shujian.domName}")
    String domName;
    @Value("${shujian.demName}")
    String demName;
    @Resource
    ResService resService;
@@ -319,7 +325,7 @@
     * 创建图层
     */
    private LayerEntity createLayerEntity(ResEntity resEntity, Integer category) {
        Integer pid = layerService.selectIdByName(StaticData.I1 == resEntity.getData() ? "DOM" : "DEM");
        Integer pid = layerService.selectIdByName(StaticData.I1 == resEntity.getData() ? domName : demName);
        Integer orderNum = layerService.selectMaxOrderNumByPid(pid);
        LayerEntity layer = layerService.selectById(pid);
src/main/resources/application.yml
@@ -124,6 +124,8 @@
  url1: http://172.16.2.10:50001
  url5: http://172.16.2.10:50005
  path: share/YQData/upload/
  domName: 自动发布影像图层组
  demName: 自动发布高程图层组
# 系统配置
sys:
src/main/resources/mapper/sys/LayerMapper.xml
@@ -72,7 +72,7 @@
        select id from lf.sys_dir where name = #{name};
    </select>
    <select id="selectOrderNumByPid" resultType="java.lang.Integer">
    <select id="selectMaxOrderNumByPid" resultType="java.lang.Integer">
        select coalesce(max(order_num), 0) + 1 from lf.sys_layer where pid = #{pid};
    </select>