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 | 163 +++++++++++++++++++++++++++++++----------------------- 1 files changed, 93 insertions(+), 70 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..1005a87 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,67 +63,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 + 1); + 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,21 +145,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); @@ -161,20 +185,18 @@ Feature f = new Feature(featureDefn); f.SetField(0, mje.getName()); - f.SetField(1, mje.getProps()); + //f.SetField(1, mje.getProps()); 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); } } @@ -199,25 +221,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