From b6b0cb226fcf184525ee7b36af3a09471e9c0057 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期一, 25 三月 2024 11:29:33 +0800
Subject: [PATCH] 修改数据统计的查询条件

---
 src/main/java/com/lf/server/helper/ShpHelper.java |  196 ++++++++++++++++++++++++++----------------------
 1 files changed, 107 insertions(+), 89 deletions(-)

diff --git a/src/main/java/com/lf/server/helper/ShpHelper.java b/src/main/java/com/lf/server/helper/ShpHelper.java
index 0db87a4..bd43af8 100644
--- a/src/main/java/com/lf/server/helper/ShpHelper.java
+++ b/src/main/java/com/lf/server/helper/ShpHelper.java
@@ -1,5 +1,6 @@
 package com.lf.server.helper;
 
+import com.lf.server.entity.all.StaticData;
 import com.lf.server.entity.ctrl.MarkJsonEntity;
 import com.lf.server.entity.ctrl.ShpRecordEntity;
 import org.apache.commons.logging.Log;
@@ -25,14 +26,21 @@
      * 璇诲彇Shp绗竴鏉¤褰曠殑WKT
      */
     public static ShpRecordEntity readShpFirstRecord(String filePath) {
+        Driver driver = null;
+        DataSource dataSource = null;
+        Layer layer = null;
         try {
-            org.gdal.ogr.Driver driver = ogr.GetDriverByName("ESRI shapefile");
-            if (driver == null) {
+            driver = ogr.GetDriverByName("ESRI shapefile");
+            if (null == driver) {
                 return null;
             }
 
-            DataSource dataSource = driver.Open(filePath);
-            Layer layer = dataSource.GetLayer(0);
+            dataSource = driver.Open(filePath);
+            if (null == dataSource) {
+                return null;
+            }
+
+            layer = dataSource.GetLayer(0);
             if (layer.GetFeatureCount() < 1) {
                 return null;
             }
@@ -43,14 +51,12 @@
             Feature feature = layer.GetFeature(0);
             String wkt = feature.GetGeometryRef().ExportToWkt();
 
-            layer.delete();
-            dataSource.delete();
-            driver.delete();
-
             return new ShpRecordEntity(wkt, csid);
         } catch (Exception ex) {
             log.error(ex.getMessage(), ex);
             return null;
+        } finally {
+            GdbHelper.delete(layer, dataSource, driver);
         }
     }
 
@@ -58,67 +64,77 @@
      * 璇诲彇ShapeFile鏂囦欢鑾峰彇Mark瀹炰綋绫�
      */
     public static List<MarkJsonEntity> readShpForMarks(String filePath) {
+        Driver driver = null;
+        DataSource dataSource = null;
+        Layer layer = null;
         try {
-            org.gdal.ogr.Driver driver = ogr.GetDriverByName("ESRI shapefile");
-            if (driver == null) {
+            driver = ogr.GetDriverByName("ESRI shapefile");
+            if (null == driver) {
                 return null;
             }
 
-            DataSource dataSource = driver.Open(filePath);
-            Layer 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) {
+            dataSource = driver.Open(filePath);
+            if (null == dataSource) {
                 return null;
             }
 
-            List<MarkJsonEntity> list = new ArrayList<MarkJsonEntity>();
-            for (int i = 0; i < count; 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;
-                    }
-                }
-                me.setWkt(f.GetGeometryRef().ExportToWkt());
-
-                list.add(me);
+            layer = dataSource.GetLayer(0);
+            if (layer.GetFeatureCount() == 0) {
+                return null;
             }
 
-            layer.delete();
-            driver.delete();
+            Map<Integer, Field> fields = getShpFields(layer);
 
-            return list;
+            return setMarkJsonEntity(layer, fields);
         } catch (Exception ex) {
             log.error(ex.getMessage(), ex);
             return null;
+        } finally {
+            GdbHelper.delete(layer, dataSource, driver);
         }
+    }
+
+    /**
+     * 鑾峰彇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<>();
+        for (int i = 0; i < layer.GetFeatureCount(); i++) {
+            Feature f = layer.GetFeature(i);
+
+            MarkJsonEntity me = new MarkJsonEntity(i + 1L);
+            for (Integer key : fieldMap.keySet()) {
+                Field field = fieldMap.get(key);
+                GdbHelper.setValue(me, f, field, key);
+            }
+            me.setWkt(f.GetGeometryRef().ExportToWkt());
+
+            list.add(me);
+        }
+
+        return list;
     }
 
     /**
@@ -130,51 +146,52 @@
      * @return ShapeFile鏂囦欢鍚�
      */
     public static String createShp(List<MarkJsonEntity> list, String path, String type) {
+        Driver driver = null;
+        DataSource dataSource = null;
+        Layer layer = null;
         try {
-            org.gdal.ogr.Driver driver = ogr.GetDriverByName("ESRI shapefile");
-            if (driver == null) {
+            driver = ogr.GetDriverByName("ESRI shapefile");
+            if (null == driver) {
                 return null;
             }
 
             String filePath = path + File.separator + type.toLowerCase() + ".shp";
             // DataSource ds = driver.Open(filePath, 0)
-            DataSource ds = driver.CreateDataSource(filePath, null);
+            dataSource = driver.CreateDataSource(filePath, null);
+            if (null == dataSource) {
+                return null;
+            }
 
             SpatialReference sr = new SpatialReference();
-            sr.ImportFromEPSG(4326);
+            sr.ImportFromEPSG(StaticData.I4326);
 
             int geoType = getGeometryType(type);
-            Layer layer = ds.CreateLayer(type.toLowerCase(), sr, geoType);
+            layer = dataSource.CreateLayer(type.toLowerCase(), sr, geoType);
+            if (null == layer) {
+                return null;
+            }
 
-            FieldDefn fdName = new FieldDefn("name", ogr.OFTString);
-            fdName.SetWidth(50);
-            layer.CreateField(fdName, 0);
-
-            FieldDefn fdProps = new FieldDefn("props", ogr.OFTString);
-            fdProps.SetWidth(1024);
-            // layer.DeleteField(layer.FindFieldIndex("name", 1))
-            layer.CreateField(fdProps, 1);
+            List<Field> fields = new ArrayList<>();
+            GdbHelper.getFields(MarkJsonEntity.class, fields, StaticData.MARK_EXCLUDE_FIELDS);
+            GdbHelper.addLayerField(layer, fields);
 
             FeatureDefn featureDefn = layer.GetLayerDefn();
-            for (MarkJsonEntity mje : list) {
-                Geometry geo = Geometry.CreateFromWkt(mje.getWkt());
-
+            for (MarkJsonEntity t : list) {
                 Feature f = new Feature(featureDefn);
-                f.SetField(0, mje.getName());
-                f.SetField(1, mje.getProps());
+                GdbHelper.setFeatureData(f, fields, t);
+
+                Geometry geo = Geometry.CreateFromWkt(t.getWkt());
                 f.SetGeometry(geo);
 
                 layer.CreateFeature(f);
             }
 
-            layer.delete();
-            ds.delete();
-            driver.delete();
-
             return filePath;
         } catch (Exception ex) {
             log.error(ex.getMessage(), ex);
             return null;
+        } finally {
+            GdbHelper.delete(layer, dataSource, driver);
         }
     }
 
@@ -184,40 +201,41 @@
     private static int getGeometryType(String type) {
         switch (type) {
             case "POINT":
-                return 1;
+                return ogr.wkbPoint;
             case "LINESTRING":
-                return 2;
+                return ogr.wkbLineString;
             case "POLYGON":
-                return 3;
+                return ogr.wkbPolygon;
             default:
-                return -1;
+                return ogr.wkbUnknown;
         }
     }
 
     /**
      * 璇诲彇鏁版嵁
      */
-    public static <T> List<T> readData(Class clazz, String filePath) {
+    public static <T> List<T> readData(Class clazz, String filePath, boolean isTransform) {
         List<T> list = new ArrayList<>();
+
+        Driver driver = null;
+        DataSource dataSource = null;
         try {
-            org.gdal.ogr.Driver driver = ogr.GetDriverByName("ESRI shapefile");
+            driver = ogr.GetDriverByName("ESRI shapefile");
             if (null == driver) {
                 return list;
             }
 
-            DataSource dataSource = driver.Open(filePath);
+            dataSource = driver.Open(filePath);
             if (null == dataSource) {
                 return list;
             }
 
             Layer layer = dataSource.GetLayer(0);
-
-            GdbHelper.readLayer(clazz, layer, list);
-
-            dataSource.delete();
-            driver.delete();
+            GdbHelper.readLayer(clazz, layer, list, isTransform);
         } catch (Exception ex) {
             log.error(ex.getMessage(), ex);
+        } finally {
+            GdbHelper.delete(dataSource, driver);
         }
 
         return list;

--
Gitblit v1.9.3