From 7e754e7bdbdb8b2c3086938a67421aebab2fb493 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期四, 29 十二月 2022 20:48:35 +0800
Subject: [PATCH] 12.29.7

---
 src/main/java/com/lf/server/service/show/PipelineService.java |   97 ++++++++++++++++++++++++++++++++++++------------
 1 files changed, 73 insertions(+), 24 deletions(-)

diff --git a/src/main/java/com/lf/server/service/show/PipelineService.java b/src/main/java/com/lf/server/service/show/PipelineService.java
index e750f2c..7e32c8b 100644
--- a/src/main/java/com/lf/server/service/show/PipelineService.java
+++ b/src/main/java/com/lf/server/service/show/PipelineService.java
@@ -1,5 +1,7 @@
 package com.lf.server.service.show;
 
+import com.lf.server.entity.all.BaseGeoEntity;
+import com.lf.server.entity.all.StaticData;
 import com.lf.server.entity.data.DownloadEntity;
 import com.lf.server.entity.data.MetaFileEntity;
 import com.lf.server.entity.show.PipelineEntity;
@@ -8,20 +10,22 @@
 import com.lf.server.mapper.all.GeomBaseMapper;
 import com.lf.server.mapper.data.DownloadMapper;
 import com.lf.server.mapper.show.PipelineMapper;
+import com.lf.server.service.all.BaseQueryService;
 import net.lingala.zip4j.ZipFile;
 import net.lingala.zip4j.model.FileHeader;
 import net.lingala.zip4j.model.ZipParameters;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.gdal.ogr.DataSource;
-import org.gdal.ogr.Driver;
-import org.gdal.ogr.Layer;
-import org.gdal.ogr.ogr;
+import org.gdal.ogr.*;
+import org.gdal.osr.SpatialReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.io.File;
 import java.lang.reflect.Field;
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -67,7 +71,7 @@
      * @param pwd 瀵嗙爜
      * @return 涓嬭浇鏂囦欢GUID
      */
-    public String createZipFile(UserEntity ue, Map<String, List<?>> map, String pwd) throws Exception {
+    public String createZipFile(UserEntity ue, Map<String, List<PipelineEntity>> map, String pwd) throws Exception {
         if (map.size() == 0) {
             return null;
         }
@@ -80,7 +84,7 @@
         if (file.exists() && file.isDirectory()) {
             FileHelper.deleteDir(filePath);
         }
-        //createGdb(filePath, map);
+        createGdb(filePath, map);
 
         String zipName = tempName + ".gdb.zip";
         String zipFile = pathHelper.getDownloadFullPath() + File.separator + zipName;
@@ -99,7 +103,7 @@
     /**
      * 鍒涘缓GDB
      */
-    public static void createGdb(String filePath, Map<String, List<?>> map) throws Exception {
+    public static void createGdb(String filePath, Map<String, List<PipelineEntity>> map) throws Exception {
         Driver driver = null;
         DataSource dataSource = null;
         try {
@@ -117,24 +121,14 @@
             for (String key : map.keySet()) {
                 Layer layer = null;
                 try {
+                    List<PipelineEntity> list = map.get(key);
+                    layer = createLayer(dataSource, key, list.get(0));
 
-//                    layer = createLayer(dataSource, baseMapper);
-//                    if (null == layer) {
-//                        continue;
-//                    }
-//
-//                    String className = ClassHelper.getClassName(baseMapper);
-//                    Class clazz = ClassHelper.getEntityClass(className);
-//                    if (null == clazz) {
-//                        continue;
-//                    }
-//
-//                    List<Field> fields = new ArrayList<>();
-//                    // fields.add(getGeomField(clazz))
-//                    getFields(clazz, fields);
-//                    addLayerField(layer, fields);
-//
-//                    setLayerData(layer, fields, map.get(key));
+                    List<Field> fields = new ArrayList<>();
+                    getFields(PipelineEntity.class, fields);
+
+                    GdbHelper.addLayerField(layer, fields);
+                    setLayerData(layer, fields, list);
                 } finally {
                     if (null != layer) {
                         layer.delete();
@@ -153,6 +147,61 @@
     }
 
     /**
+     * 鍒涘缓鍥惧眰
+     */
+    private static Layer createLayer(DataSource dataSource, String tab, PipelineEntity pe) {
+        int geomType = pe.getWkt().contains("POINT") ? ogr.wkbMultiPoint : ogr.wkbMultiLineString;
+
+        SpatialReference sr = new SpatialReference();
+        sr.ImportFromEPSG(4490);
+
+        return dataSource.CreateLayer(tab, sr, geomType, null);
+    }
+
+    /**
+     * 鑾峰彇瀛楁
+     */
+    private static void getFields(Class clazz, List<Field> list) {
+        try {
+            Field[] fields = clazz.getDeclaredFields();
+            for (Field f : fields) {
+                if (StaticData.GDB_EXCLUDE_FIELDS.contains(f.getName())) {
+                    continue;
+                }
+
+                f.setAccessible(true);
+                list.add(f);
+            }
+
+            if (!StaticData.OBJECT.equals(clazz.getSuperclass().getName())) {
+                getFields(clazz.getSuperclass(), list);
+            }
+        } catch (Exception ex) {
+            //
+        }
+    }
+
+    /**
+     * 璁剧疆鍥惧眰鏁版嵁
+     */
+    private static void setLayerData(Layer layer,  List<Field> fields, List<PipelineEntity> list) throws Exception {
+        for (PipelineEntity t : list) {
+            Feature f = new Feature(layer.GetLayerDefn());
+
+            String wkt = t.getWkt();
+            if (!wkt.contains("MULTI")) {
+                wkt = wkt.replace("POINT", "MULTIPOINT").replace("LINESTRING", "MULTILINESTRING(") + (wkt.contains("LINESTRING") ? ")" : "");
+            }
+
+            Geometry geom = Geometry.CreateFromWkt(wkt);
+            f.SetGeometry(geom);
+
+            GdbHelper.setFeatureData(f, fields, t);
+            layer.CreateFeature(f);
+        }
+    }
+
+    /**
      * 娣诲姞Zip鏂囦欢
      */
     private void addZipFiles(ZipFile zip, ZipParameters params, File[] files) {

--
Gitblit v1.9.3