From d3f4ed7fe49808a944053674f757edd889e192b2 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期三, 15 二月 2023 12:51:33 +0800
Subject: [PATCH] 1

---
 src/main/java/com/lf/server/helper/ShpHelper.java |   59 ++++++++++++++++++++++++++++-------------------------------
 1 files changed, 28 insertions(+), 31 deletions(-)

diff --git a/src/main/java/com/lf/server/helper/ShpHelper.java b/src/main/java/com/lf/server/helper/ShpHelper.java
index 936dfd3..1005a87 100644
--- a/src/main/java/com/lf/server/helper/ShpHelper.java
+++ b/src/main/java/com/lf/server/helper/ShpHelper.java
@@ -78,25 +78,13 @@
             }
 
             layer = dataSource.GetLayer(0);
-            FeatureDefn featureDefn = layer.GetLayerDefn();
-            Map<Integer, Field> fieldMap = new HashMap(5);
-            for (int i = 0, count = featureDefn.GetFieldCount(); i < count; i++) {
-                try {
-                    FieldDefn fieldDefn = featureDefn.GetFieldDefn(i);
-                    Field field = MarkJsonEntity.class.getDeclaredField(fieldDefn.GetName().toLowerCase());
-                    field.setAccessible(true);
-                    fieldMap.put(i, field);
-                } catch (Exception e) {
-                    //
-                }
-            }
-
-            long count = layer.GetFeatureCount();
-            if (count == 0 || fieldMap.size() == 0) {
+            if (layer.GetFeatureCount() == 0) {
                 return null;
             }
 
-            return setMarkJsonEntity(layer, fieldMap);
+            Map<Integer, Field> fields = getShpFields(layer);
+
+            return setMarkJsonEntity(layer, fields);
         } catch (Exception ex) {
             log.error(ex.getMessage(), ex);
             return null;
@@ -106,30 +94,39 @@
     }
 
     /**
+     * 鑾峰彇shp瀛楁淇℃伅
+     */
+    private static Map<Integer, Field> getShpFields(Layer layer) {
+        FeatureDefn featureDefn = layer.GetLayerDefn();
+
+        Map<Integer, Field> fields = new HashMap(3);
+        for (int i = 0, count = featureDefn.GetFieldCount(); i < count; i++) {
+            try {
+                FieldDefn fieldDefn = featureDefn.GetFieldDefn(i);
+                Field field = MarkJsonEntity.class.getDeclaredField(fieldDefn.GetName());
+                field.setAccessible(true);
+
+                fields.put(i, field);
+            } catch (Exception e) {
+                //
+            }
+        }
+
+        return fields;
+    }
+
+    /**
      * 璁剧疆鏍囩粯瀹炰綋绫�
      */
     private static List<MarkJsonEntity> setMarkJsonEntity(Layer layer, Map<Integer, Field> fieldMap) throws Exception {
-        List<MarkJsonEntity> list = new ArrayList<MarkJsonEntity>();
+        List<MarkJsonEntity> list = new ArrayList<>();
         for (int i = 0; i < layer.GetFeatureCount(); i++) {
             Feature f = layer.GetFeature(i);
 
             MarkJsonEntity me = new MarkJsonEntity(i + 1);
             for (Integer key : fieldMap.keySet()) {
                 Field field = fieldMap.get(key);
-                switch (field.getType().toString()) {
-                    case "double":
-                        field.set(me, f.GetFieldAsDouble(i));
-                        break;
-                    case "long":
-                        field.set(me, f.GetFieldAsInteger64(i));
-                        break;
-                    case "int":
-                        field.set(me, f.GetFieldAsInteger(i));
-                        break;
-                    default:
-                        field.set(me, f.GetFieldAsString(i));
-                        break;
-                }
+                GdbHelper.setValue(me, f, field, key);
             }
             me.setWkt(f.GetGeometryRef().ExportToWkt());
 

--
Gitblit v1.9.3