From 7e80ca95f631ecbce3d7de1b89f62d4f6de6d58f Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期六, 26 十一月 2022 09:54:36 +0800
Subject: [PATCH] q

---
 src/main/java/com/lf/server/helper/ShpHelper.java |  138 +++++++++++++++++++++++++++------------------
 1 files changed, 82 insertions(+), 56 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..454081f 100644
--- a/src/main/java/com/lf/server/helper/ShpHelper.java
+++ b/src/main/java/com/lf/server/helper/ShpHelper.java
@@ -25,14 +25,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 +50,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,15 +63,21 @@
      * 璇诲彇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);
+            dataSource = driver.Open(filePath);
+            if (null == dataSource) {
+                return null;
+            }
 
+            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++) {
@@ -85,40 +96,47 @@
                 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.delete();
-            driver.delete();
-
-            return list;
+            return setMarkJsonEntity(layer, fieldMap);
         } catch (Exception ex) {
             log.error(ex.getMessage(), ex);
             return null;
+        } finally {
+            GdbHelper.delete(layer, dataSource, driver);
         }
+    }
+
+    /**
+     * 璁剧疆鏍囩粯瀹炰綋绫�
+     */
+    private static List<MarkJsonEntity> setMarkJsonEntity(Layer layer, Map<Integer, Field> fieldMap) throws Exception {
+        List<MarkJsonEntity> list = new ArrayList<MarkJsonEntity>();
+        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;
+                }
+            }
+            me.setWkt(f.GetGeometryRef().ExportToWkt());
+
+            list.add(me);
+        }
+
+        return list;
     }
 
     /**
@@ -130,21 +148,30 @@
      * @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);
 
             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);
@@ -167,14 +194,12 @@
                 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);
         }
     }
 
@@ -199,25 +224,26 @@
      */
     public static <T> List<T> readData(Class clazz, String filePath) {
         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();
         } catch (Exception ex) {
             log.error(ex.getMessage(), ex);
+        } finally {
+            GdbHelper.delete(dataSource, driver);
         }
 
         return list;

--
Gitblit v1.9.3