From d2108ee735894d73bf655bda1651ecaefbc4c09d Mon Sep 17 00:00:00 2001
From: rain <167982779@qq.com>
Date: Sat, 23 Mar 2024 09:35:02 +0800
Subject: [PATCH] 图斑

---
 src/main/java/com/dji/sample/patches/model/PatchesEntity.java             |   74 +++++++++
 src/main/java/com/dji/sample/patches/service/PatchesService.java          |    8 +
 src/main/java/com/dji/sample/patches/utils/ZipUtil.java                   |  129 ++++++++++++++++
 src/main/java/com/dji/sample/patches/controller/PatchesController.java    |   25 +++
 src/main/java/com/dji/sample/patches/service/impl/PatchesServiceImpl.java |   33 ++++
 src/main/java/com/dji/sample/patches/dao/PatchesMapper.java               |   14 +
 src/main/java/com/dji/sample/patches/model/DemoEntity.java                |   14 +
 src/main/java/com/dji/sample/patches/service/impl/DemoServiceImpl.java    |   19 ++
 src/main/java/com/dji/sample/patches/dao/DemoMapper.java                  |   10 +
 src/main/java/com/dji/sample/patches/model/PageBean.java                  |   15 +
 src/main/java/com/dji/sample/patches/service/DemoService.java             |    8 +
 src/main/java/com/dji/sample/patches/controller/DemoController.java       |   21 ++
 src/main/java/com/dji/sample/patches/utils/ShapeFileUtil.java             |  101 ++++++++++++
 src/main/resources/application.yml                                        |    3 
 14 files changed, 474 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/dji/sample/patches/controller/DemoController.java b/src/main/java/com/dji/sample/patches/controller/DemoController.java
new file mode 100644
index 0000000..6d82d0f
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/controller/DemoController.java
@@ -0,0 +1,21 @@
+package com.dji.sample.patches.controller;
+
+import com.dji.sample.patches.service.impl.DemoServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+import java.io.File;
+
+import java.io.IOException;
+
+@RestController
+public class DemoController {
+    @Autowired
+    private  DemoServiceImpl demoServiceImpl;
+    @GetMapping("/getGeo")
+    public void getGeo (File file) throws IOException {
+        demoServiceImpl.insertGeo(file);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/dji/sample/patches/controller/PatchesController.java b/src/main/java/com/dji/sample/patches/controller/PatchesController.java
new file mode 100644
index 0000000..5a2f11e
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/controller/PatchesController.java
@@ -0,0 +1,25 @@
+package com.dji.sample.patches.controller;
+
+import com.dji.sample.patches.model.PageBean;
+import com.dji.sample.patches.service.impl.PatchesServiceImpl;
+import org.opengis.geometry.coordinate.Polygon;
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+
+@RequestMapping("${url.patches.prefix}${url.patches.version}")
+@RestController
+public class PatchesController {
+    @Autowired
+    private PatchesServiceImpl patchesServiceimpl;
+    @GetMapping("/getPatches")
+    public PageBean page(@RequestParam(defaultValue = "1") Integer page,
+                         @RequestParam(defaultValue = "5") Integer pageSize,
+                         Integer id, String bsm, Polygon dkfw, String dklx){
+        //调用service分页查询
+        PageBean pageBean =patchesServiceimpl.limitGet( id,  bsm, dkfw, dklx,  page,  pageSize);
+        return pageBean;
+    }
+}
diff --git a/src/main/java/com/dji/sample/patches/dao/DemoMapper.java b/src/main/java/com/dji/sample/patches/dao/DemoMapper.java
new file mode 100644
index 0000000..2f91e81
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/dao/DemoMapper.java
@@ -0,0 +1,10 @@
+package com.dji.sample.patches.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dji.sample.patches.model.DemoEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface DemoMapper extends BaseMapper<DemoEntity> {
+    void insertJson(String json);
+}
diff --git a/src/main/java/com/dji/sample/patches/dao/PatchesMapper.java b/src/main/java/com/dji/sample/patches/dao/PatchesMapper.java
new file mode 100644
index 0000000..2dedf27
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/dao/PatchesMapper.java
@@ -0,0 +1,14 @@
+package com.dji.sample.patches.dao;
+
+import com.dji.sample.patches.model.PatchesEntity;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.opengis.geometry.coordinate.Polygon;
+
+import java.util.List;
+
+public interface PatchesMapper {
+    @Select("select id ,bsm,dkfw ,dklx from tb_lot_info")
+List<PatchesEntity> limitGet(@Param("id") Integer id, @Param("bsm") String bsm,
+                             @Param("dkfw") Polygon dkfw,@Param("dklx") String dklx);
+}
diff --git a/src/main/java/com/dji/sample/patches/model/DemoEntity.java b/src/main/java/com/dji/sample/patches/model/DemoEntity.java
new file mode 100644
index 0000000..94e543d
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/model/DemoEntity.java
@@ -0,0 +1,14 @@
+package com.dji.sample.patches.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DemoEntity {
+
+    String geo;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/model/PageBean.java b/src/main/java/com/dji/sample/patches/model/PageBean.java
new file mode 100644
index 0000000..7ecee4d
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/model/PageBean.java
@@ -0,0 +1,15 @@
+package com.dji.sample.patches.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PageBean {
+    private long total;
+    private List rows;
+}
\ No newline at end of file
diff --git a/src/main/java/com/dji/sample/patches/model/PatchesEntity.java b/src/main/java/com/dji/sample/patches/model/PatchesEntity.java
new file mode 100644
index 0000000..a32ede2
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/model/PatchesEntity.java
@@ -0,0 +1,74 @@
+package com.dji.sample.patches.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.opengis.geometry.coordinate.Polygon;
+
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName(value = "tb_lot_info")
+public class PatchesEntity implements Serializable {
+
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("bsm")
+    private String bsm;
+
+    @TableField("dklx")
+    private String dklx;
+
+    @TableField("xzqdm")
+    private String xzqdm;
+
+    @TableField("xmc")
+    private String xmc;
+
+    @TableField("dkbh")
+    private String dkbh;
+
+    @TableField("dkmc")
+    private String dkmc;
+
+    @TableField("dkmj")
+    private Double dkmj;
+
+    @TableField("sfbhzdk")
+    private String sfbhzdk;
+
+    @TableField("xzb")
+    private Double xzb;
+
+    @TableField("yzb")
+    private Double yzb;
+
+    @TableField("bz")
+    private String bz;
+
+    @TableField("kzxx")
+    private String kzxx;
+
+    @TableField("dkfw")
+    private Polygon dkfw;
+
+    @TableField("sjlx")
+    private String sjlx;
+
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField("create_time")
+    private LocalDateTime createTime;
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField("update_time")
+    private LocalDateTime updateTime;
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/dji/sample/patches/service/DemoService.java b/src/main/java/com/dji/sample/patches/service/DemoService.java
new file mode 100644
index 0000000..e9f53e1
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/service/DemoService.java
@@ -0,0 +1,8 @@
+package com.dji.sample.patches.service;
+
+import java.io.File;
+import java.io.IOException;
+
+public interface DemoService {
+    void insertGeo(File file) throws IOException;
+}
diff --git a/src/main/java/com/dji/sample/patches/service/PatchesService.java b/src/main/java/com/dji/sample/patches/service/PatchesService.java
new file mode 100644
index 0000000..c70d5e4
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/service/PatchesService.java
@@ -0,0 +1,8 @@
+package com.dji.sample.patches.service;
+
+import com.dji.sample.patches.model.PageBean;
+import org.opengis.geometry.coordinate.Polygon;
+
+public interface PatchesService {
+    PageBean limitGet (Integer id,String bsm, Polygon dkfw ,String dklx,int page, int pageSize);
+}
diff --git a/src/main/java/com/dji/sample/patches/service/impl/DemoServiceImpl.java b/src/main/java/com/dji/sample/patches/service/impl/DemoServiceImpl.java
new file mode 100644
index 0000000..8b0df8d
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/service/impl/DemoServiceImpl.java
@@ -0,0 +1,19 @@
+package com.dji.sample.patches.service.impl;
+import com.dji.sample.patches.dao.DemoMapper;
+import com.dji.sample.patches.service.DemoService;
+import com.dji.sample.patches.utils.ShapeFileUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import java.io.File;
+import java.io.IOException;
+@Service
+public class DemoServiceImpl implements DemoService {
+    @Autowired
+    private DemoMapper mapper;
+    private ShapeFileUtil shapeFileUtil;
+      @Override
+
+      public void insertGeo(File file) throws IOException {
+          System.out.println(shapeFileUtil.shpToGeoJson(file));
+      }
+  }
diff --git a/src/main/java/com/dji/sample/patches/service/impl/PatchesServiceImpl.java b/src/main/java/com/dji/sample/patches/service/impl/PatchesServiceImpl.java
new file mode 100644
index 0000000..63df1ff
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/service/impl/PatchesServiceImpl.java
@@ -0,0 +1,33 @@
+package com.dji.sample.patches.service.impl;
+
+import com.dji.sample.patches.dao.PatchesMapper;
+import com.dji.sample.patches.model.PageBean;
+import com.dji.sample.patches.model.PatchesEntity;
+import com.dji.sample.patches.service.PatchesService;
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageHelper;
+import org.opengis.geometry.coordinate.Polygon;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+@Service
+public class PatchesServiceImpl implements PatchesService {
+    @Autowired
+    private PatchesMapper mapper;
+
+    @Override
+    public PageBean limitGet(Integer id, String bsm, Polygon dkfw, String dklx, int page, int pageSize) {
+
+        //1. 设置分页参数
+        PageHelper.startPage(page,pageSize);
+
+        //2. 执行查询
+        List<PatchesEntity> PatchersList = mapper.limitGet(id,bsm,dkfw,dklx);
+        com.github.pagehelper.Page<PatchesEntity> p = (Page<PatchesEntity>) PatchersList;
+
+        //3. 封装PageBean对象
+        PageBean pageBean = new PageBean(p.getTotal(), p.getResult());
+        return pageBean;
+    }
+}
diff --git a/src/main/java/com/dji/sample/patches/utils/ShapeFileUtil.java b/src/main/java/com/dji/sample/patches/utils/ShapeFileUtil.java
new file mode 100644
index 0000000..72df6b3
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/utils/ShapeFileUtil.java
@@ -0,0 +1,101 @@
+package com.dji.sample.patches.utils;
+
+import cn.hutool.core.io.FileUtil;
+import com.alibaba.fastjson.JSONObject;
+import org.geotools.data.DataStore;
+import org.geotools.data.DataStoreFinder;
+import org.geotools.data.FeatureSource;
+import org.geotools.feature.FeatureCollection;
+import org.geotools.feature.FeatureIterator;
+import org.geotools.geojson.feature.FeatureJSON;
+import org.opengis.feature.simple.SimpleFeature;
+import org.opengis.feature.simple.SimpleFeatureType;
+import org.opengis.filter.Filter;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.*;
+
+public class ShapeFileUtil {
+    /*
+     * @param zipFile: 压缩包文件地址
+     * @return FeatureCollection
+     * @author pangshicheng
+     * @description 解析shp压缩包,并返回解析出的 FeatureCollection
+     * @date 2023/7/18 16:02
+     */
+
+    public static FeatureCollection getFeatureCollectionByShpFile(File zipFile) throws IOException {
+        try {
+            String tempDir = FileUtil.getTmpDirPath();
+            File shapeDir = new File(tempDir + File.separator + new Date().getTime());
+            shapeDir.mkdir();
+            List<String> files = ZipUtil.unZipFiles(zipFile, shapeDir.getPath() + File.separator);
+            String shapFileName = "";
+            for (String fileName : files) {
+                String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
+                if ("shp".equals(suffix)) {
+                    shapFileName = fileName;
+                }
+            }
+            File shapeFile = new File(shapFileName);
+            List<SimpleFeature> list = new ArrayList<>();
+            Map<String, Object> shapeFileParams = new HashMap();
+            shapeFileParams.put("url", shapeFile.toURI().toURL());
+            // 设置编码
+            shapeFileParams.put("charset", "GBK");
+            DataStore dataStore = DataStoreFinder.getDataStore(shapeFileParams);
+            if (dataStore == null) {
+                throw new RuntimeException("couldn't load the damn data store: " + shapeFileParams);
+            }
+            String typeName = dataStore.getTypeNames()[0];
+            FeatureSource<SimpleFeatureType, SimpleFeature> source = dataStore.getFeatureSource(typeName);
+            Filter filter = Filter.INCLUDE;
+            FeatureCollection<SimpleFeatureType, SimpleFeature> collection = source.getFeatures(filter);
+            return collection;
+        }catch (Exception e){
+            throw e;
+        }
+    }
+    /**
+     * @param zipFile:
+     * @return JSONObject
+     * @author pangshicheng
+     * @description 通过shp压缩文件,将其转换为GeoJson格式
+     * @date 2023/7/18 16:04
+     */
+    public static JSONObject shpToGeoJson(File zipFile) throws IOException {
+        FeatureJSON fjson = new FeatureJSON();
+        JSONObject geoJsonObject=new JSONObject();
+        geoJsonObject.put("type","FeatureCollection");
+        try {
+            // 获取FeatureCollection
+            FeatureCollection collection = getFeatureCollectionByShpFile(zipFile);
+
+            FeatureIterator iterator = collection.features();
+            List<JSONObject> array  = new ArrayList<JSONObject>();
+            //遍历feature转为json对象
+            while (iterator.hasNext()) {
+                SimpleFeature feature = (SimpleFeature) iterator.next();
+                StringWriter writer = new StringWriter();
+                fjson.writeFeature(feature, writer);
+                String temp = writer.toString();
+                byte[] b = temp.getBytes("iso8859-1");
+                temp = new String(b, "gbk");
+                JSONObject json = JSONObject.parseObject(temp);
+                array.add(json);
+            }
+            iterator.close();
+            //添加到geojsonObject
+            geoJsonObject.put("features",array);
+            iterator.close();
+
+        }catch (Exception e){
+            throw e;
+        }
+        return geoJsonObject;
+    }
+
+}
+
diff --git a/src/main/java/com/dji/sample/patches/utils/ZipUtil.java b/src/main/java/com/dji/sample/patches/utils/ZipUtil.java
new file mode 100644
index 0000000..f038220
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/utils/ZipUtil.java
@@ -0,0 +1,129 @@
+package com.dji.sample.patches.utils;
+
+import org.springframework.context.annotation.Configuration;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+/**
+ * @author soulmate丶
+ * @date 2021-10-26
+ */
+@Configuration
+public class ZipUtil {
+
+
+    /**
+     * 保存zip文件到本地并调用解压方法并返回解压出的文件的路径集合
+     *
+     * @param file 文件
+     * @return list //解压出的文件的路径合集
+     */
+    private static String zipPath = "D:/ceshi/tuban.zip";//zip根路径
+
+    /**
+     * zip解压
+     *
+     * @param srcFile     zip源文件
+     * @param destDirPath 解压后的目标文件夹
+     * @return list 解压文件的路径合集
+     * @throws RuntimeException 解压失败会抛出运行时异常
+     */
+    public static List<String> unZipFiles(File srcFile, String destDirPath) throws RuntimeException {
+        List<String> list = new ArrayList<>();
+        long start = System.currentTimeMillis();
+        // 判断源文件是否存在
+        if (!srcFile.exists()) {
+            throw new RuntimeException(srcFile.getPath() + "所指文件不存在");
+        }
+        // 开始解压
+        ZipFile zipFile = null;
+        try {
+            zipFile = new ZipFile(srcFile, Charset.forName("GBK"));
+            Enumeration<?> entries = zipFile.entries();
+            while (entries.hasMoreElements()) {
+                ZipEntry entry = (ZipEntry) entries.nextElement();
+
+                // 如果是文件夹,就创建个文件夹
+                if (entry.isDirectory()) {
+                    String dirPath = destDirPath + File.separator + entry.getName();
+                    File dir = new File(dirPath);
+                    dir.mkdirs();
+                } else {
+                    // 如果是文件,就先创建一个文件,然后用io流把内容copy过去
+                    File targetFile = new File(destDirPath + File.separator + entry.getName());
+                    // 保证这个文件的父文件夹必须要存在
+
+                    list.add(destDirPath + entry.getName());
+                    if (!targetFile.getParentFile().exists()) {
+
+                    }
+                    targetFile.createNewFile();
+                    // 将压缩文件内容写入到这个文件中
+                    InputStream is = zipFile.getInputStream(entry);
+                    FileOutputStream fos = new FileOutputStream(targetFile);
+                    int len;
+                    byte[] buf = new byte[1024];
+                    while ((len = is.read(buf)) != -1) {
+                        fos.write(buf, 0, len);
+                    }
+                    // 关流顺序,先打开的后关闭
+                    fos.close();
+                    is.close();
+                }
+            }
+            long end = System.currentTimeMillis();
+
+        } catch (Exception e) {
+            throw new RuntimeException("unzip error from ZipUtils", e);
+        } finally {
+            if (zipFile != null) {
+                try {
+                    zipFile.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return list;
+    }
+
+    /**
+     * @param filePath 临时文件的删除
+     *                 删除文件夹里面子目录
+     *                 再删除文件夹
+     */
+    public static void deleteFiles(String filePath) {
+        File file = new File(filePath);
+        if ((!file.exists()) || (!file.isDirectory())) {
+
+            return;
+        }
+        String[] tempList = file.list();
+        File temp = null;
+        for (int i = 0; i < tempList.length; i++) {
+            if (filePath.endsWith(File.separator)) {
+                temp = new File(filePath + tempList[i]);
+            } else {
+                temp = new File(filePath + File.separator + tempList[i]);
+            }
+            if (temp.isFile()) {
+                temp.delete();
+            }
+            if (temp.isDirectory()) {
+                deleteFiles(filePath + "\\" + tempList[i]);
+            }
+        }
+        // 空文件的删除
+        file.delete();
+    }
+}
+
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 5ac0f63..4e14ae5 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -39,6 +39,9 @@
   control:
     prefix: /control
     version: /api/v1
+  patches:
+    prefix: /patches
+    version: /api/v1
 
 # Tutorial: https://www.alibabacloud.com/help/en/object-storage-service/latest/use-a-temporary-credential-provided-by-sts-to-access-oss
 #oss:

--
Gitblit v1.9.3