From e26af85e049516e6ce2b082bc2bc90bf71643e95 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期五, 24 三月 2023 09:06:30 +0800 Subject: [PATCH] 1 --- src/main/java/com/lf/server/helper/GdbHelper.java | 93 +++++++++++++++++++++++++--------------------- 1 files changed, 50 insertions(+), 43 deletions(-) diff --git a/src/main/java/com/lf/server/helper/GdbHelper.java b/src/main/java/com/lf/server/helper/GdbHelper.java index 8058c38..eaa458e 100644 --- a/src/main/java/com/lf/server/helper/GdbHelper.java +++ b/src/main/java/com/lf/server/helper/GdbHelper.java @@ -1,6 +1,5 @@ package com.lf.server.helper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.lf.server.entity.all.BaseGeoEntity; import com.lf.server.entity.all.StaticData; import com.lf.server.mapper.all.BasicMapper; @@ -163,9 +162,8 @@ } T t = (T) clazz.newInstance(); - if (readFeature(t, f, map, gField)) { - list.add(t); - } + readFeature(t, f, map, gField); + list.add(t); } while (true); } catch (Exception ex) { log.error(ex.getMessage(), ex); @@ -222,27 +220,25 @@ /** * 璇诲彇Feature */ - private static <T> boolean readFeature(T t, Feature f, Map<Integer, Field> map, Field gField) { - try { - for (Integer i : map.keySet()) { + private static <T> void readFeature(T t, Feature f, Map<Integer, Field> map, Field gField) { + for (Integer i : map.keySet()) { + try { Field field = map.get(i); setValue(t, f, field, i); + } catch (Exception e) { + log.error(e.getMessage(), e); } + } - if (null != gField) { - setGeom(t, f, gField); - } - - return true; - } catch (Exception ex) { - return false; + if (null != gField) { + setGeom(t, f, gField); } } /** * 璁剧疆鍊� */ - private static <T> void setValue(T t, Feature f, Field field, Integer i) throws Exception { + public static <T> void setValue(T t, Feature f, Field field, Integer i) throws Exception { switch (field.getType().getName()) { case "java.math.BigDecimal": double dd = f.GetFieldAsDouble(i); @@ -261,10 +257,16 @@ field.set(t, f.GetFieldAsInteger(i)); break; case "java.sql.Timestamp": - field.set(t, getTimestamp(f, i)); + Timestamp ts = getTimestamp(f, i); + if (null != ts) { + field.set(t, ts); + } break; case "java.time.LocalDate": - field.set(t, getLocalDate(f, i)); + LocalDate ld = getLocalDate(f, i); + if (null != ld) { + field.set(t, ld); + } break; default: field.set(t, f.GetFieldAsString(i)); @@ -286,34 +288,33 @@ * wkbNone = 100, * wkbLinearRing = 101 */ - private static <T> void setGeom(T t, Feature f, Field gField) throws Exception { - String geo = "null"; - if (null != f.GetGeometryRef()) { - String wkt = f.GetGeometryRef().ExportToWkt(); - // noinspection AlibabaRemoveCommentedCode - switch (f.GetGeometryRef().GetGeometryType()) { - //case 1: - // wkt = wkt.replace("POINT", "MULTIPOINT"); - // break; - case 2: + private static <T> void setGeom(T t, Feature f, Field gField) { + try { + String geo = "null"; + if (null != f.GetGeometryRef()) { + String wkt = f.GetGeometryRef().ExportToWkt(); + // f.GetGeometryRef().GetGeometryType() + if (wkt.contains(StaticData.LINESTRING) && !wkt.contains(StaticData.MULTILINESTRING)) { wkt = wkt.replace("LINESTRING (", "MULTILINESTRING ((") + ")"; - break; - case 3: + } + if (wkt.contains(StaticData.POLYGON) && !wkt.contains(StaticData.MULTIPOLYGON)) { wkt = wkt.replace("POLYGON (", "MULTIPOLYGON ((") + ")"; - break; - default: - break; - } - geo = String.format("ST_GeomFromText('%s')", wkt); - } + } + wkt = wkt.replace(" 0,", ",").replace(" 0)", ")"); - gField.set(t, geo); + geo = String.format("ST_GeomFromText('%s')", wkt); + } + + gField.set(t, geo); + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + } } /** * 鑾峰彇 Timestamp */ - private static Timestamp getTimestamp(Feature f, int index) { + public static Timestamp getTimestamp(Feature f, int index) { int[] pnYear = new int[1]; int[] pnMonth = new int[1]; int[] pnDay = new int[1]; @@ -328,6 +329,10 @@ int s = (int) fSecond; int ns = (int) (1000000000 * fSecond - s); + if (pnYear[0] > StaticData.I2050 || pnMonth[0] > StaticData.I12 || pnDay[0] > StaticData.I31 || pnHour[0] > StaticData.I24 || pnMinute[0] > StaticData.I60) { + return null; + } + LocalDateTime localDateTime = LocalDateTime.of( LocalDate.of(pnYear[0], pnMonth[0], pnDay[0]), LocalTime.of(pnHour[0], pnMinute[0], s, ns) @@ -339,7 +344,7 @@ /** * 鑾峰彇 LocalDate */ - private static LocalDate getLocalDate(Feature f, int index) { + public static LocalDate getLocalDate(Feature f, int index) { int[] pnYear = new int[1]; int[] pnMonth = new int[1]; int[] pnDay = new int[1]; @@ -349,6 +354,9 @@ int[] pnTzFlag = new int[1]; f.GetFieldAsDateTime(index, pnYear, pnMonth, pnDay, pnHour, pnMinute, pfSecond, pnTzFlag); + if (pnYear[0] > StaticData.I2050 || pnMonth[0] > StaticData.I12 || pnDay[0] > StaticData.I31) { + return null; + } return LocalDate.of(pnYear[0], pnMonth[0], pnDay[0]); } @@ -390,8 +398,7 @@ } List<Field> fields = new ArrayList<>(); - // fields.add(getGeomField(clazz)) - getFields(clazz, fields); + getFields(clazz, fields, StaticData.GDB_EXCLUDE_FIELDS); addLayerField(layer, fields); setLayerData(layer, fields, map.get(key)); @@ -465,11 +472,11 @@ /** * 鑾峰彇瀛楁 */ - private static void getFields(Class clazz, List<Field> list) { + public static void getFields(Class clazz, List<Field> list, List<String> excludeFields) { try { Field[] fields = clazz.getDeclaredFields(); for (Field f : fields) { - if (StaticData.GDB_EXCLUDE_FIELDS.contains(f.getName())) { + if (excludeFields.contains(f.getName())) { continue; } @@ -478,7 +485,7 @@ } if (!StaticData.OBJECT.equals(clazz.getSuperclass().getName())) { - getFields(clazz.getSuperclass(), list); + getFields(clazz.getSuperclass(), list, excludeFields); } } catch (Exception ex) { // -- Gitblit v1.9.3