浏览代码

添加获取高程信息接口

gushoubang 1 年之前
父节点
当前提交
00208d897c

+ 26 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/controller/analyse/DsmController.java

@@ -0,0 +1,26 @@
+package com.onemap.analyse.controller.analyse;
+
+import com.onemap.analyse.service.IDsmService;
+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("/dsm")
+public class DsmController {
+    @Resource
+    private IDsmService iDsmService;
+
+    @GetMapping("")
+    @Slave
+    public RequestResult getDsm(@RequestParam(value = "geom") String geom,
+                                @RequestParam(value = "type") String type) {
+        return RequestResult.success(iDsmService.getDsm(geom,type));
+    }
+}

+ 9 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/raster/DsmMapper.java

@@ -0,0 +1,9 @@
+package com.onemap.analyse.mapper.raster;
+
+public interface DsmMapper {
+    Double getMinDsm(String geomWkt);
+
+    Double getMaxDsm(String geomWkt);
+
+    Double getAveDsm(String geomWkt);
+}

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

@@ -2,5 +2,5 @@ package com.onemap.analyse.mapper.raster;
 
 public interface SlopMapper {
 
-    double getAveSlop(String geomWkt);
+    Double getAveSlop(String geomWkt);
 }

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

@@ -0,0 +1,8 @@
+package com.onemap.analyse.service;
+
+/**
+ * 高程分析
+ */
+public interface IDsmService {
+    Double getDsm(String geomWkt, String type);
+}

+ 31 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/DsmServiceImpl.java

@@ -0,0 +1,31 @@
+package com.onemap.analyse.service.impl;
+
+import com.onemap.analyse.mapper.raster.DsmMapper;
+import com.onemap.analyse.service.IDsmService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 高程分析服务
+ */
+@Service
+public class DsmServiceImpl implements IDsmService {
+    @Resource
+    private DsmMapper dsmMapper;
+
+    @Override
+    public Double getDsm(@Valid @NotNull String geomWkt, @Valid @NotNull String type) {
+        Double dsm = (double) 0;
+        if (type.equals("min")) {
+            dsm = dsmMapper.getMinDsm(geomWkt);
+        } else if (type.equals("max")) {
+            dsm = dsmMapper.getMaxDsm(geomWkt);
+        } else if (type.equals("ave")) {
+            dsm = dsmMapper.getAveDsm(geomWkt);
+        }
+        return dsm;
+    }
+}

+ 35 - 0
onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/raster/DsmMapper.xml

@@ -0,0 +1,35 @@
+<?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.DsmMapper">
+    <select id="getAveDsm" resultType="Double">
+        WITH poly AS (SELECT public.st_geomfromtext(#{geomWkt}, 4326) AS geom)
+        SELECT AVG((gv).val) AS avg_dsm
+        FROM (SELECT public.st_clip(rast, 1, geom, false) AS clipped_rast
+              FROM raster.sy_dsm,
+                   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="getMaxDsm" resultType="Double">
+        WITH poly AS (SELECT public.st_geomfromtext(#{geomWkt}, 4326) AS geom)
+        SELECT MAX((gv).val) AS max_dsm
+        FROM (SELECT public.st_clip(rast, 1, geom, false) AS clipped_rast
+              FROM raster.sy_dsm,
+                   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="getMinDsm" resultType="Double">
+        WITH poly AS (SELECT public.st_geomfromtext(#{geomWkt}, 4326) AS geom)
+        SELECT MIN((gv).val) AS min_dsm
+        FROM (SELECT public.st_clip(rast, 1, geom, false) AS clipped_rast
+              FROM raster.sy_dsm,
+                   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>