From 195488d44354e199059fa1ae31e1c7e967074b30 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期一, 19 十二月 2022 13:43:09 +0800
Subject: [PATCH] 1

---
 src/main/java/com/lf/server/helper/GdbHelper.java |   73 +++++++++++++++++++++++++-----------
 1 files changed, 51 insertions(+), 22 deletions(-)

diff --git a/src/main/java/com/lf/server/helper/GdbHelper.java b/src/main/java/com/lf/server/helper/GdbHelper.java
index e69d0dc..17ed1ba 100644
--- a/src/main/java/com/lf/server/helper/GdbHelper.java
+++ b/src/main/java/com/lf/server/helper/GdbHelper.java
@@ -7,6 +7,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.gdal.ogr.*;
+import org.gdal.osr.SpatialReference;
 
 import java.lang.reflect.Field;
 import java.sql.Timestamp;
@@ -325,10 +326,10 @@
     /**
      * 鍒涘缓GDB
      */
-    public static void createGdb(String filePath,  Map<String, List<?>> map){
+    public static void createGdb(String filePath,  Map<String, List<?>> map) {
         Driver driver = null;
         DataSource dataSource = null;
-        try{
+        try {
             driver = ogr.GetDriverByName("OpenFileGDB");
             if (null == driver) {
                 return;
@@ -339,14 +340,13 @@
                 return;
             }
 
-            for(String key : map.keySet()){
+            for (String key : map.keySet()) {
                 GeomBaseMapper baseMapper = ClassHelper.getGeoBaseMapper(key);
                 if (null == baseMapper) {
                     continue;
                 }
-
-                String tab = BaseQueryService.getTabName(baseMapper);
-                if (StringHelper.isNull(tab)) {
+                Layer layer = createLayer(dataSource, baseMapper);
+                if(null == layer){
                     continue;
                 }
 
@@ -354,29 +354,58 @@
                 Class clazz = ClassHelper.getEntityClass(className);
 
                 List<?> list = map.get(key);
-
             }
-        }catch (Exception ex){
+        } catch (Exception ex) {
             log.error(ex.getMessage(), ex);
-        }finally {
+        } finally {
             GdbHelper.delete(dataSource, driver);
         }
     }
 
-    private static <T> String getGeomType(GeomBaseMapper baseMapper, List<T> list) {
-        for (T t : list){
-            if (!(t instanceof BaseGeoEntity)){
-                return null;
-            }
-
-            BaseGeoEntity entity = (BaseGeoEntity)t;
-            if (StringHelper.isEmpty(entity.getGeom())){
-                continue;
-            }
-
-
+    /**
+     * 鍒涘缓鍥惧眰
+     */
+    private static Layer createLayer(DataSource dataSource, GeomBaseMapper baseMapper ) {
+        String tab = BaseQueryService.getTabName(baseMapper);
+        if (StringHelper.isNull(tab)) {
+            return null;
         }
 
-        return null;
+        String geomType = baseMapper.selectGeometryType(tab);
+        if (StringHelper.isEmpty(geomType)) {
+            return null;
+        }
+
+        Integer srid = baseMapper.selectSrid(tab);
+        SpatialReference sr = new SpatialReference();
+        sr.ImportFromEPSG(null == srid ? 4326 : srid);
+
+        Layer layer = dataSource.CreateLayer(tab, sr, getGeomType(geomType), null);
+
+        return layer;
+    }
+
+    /**
+     * 鑾峰彇Geom绫诲埆
+     */
+    private static Integer getGeomType(String geomType) {
+        if (StringHelper.isEmpty(geomType)){
+            return ogr.wkbUnknown;
+        }
+
+        switch (geomType){
+            case "ST_Point":
+                return ogr.wkbPoint;
+            case "ST_LineString":
+                return ogr.wkbLineString;
+            case "ST_MultiLineString":
+                return ogr.wkbMultiLineString;
+            case "ST_Polygon":
+                return ogr.wkbPolygon;
+            case "ST_MultiPolygon":
+                return ogr.wkbMultiPolygon;
+            default:
+                return ogr.wkbUnknown;
+        }
     }
 }

--
Gitblit v1.9.3