Browse Source

基于pgsql里的POSTGIS做的分析组件

LAPTOP-BJJ3IV5R\SIWEI 1 year ago
parent
commit
20a72baaf2

+ 53 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/controller/analyse/AnalyseUtilsDBController.java

@@ -0,0 +1,53 @@
+package com.onemap.analyse.controller.analyse;
+
+import com.onemap.analyse.service.AnalyseUtilsDBService;
+import com.onemap.common.core.web.controller.BaseController;
+import com.onemap.common.core.web.domain.RequestResult;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+/**
+ * 基于pgsql里的POSTGIS做的分析组件
+ */
+@RestController
+@RequestMapping("/analyse/db")
+public class AnalyseUtilsDBController extends BaseController {
+
+    @Autowired
+    private AnalyseUtilsDBService analyseUtilsDBService;
+
+    /**
+     * table中与wkt数据是否有交集
+     *
+     * @param inputTable        TABLE名称(vater空间中表)
+     * @param inputSRID         table
+     * @param inputIds          查询数据集ID
+     * @param intersectsWkt     wkt
+     * @param intersectsWktSRID wkt对应的坐标
+     * @return
+     */
+    @PostMapping("/intersects/table_wkt")
+    public RequestResult intersectsTableWkt(String inputTable, Integer inputSRID, List<String> inputIds, String intersectsWkt, Integer intersectsWktSRID) {
+        return RequestResult.success(analyseUtilsDBService.intersectsTableWkt(inputTable, inputSRID, inputIds, intersectsWkt, intersectsWktSRID));
+    }
+
+    /**
+     * table中与wkt数据取交集
+     *
+     * @param inputTable          TABLE名称(vater空间中表)
+     * @param inputSRID           table
+     * @param inputIds            查询数据集ID
+     * @param intersectionWkt     wkt
+     * @param intersectionWktSRID wkt对应的坐标
+     * @param outputColumn        返回TABLE表中的字段,先已返回,ID,GEOM(交集的),geom_area (交集的)
+     * @return
+     */
+    @PostMapping("/intersection/table_wkt")
+    public RequestResult intersectionTableWkt(String inputTable, Integer inputSRID, List<String> inputIds, String intersectionWkt, Integer intersectionWktSRID, List<String> outputColumn) {
+        return RequestResult.success(analyseUtilsDBService.intersectionTableWkt(inputTable, inputSRID, inputIds, intersectionWkt, intersectionWktSRID, outputColumn));
+    }
+
+}

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

@@ -0,0 +1,47 @@
+package com.onemap.analyse.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface AnalyseUtilsDBMapper {
+
+    /**
+     * table中与wkt数据是否有交集
+     * @param inputTable TABLE名称(vater空间中表)
+     * @param inputSRID   table
+     * @param inputIds    查询数据集ID
+     * @param intersectsWkt wkt
+     * @param intersectsWktSRID wkt对应的坐标
+     * @return
+     */
+    public List<String> intersectsTableWkt(
+            @Param("inputTable") String inputTable,
+            @Param("inputSRID") Integer inputSRID,
+            @Param("inputIds") List<String> inputIds,
+            @Param("intersectsWkt") String intersectsWkt,
+            @Param("intersectsWktSRID") Integer intersectsWktSRID);
+
+    /**
+     * table中与wkt数据取交集
+     * @param inputTable TABLE名称(vater空间中表)
+     * @param inputSRID   table
+     * @param inputIds    查询数据集ID
+     * @param intersectionWkt wkt
+     * @param intersectionWktSRID wkt对应的坐标
+     * @param outputColumn      返回TABLE表中的字段,先已返回,ID,GEOM(交集的),geom_area (交集的)
+     * @return
+     */
+    public List<Map> intersectionTableWkt(
+            @Param("inputTable") String inputTable,
+            @Param("inputSRID") Integer inputSRID,
+            @Param("inputIds") List<String> inputIds,
+            @Param("intersectionWkt") String intersectionWkt,
+            @Param("intersectionWktSRID") Integer intersectionWktSRID,
+            @Param("outputColumn") List<String> outputColumn);
+
+
+}

+ 50 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/AnalyseUtilsDBService.java

@@ -0,0 +1,50 @@
+package com.onemap.analyse.service;
+
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 基于pgsql里的POST做的分析组件
+ */
+public interface AnalyseUtilsDBService {
+
+    /**
+     * table中与wkt数据是否有交集
+     *
+     * @param inputTable        TABLE名称(vater空间中表)
+     * @param inputSRID         table
+     * @param inputIds          查询数据集ID
+     * @param intersectsWkt     wkt
+     * @param intersectsWktSRID wkt对应的坐标
+     * @return
+     */
+    public List<String> intersectsTableWkt(
+            String inputTable,
+            Integer inputSRID,
+            List<String> inputIds,
+            String intersectsWkt,
+            Integer intersectsWktSRID);
+
+    /**
+     * table中与wkt数据取交集
+     *
+     * @param inputTable          TABLE名称(vater空间中表)
+     * @param inputSRID           table
+     * @param inputIds            查询数据集ID
+     * @param intersectionWkt     wkt
+     * @param intersectionWktSRID wkt对应的坐标
+     * @param outputColumn        返回TABLE表中的字段,先已返回,ID,GEOM(交集的),geom_area (交集的)
+     * @return
+     */
+    public List<Map> intersectionTableWkt(
+            String inputTable,
+            Integer inputSRID,
+            List<String> inputIds,
+            String intersectionWkt,
+            Integer intersectionWktSRID,
+            List<String> outputColumn);
+
+
+}

+ 26 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/AnalyseUtilsDBServiceImpl.java

@@ -0,0 +1,26 @@
+package com.onemap.analyse.service.impl;
+
+import com.onemap.analyse.mapper.AnalyseUtilsDBMapper;
+import com.onemap.analyse.service.AnalyseUtilsDBService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class AnalyseUtilsDBServiceImpl implements AnalyseUtilsDBService {
+
+    @Autowired
+    private AnalyseUtilsDBMapper analyseUtilsDBMapper;
+
+    @Override
+    public List<String> intersectsTableWkt(String inputTable, Integer inputSRID, List<String> inputIds, String intersectsWkt, Integer intersectsWktSRID) {
+        return analyseUtilsDBMapper.intersectsTableWkt(inputTable, inputSRID, inputIds, intersectsWkt, intersectsWktSRID);
+    }
+
+    @Override
+    public List<Map> intersectionTableWkt(String inputTable, Integer inputSRID, List<String> inputIds, String intersectionWkt, Integer intersectionWktSRID, List<String> outputColumn) {
+        return analyseUtilsDBMapper.intersectionTableWkt(inputTable, inputSRID, inputIds, intersectionWkt, intersectionWktSRID, outputColumn);
+    }
+}

+ 90 - 0
onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/fzss/AnalyseUtilsDBMapper.xml

@@ -0,0 +1,90 @@
+<?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.AnalyseUtilsDBMapper">
+
+    <select id="intersectsTableWkt" resultType="String">
+        SELECT id
+        FROM "${inputTable}" inTbale
+        where public.st_intersects(
+            <choose>
+                <when test="intersectsWktSRID != null and intersectsWktSRID !=''">
+                    public.st_setsrid(public.st_geomfromewkt(#{intersectsWkt}),#{intersectsWktSRID}),
+                    public.st_transform(
+                        <choose>
+                            <when test="inputSRID != null and inputSRID !=''">
+                                public.st_setsrid(inTbale.geom,#{inputSRID})
+                            </when>
+                            <otherwise>
+                                inTbale.geom
+                            </otherwise>
+                        </choose>
+                        ,#{intersectsWktSRID}
+                    )
+                </when>
+                <otherwise>
+                    public.st_geomfromewkt(#{intersectsWkt}),
+                    <choose>
+                        <when test="inputSRID != null and inputSRID !=''">
+                            public.st_setsrid(inTbale.geom,#{inputSRID})
+                        </when>
+                        <otherwise>
+                            inTbale.geom
+                        </otherwise>
+                    </choose>
+                </otherwise>
+            </choose>
+        )
+        <if test="inputIds != null and inputIds.size()>0 ">
+            and (inTbale.id)::VARCHAR in
+            <foreach collection="inputIds" item="id" open="(" close=")" separator=",">#{id}</foreach>
+        </if>
+    </select>
+
+    <select id="intersectionTableWkt" resultType="map">
+        SELECT ret_tab.id,ret_tab.ret_geom_vv geom,public.st_area(ret_tab.ret_geom_vv) geom_area
+        <if test="outputColumn != null and outputColumn.size()>0 ">
+            <foreach collection="outputColumn" item="columnValue" open="," separator=",">
+                "${columnValue}"
+            </foreach>
+        </if>
+        FROM ( SELECT inTbale.*,
+            public.st_intersection(
+            <choose>
+                <when test="intersectionWktSRID != null and intersectionWktSRID !=''">
+                    public.st_setsrid(public.st_geomfromewkt(#{intersectionWkt}),#{intersectionWktSRID}),
+                    public.st_transform(
+                    <choose>
+                        <when test="inputSRID != null and inputSRID !=''">
+                            public.st_setsrid(inTbale.geom,#{inputSRID})
+                        </when>
+                        <otherwise>
+                            inTbale.geom
+                        </otherwise>
+                    </choose>
+                    ,#{intersectionWktSRID}
+                    )
+                </when>
+                <otherwise>
+                    public.st_geomfromewkt(#{intersectionWkt}),
+                    <choose>
+                        <when test="inputSRID != null and inputSRID !=''">
+                            public.st_setsrid(inTbale.geom,#{inputSRID})
+                        </when>
+                        <otherwise>
+                            inTbale.geom
+                        </otherwise>
+                    </choose>
+                </otherwise>
+            </choose>
+            ) ret_geom_vv
+        FROM "${inputTable}" inTbale
+        <if test="inputIds != null and inputIds.size()>0 ">
+            where (inTbale.id)::VARCHAR in
+            <foreach collection="inputIds" item="id" open="(" close=")" separator=",">#{id}</foreach>
+        </if>
+        )ret_tab
+    </select>
+
+</mapper>

+ 1 - 1
onemap-modules/pom.xml

@@ -14,7 +14,7 @@
 <!--        <module>onemap-job</module>-->
         <module>onemap-file</module>
         <module>onemap-apply</module>
-<!--        <module>onemap-analyse</module>-->
+        <module>onemap-analyse</module>
 <!--        <module>onemap-vector</module>-->
     </modules>
     <dependencies>