From 5c9f31377e3f4dbdb20a5f50f5aaf6fdbbfa87f5 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期一, 19 十二月 2022 17:21:15 +0800
Subject: [PATCH] 1

---
 src/main/java/com/lf/server/helper/GdbHelper.java |   94 +++++++++++++++++++++++++++++++++++------------
 1 files changed, 70 insertions(+), 24 deletions(-)

diff --git a/src/main/java/com/lf/server/helper/GdbHelper.java b/src/main/java/com/lf/server/helper/GdbHelper.java
index 979f070..048adc4 100644
--- a/src/main/java/com/lf/server/helper/GdbHelper.java
+++ b/src/main/java/com/lf/server/helper/GdbHelper.java
@@ -341,26 +341,36 @@
             }
 
             for (String key : map.keySet()) {
-                GeomBaseMapper baseMapper = ClassHelper.getGeoBaseMapper(key);
-                if (null == baseMapper) {
-                    continue;
-                }
-                Layer layer = createLayer(dataSource, baseMapper);
-                if (null == layer) {
-                    continue;
-                }
+                Layer layer = null;
+                try {
+                    GeomBaseMapper baseMapper = ClassHelper.getGeoBaseMapper(key);
+                    if (null == baseMapper) {
+                        continue;
+                    }
+                    layer = createLayer(dataSource, baseMapper);
+                    if (null == layer) {
+                        continue;
+                    }
 
-                String className = ClassHelper.getClassName(baseMapper);
-                Class clazz = ClassHelper.getEntityClass(className);
-                List<Field> fields = new ArrayList<>();
-                getFields(clazz, fields);
+                    String className = ClassHelper.getClassName(baseMapper);
+                    Class clazz = ClassHelper.getEntityClass(className);
+                    Field gField = getGeomField(clazz);
+                    if (null == gField) {
+                        continue;
+                    }
 
-                Field gField = getGeomField(clazz);
-                if (null == gField) {
-                    continue;
+                    List<Field> fields = new ArrayList<>();
+                    getFields(clazz, fields);
+                    addLayerField(layer, fields);
+
+                    setLayerData(layer, fields, map.get(key));
+                } catch (Exception e) {
+                    log.error(e.getMessage(), e);
+                } finally {
+                    if (null != layer) {
+                        layer.delete();
+                    }
                 }
-
-                List<?> list = map.get(key);
             }
         } catch (Exception ex) {
             log.error(ex.getMessage(), ex);
@@ -421,11 +431,7 @@
         try {
             Field[] fields = clazz.getDeclaredFields();
             for (Field f : fields) {
-//                if ("geom".equals(f.getName())) {
-//                    continue;
-//                }
-
-                if (StaticData.READ_EXCLUDE_FIELDS.contains(f.getName())) {
+                if (StaticData.GDB_EXCLUDE_FIELDS.contains(f.getName())) {
                     continue;
                 }
 
@@ -448,7 +454,6 @@
         for (int i = 0, c = list.size(); i < c; i++) {
             Field f = list.get(i);
             FieldDefn fd = getLayerField(f);
-
             layer.CreateField(fd, i);
         }
     }
@@ -456,8 +461,9 @@
     private static FieldDefn getLayerField(Field f ) {
         int fieldType = getFieldType(f);
         FieldDefn fd = new FieldDefn(f.getName(), fieldType);
-        if (fieldType == ogr.OFTString) {
 
+        if (fieldType == ogr.OFTString) {
+            // fd.SetWidth(100)
         }
 
         return fd;
@@ -484,4 +490,44 @@
                 return ogr.OFTString;
         }
     }
+
+    /**
+     * 璁剧疆鍥惧眰鏁版嵁
+     */
+    private static <T> void setLayerData(Layer layer,  List<Field> fields, List<T> list) throws Exception {
+        for (T t : list) {
+            Feature f = new Feature(layer.GetLayerDefn());
+
+            BaseGeoEntity geoEntity = (BaseGeoEntity) t;
+            Geometry geom = Geometry.CreateFromWkt(geoEntity.getGeom());
+            f.SetGeometry(geom);
+
+            for (int i = 0, c = fields.size(); i < c; i++) {
+                Field field = fields.get(i);
+                switch (field.getType().getName()) {
+                    case "java.math.BigDecimal":
+                    case "java.lang.Double":
+                    case "double":
+                        Double d = field.getDouble(t);
+                        f.SetField(i, d);
+                    case "java.lang.Long":
+                    case "long":
+                        Long l = field.getLong(t);
+                        f.SetField(i, l);
+                    case "java.lang.Integer":
+                    case "int":
+                        Integer n = field.getInt(t);
+                        f.SetField(i, n);
+                    case "java.sql.Timestamp":
+                        //return ogr.OFTDateTime;
+                    default:
+                        String str = (String) field.get(t);
+                        f.SetField(i, str);
+                        break;
+                }
+            }
+
+            layer.CreateFeature(f);
+        }
+    }
 }

--
Gitblit v1.9.3