Browse Source

坡度添加

gushoubang 9 tháng trước cách đây
mục cha
commit
16f1602ea0

+ 25 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/controller/analyse/SlopController.java

@@ -0,0 +1,25 @@
+package com.onemap.analyse.controller.analyse;
+
+import com.onemap.analyse.service.ISlopService;
+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 javax.annotation.Resource;
+
+
+@RestController
+@RequestMapping("/slop")
+public class SlopController {
+    @Resource
+    private ISlopService iSlopService;
+
+    @GetMapping("/average")
+    @Slave
+    public RequestResult getAveSlop(@RequestParam(value = "geom") String geom) {
+        return RequestResult.success(iSlopService.getAveSlop(geom));
+    }
+}

+ 6 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/raster/SlopMapper.java

@@ -0,0 +1,6 @@
+package com.onemap.analyse.mapper.raster;
+
+public interface SlopMapper {
+
+    double getAveSlop(String geomWkt);
+}

+ 8 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/ISlopService.java

@@ -0,0 +1,8 @@
+package com.onemap.analyse.service;
+
+/**
+ * 坡度分析
+ */
+public interface ISlopService {
+    double getAveSlop(String geomWkt);
+}

+ 28 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/SlopServiceImpl.java

@@ -0,0 +1,28 @@
+package com.onemap.analyse.service.impl;
+
+import com.onemap.analyse.mapper.raster.SlopMapper;
+import com.onemap.analyse.service.ISlopService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * 坡度分析服务
+ */
+@Service
+public class SlopServiceImpl implements ISlopService {
+    @Resource
+    private SlopMapper slopMapper;
+
+    /**
+     * 根据给定区域获取平均坡度
+     *
+     * @param geomWkt
+     * @return
+     */
+    @Override
+    public double getAveSlop(String geomWkt) {
+        Double d = slopMapper.getAveSlop(geomWkt);
+        return d;
+    }
+}

+ 17 - 0
onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/raster/SlopMapper.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.onemap.analyse.mapper.raster.SlopMapper">
+    <select id="getAveSlop" resultType="Double">
+        -- 创建一个多边形
+        WITH poly AS (SELECT public.st_geomfromtext(#{geomWkt}, 4326) AS geom)
+        -- 裁剪坡度图层并计算平均坡度
+        SELECT AVG((gv).val) AS avg_slope
+        FROM (SELECT public.st_clip(rast, 1, geom, false) AS clipped_rast
+              FROM sy_slop,
+                   poly
+              WHERE public.st_intersects(rast, geom)) AS clipped,
+             LATERAL public.st_pixelaspoints(clipped_rast) AS gv
+        WHERE (gv).val IS NOT NULL;
+    </select>
+</mapper>