From 2d5e75d867cf77c8004907ccbe606561df3549ff Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期一, 13 三月 2023 11:11:41 +0800
Subject: [PATCH] 1

---
 src/main/java/com/lf/server/service/all/BaseQueryService.java       |   16 ++++++++++++++++
 src/main/java/com/lf/server/controller/all/BaseQueryController.java |   21 ++++++++++++++++++++-
 src/main/java/com/lf/server/entity/all/StaticData.java              |    5 +++++
 data/db_cx.sql                                                      |    6 ++++--
 4 files changed, 45 insertions(+), 3 deletions(-)

diff --git a/data/db_cx.sql b/data/db_cx.sql
index 7d522d6..eadbd06 100644
--- a/data/db_cx.sql
+++ b/data/db_cx.sql
@@ -18,9 +18,7 @@
 -- delete from lf.sys_layer where id=427;
 
 -- 28.178
-select * from bd.dlg_25w_boul where ST_Intersects(geom, ST_Buffer(ST_GeomFromText('POINT (101.9281 36.58675)', 4490), 10, 'endcap=round join=round')) limit 20;
 
-select * from bd.dlg_25w_boul where ST_DWithin(geom, ST_GeomFromText('POINT (101.9281 36.58675)', 4490), 10) = true limit 20;
 
 
 
@@ -37,6 +35,10 @@
 
 
 ---------------------------------------------------------------------------------------------- 00.SQL鏌ヨ
+-- 缂撳啿鍖烘煡璇�
+select * from bd.dlg_25w_boul where ST_Intersects(geom, ST_Buffer(ST_GeomFromText('POINT (101.9281 36.58675)', 4490), 10, 'endcap=round join=round')) limit 20;
+select * from bd.dlg_25w_boul where ST_DWithin(geom, ST_GeomFromText('POINT (101.9281 36.58675)', 4490), 10) = true limit 20;
+
 select id,cn_name,en_name,url,serve_type,data_type from lf.sys_layer where url is not null and
   serve_type='WMS' and data_type in ('宸ョ▼椤圭洰','宸ョ▼椤圭洰-鍦扮伨绫�','宸ョ▼椤圭洰-娴嬮噺绫�','宸ョ▼椤圭洰-娲炲簱绫�','宸ョ▼椤圭洰-鍕樺療绫�') order by id;
 
diff --git a/src/main/java/com/lf/server/controller/all/BaseQueryController.java b/src/main/java/com/lf/server/controller/all/BaseQueryController.java
index 42f5448..24773f9 100644
--- a/src/main/java/com/lf/server/controller/all/BaseQueryController.java
+++ b/src/main/java/com/lf/server/controller/all/BaseQueryController.java
@@ -6,6 +6,7 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.lf.server.annotation.SysLog;
 import com.lf.server.entity.all.ResponseMsg;
+import com.lf.server.entity.all.StaticData;
 import com.lf.server.entity.ctrl.DownloadReqEntity;
 import com.lf.server.entity.ctrl.IdNameEntity;
 import com.lf.server.entity.ctrl.KeyValueEntity;
@@ -145,11 +146,29 @@
     @ApiImplicitParams({
             @ApiImplicitParam(name = "name", value = "鏄犲皠鍚嶇О", dataType = "String", paramType = "query", example = "dlgagnp"),
             @ApiImplicitParam(name = "wkt", value = "WKT锛堣憲鍚嶆枃鏈級", dataType = "String", paramType = "query", example = ""),
+            @ApiImplicitParam(name = "buffer", value = "缂撳啿鍖哄ぇ灏�", dataType = "Double", paramType = "query", example = "10"),
             @ApiImplicitParam(name = "limit", value = "闄愬埗鏉℃暟", dataType = "Integer", paramType = "query", example = "20")
     })
     @GetMapping(value = "/selectByBuffer")
-    public ResponseMsg<List<Object>> selectByBuffer(String name, String wkt, Integer limit) {
+    public ResponseMsg<List<Object>> selectByBuffer(String name, String wkt, Double buffer, Integer limit) {
         try {
+            if (StringHelper.isEmpty(wkt)) {
+                return fail("WKT涓嶈兘涓虹┖", null);
+            }
+            if (null == limit || limit < 1 || limit > StaticData.ONE_HUNDRED) {
+                limit = 20;
+            }
+            if (null == buffer || buffer < 0 || buffer > StaticData.ONE_HUNDRED_THOUSAND) {
+                buffer = 10.0;
+            }
+
+            GeomBaseMapper baseMapper = ClassHelper.getGeoBaseMapper(name);
+            if (baseMapper == null) {
+                return fail("鏌ヨ瀵硅薄涓嶅瓨鍦�", null);
+            }
+
+            QueryWrapper wrapper = new QueryWrapper();
+            baseQueryService.addBufferWrapper(baseMapper, wrapper, wkt, buffer);
 
             return success(0, null);
         } catch (Exception ex) {
diff --git a/src/main/java/com/lf/server/entity/all/StaticData.java b/src/main/java/com/lf/server/entity/all/StaticData.java
index 2ce2e2b..3ea7fe2 100644
--- a/src/main/java/com/lf/server/entity/all/StaticData.java
+++ b/src/main/java/com/lf/server/entity/all/StaticData.java
@@ -47,6 +47,11 @@
     public final static int ONE_HUNDRED = 100;
 
     /**
+     * 鏁板�硷細100,000
+     */
+    public final static int ONE_HUNDRED_THOUSAND = 100000;
+
+    /**
      * 鏁板�硷細200
      */
     public final static int TWO_HUNDRED = 200;
diff --git a/src/main/java/com/lf/server/service/all/BaseQueryService.java b/src/main/java/com/lf/server/service/all/BaseQueryService.java
index 286df38..68d5495 100644
--- a/src/main/java/com/lf/server/service/all/BaseQueryService.java
+++ b/src/main/java/com/lf/server/service/all/BaseQueryService.java
@@ -208,6 +208,22 @@
         return tabName;
     }
 
+    /**
+     * 娣诲姞缂撳啿鍖鸿繃婊ゆ潯浠�
+     *
+     * @param baseMapper 鐖禡apper
+     * @param wrapper    QueryWrapper
+     * @param wkt        WKT锛堣憲鍚嶆枃鏈級
+     */
+    public void addBufferWrapper(GeomBaseMapper baseMapper, QueryWrapper wrapper, String wkt, double buffer) {
+        Integer srid = getSrid(baseMapper);
+        if (null == srid) {
+            srid = 4490;
+        }
+
+        wrapper.apply(String.format("ST_Intersects(geom, ST_Buffer(ST_GeomFromText('%s', %d), %f, 'endcap=round join=round'))", wkt, srid, buffer));
+    }
+
     @Override
     public List<IdNameEntity> selectUserFuzzy(String name) {
         name = StringHelper.getLikeStr(name);

--
Gitblit v1.9.3