src/main/java/com/lf/server/helper/GdbHelper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lf/server/helper/MdbHelper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lf/server/helper/ShpHelper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/lf/server/helper/GdbHelper.java
@@ -21,17 +21,62 @@ public static List<String> excludeFields = new ArrayList<>(Arrays.asList("gid", "shape_leng")); /** * 销毁资源 */ public static void delete(Layer layer) { try { if (null != layer) { layer.delete(); } } catch (Exception ex) { log.error(ex.getMessage(), ex); } } /** * 销毁资源 */ public static void delete(DataSource dataSource, Driver driver) { try { if (null != dataSource) { dataSource.delete(); } } catch (Exception ex) { log.error(ex.getMessage(), ex); } try { if (null != driver) { driver.delete(); } } catch (Exception ex) { log.error(ex.getMessage(), ex); } } /** * 销毁资源 */ public static void delete(Layer layer, DataSource dataSource, Driver driver) { delete(layer); delete(dataSource, driver); } /** * 获取表名 */ public static List<String> getTabNames(String filePath) { List<String> list = new ArrayList<>(); Driver driver = null; DataSource dataSource = null; try { org.gdal.ogr.Driver driver = ogr.GetDriverByName("OpenFileGDB"); driver = ogr.GetDriverByName("OpenFileGDB"); if (null == driver) { return list; } DataSource dataSource = driver.Open(filePath, 0); dataSource = driver.Open(filePath, 0); if (null == dataSource) { return list; } @@ -42,11 +87,10 @@ layer.delete(); } dataSource.delete(); driver.delete(); } catch (Exception ex) { log.error(ex.getMessage(), ex); } finally { GdbHelper.delete(dataSource, driver); } return list; @@ -57,20 +101,22 @@ */ public static <T> List<T> readData(Class clazz, String filePath, String layerName) { List<T> list = new ArrayList<>(); Driver driver = null; DataSource dataSource = null; try { org.gdal.ogr.Driver driver = ogr.GetDriverByName("OpenFileGDB"); driver = ogr.GetDriverByName("OpenFileGDB"); if (null == driver) { return list; } DataSource dataSource = driver.Open(filePath, 0); dataSource = driver.Open(filePath, 0); if (null == dataSource) { return list; } for (int i = 0, count = dataSource.GetLayerCount(); i < count; i++) { Layer layer = dataSource.GetLayer(i); if (layer.GetName().equals(layerName)) { GdbHelper.readLayer(clazz, layer, list); break; @@ -78,11 +124,10 @@ layer.delete(); } dataSource.delete(); driver.delete(); } catch (Exception ex) { log.error(ex.getMessage(), ex); } finally { GdbHelper.delete(dataSource, driver); } return list; @@ -116,9 +161,7 @@ } catch (Exception ex) { log.error(ex.getMessage(), ex); } finally { if (null != layer) { layer.delete(); } GdbHelper.delete(layer); } } @@ -271,8 +314,6 @@ LocalTime.of(pnHour[0], pnMinute[0], s, ns) ); Timestamp timestamp = Timestamp.valueOf(localDateTime); return timestamp; return Timestamp.valueOf(localDateTime); } } src/main/java/com/lf/server/helper/MdbHelper.java
@@ -3,6 +3,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.gdal.ogr.DataSource; import org.gdal.ogr.Driver; import org.gdal.ogr.Layer; import org.gdal.ogr.ogr; @@ -21,13 +22,16 @@ */ public static List<String> getTabNames(String filePath) { List<String> list = new ArrayList<>(); Driver driver = null; DataSource dataSource = null; try { org.gdal.ogr.Driver driver = ogr.GetDriverByName("PGeo"); driver = ogr.GetDriverByName("PGeo"); if (null == driver) { return list; } DataSource dataSource = driver.Open(filePath, 0); dataSource = driver.Open(filePath, 0); if (null == dataSource) { return list; } @@ -38,11 +42,10 @@ layer.delete(); } dataSource.delete(); driver.delete(); } catch (Exception ex) { log.error(ex.getMessage(), ex); } finally { GdbHelper.delete(dataSource, driver); } return list; @@ -53,20 +56,22 @@ */ public static <T> List<T> readData(Class clazz, String filePath, String layerName) { List<T> list = new ArrayList<>(); Driver driver = null; DataSource dataSource = null; try { org.gdal.ogr.Driver driver = ogr.GetDriverByName("PGeo"); driver = ogr.GetDriverByName("PGeo"); if (null == driver) { return list; } DataSource dataSource = driver.Open(filePath, 0); dataSource = driver.Open(filePath, 0); if (null == dataSource) { return list; } for (int i = 0, count = dataSource.GetLayerCount(); i < count; i++) { Layer layer = dataSource.GetLayer(i); if (layer.GetName().equals(layerName)) { GdbHelper.readLayer(clazz, layer, list); break; @@ -74,11 +79,10 @@ layer.delete(); } dataSource.delete(); driver.delete(); } catch (Exception ex) { log.error(ex.getMessage(), ex); } finally { GdbHelper.delete(dataSource, driver); } return list; 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;