From 93c13c47fd35493bbca35be7baccfd1a0ba9e9ef Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期五, 16 十二月 2022 09:52:38 +0800 Subject: [PATCH] 1 --- src/main/java/com/lf/server/helper/GdbHelper.java | 38 ++++++++++++++++++++------------------ 1 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/lf/server/helper/GdbHelper.java b/src/main/java/com/lf/server/helper/GdbHelper.java index 115776a..21fc9cf 100644 --- a/src/main/java/com/lf/server/helper/GdbHelper.java +++ b/src/main/java/com/lf/server/helper/GdbHelper.java @@ -1,5 +1,6 @@ package com.lf.server.helper; +import com.lf.server.entity.all.StaticData; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.gdal.ogr.*; @@ -18,7 +19,7 @@ public class GdbHelper { private final static Log log = LogFactory.getLog(GdbHelper.class); - public static List<String> excludeFields = new ArrayList<>(Arrays.asList("gid", "shape_leng")); + private final static String OBJECT ="java.lang.Object"; /** * 閿�姣佽祫婧� @@ -73,11 +74,13 @@ try { driver = ogr.GetDriverByName("OpenFileGDB"); if (null == driver) { + log.error("GdbHelper.getTabNames: OpenFileGDB is null"); return list; } dataSource = driver.Open(filePath, 0); if (null == dataSource) { + log.error("GdbHelper.getTabNames.dataSource is null. " + filePath); return list; } @@ -139,11 +142,10 @@ public static <T> void readLayer(Class clazz, Layer layer, List<T> list) { try { Field gField = getGeomField(clazz); - Map<Integer, Field> map = getFieldMapper(clazz, layer); - if (map.size() == 0) { - return; - } - if (1 > layer.GetFeatureCount()) { + + Map<Integer, Field> map = new HashMap<>(3); + getFieldMapper(clazz, layer, map); + if (map.isEmpty() || 0 == layer.GetFeatureCount()) { return; } @@ -182,16 +184,14 @@ /** * 鑾峰彇瀛楁鏄犲皠 */ - private static <T> Map<Integer, Field> getFieldMapper(Class clazz, Layer layer) { - Map<Integer, Field> map = new HashMap<>(3); - + private static <T> void getFieldMapper(Class clazz, Layer layer, Map<Integer, Field> map) { try { FeatureDefn fd = layer.GetLayerDefn(); for (int i = 0, count = fd.GetFieldCount(); i < count; i++) { FieldDefn fieldDefn = fd.GetFieldDefn(i); try { String name = fieldDefn.GetName().toLowerCase(); - if (excludeFields.contains(name)){ + if (StaticData.READ_EXCLUDE_FIELDS.contains(name)) { continue; } @@ -203,11 +203,13 @@ // } } + + if (OBJECT != clazz.getSuperclass().getName()) { + getFieldMapper(clazz.getSuperclass(), layer, map); + } } catch (Exception ex) { // } - - return map; } /** @@ -234,21 +236,21 @@ * 璁剧疆鍊� */ private static <T> void setValue(T t, Feature f, Field field, Integer i) throws Exception { - switch (field.getType().toString()) { - case "class java.math.BigDecimal": - case "class java.lang.Double": + switch (field.getType().getName()) { + case "java.math.BigDecimal": + case "java.lang.Double": case "double": field.set(t, f.GetFieldAsDouble(i)); break; - case "class java.lang.Long": + case "java.lang.Long": case "long": field.set(t, f.GetFieldAsInteger64(i)); break; - case "class java.lang.Integer": + case "java.lang.Integer": case "int": field.set(t, f.GetFieldAsInteger(i)); break; - case "class java.sql.Timestamp": + case "java.sql.Timestamp": field.set(t, getTimestamp(f, i)); break; default: -- Gitblit v1.9.3