From 56c25bcb0dc03aae78aba23f32ebbf548b866332 Mon Sep 17 00:00:00 2001 From: xing <xingjs@qq.com> Date: 星期三, 22 二月 2023 14:11:09 +0800 Subject: [PATCH] 20230221@xingjs@提交官网一张图相关内容接口 --- src/main/java/com/lf/server/helper/GdbHelper.java | 185 ++++++++++++++++++++++++++++++--------------- 1 files changed, 123 insertions(+), 62 deletions(-) diff --git a/src/main/java/com/lf/server/helper/GdbHelper.java b/src/main/java/com/lf/server/helper/GdbHelper.java index f952c8a..e813e7d 100644 --- a/src/main/java/com/lf/server/helper/GdbHelper.java +++ b/src/main/java/com/lf/server/helper/GdbHelper.java @@ -1,7 +1,9 @@ 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; import com.lf.server.mapper.all.GeomBaseMapper; import com.lf.server.service.all.BaseQueryService; import org.apache.commons.logging.Log; @@ -23,8 +25,6 @@ */ public class GdbHelper { private final static Log log = LogFactory.getLog(GdbHelper.class); - - private final static String OBJECT ="java.lang.Object"; /** * 閿�姣佽祫婧� @@ -77,9 +77,10 @@ Driver driver = null; DataSource dataSource = null; try { - driver = ogr.GetDriverByName("OpenFileGDB"); + // driver = ogr.GetDriverByName("OpenFileGDB") + driver = ogr.GetDriverByName("FileGDB"); if (null == driver) { - log.error("GdbHelper.getTabNames.driver(OpenFileGDB) is null."); + log.error("GdbHelper.getTabNames.driver is null."); return list; } @@ -113,7 +114,8 @@ Driver driver = null; DataSource dataSource = null; try { - driver = ogr.GetDriverByName("OpenFileGDB"); + // driver = ogr.GetDriverByName("OpenFileGDB") + driver = ogr.GetDriverByName("FileGDB"); if (null == driver) { return list; } @@ -209,7 +211,7 @@ } } - if (!OBJECT.equals(clazz.getSuperclass().getName())) { + if (!StaticData.OBJECT.equals(clazz.getSuperclass().getName())) { getFieldMapper(clazz.getSuperclass(), layer, map); } } catch (Exception ex) { @@ -240,9 +242,12 @@ /** * 璁剧疆鍊� */ - 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); + field.set(t, BigDecimal.valueOf(dd)); + break; case "java.lang.Double": case "double": field.set(t, f.GetFieldAsDouble(i)); @@ -257,6 +262,9 @@ break; case "java.sql.Timestamp": field.set(t, getTimestamp(f, i)); + break; + case "java.time.LocalDate": + field.set(t, getLocalDate(f, i)); break; default: field.set(t, f.GetFieldAsString(i)); @@ -282,7 +290,11 @@ 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: wkt = wkt.replace("LINESTRING (", "MULTILINESTRING ((") + ")"; break; @@ -301,7 +313,7 @@ /** * 鑾峰彇 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]; @@ -325,6 +337,23 @@ } /** + * 鑾峰彇 LocalDate + */ + public static LocalDate getLocalDate(Feature f, int index) { + int[] pnYear = new int[1]; + int[] pnMonth = new int[1]; + int[] pnDay = new int[1]; + int[] pnHour = new int[1]; + int[] pnMinute = new int[1]; + float[] pfSecond = new float[1]; + int[] pnTzFlag = new int[1]; + + f.GetFieldAsDateTime(index, pnYear, pnMonth, pnDay, pnHour, pnMinute, pfSecond, pnTzFlag); + + return LocalDate.of(pnYear[0], pnMonth[0], pnDay[0]); + } + + /** * 鍒涘缓GDB */ public static void createGdb(String filePath, Map<String, List<?>> map) throws Exception { @@ -345,7 +374,7 @@ for (String key : map.keySet()) { Layer layer = null; try { - GeomBaseMapper baseMapper = ClassHelper.getGeoBaseMapper(key); + BasicMapper baseMapper = ClassHelper.getBasicMapper(key); if (null == baseMapper) { continue; } @@ -361,8 +390,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)); @@ -386,20 +414,23 @@ /** * 鍒涘缓鍥惧眰 */ - private static Layer createLayer(DataSource dataSource, GeomBaseMapper baseMapper ) { + private static Layer createLayer(DataSource dataSource, BasicMapper baseMapper ) { String tab = BaseQueryService.getTabName(baseMapper); if (StringHelper.isNull(tab)) { return null; } - String geomType = baseMapper.selectGeometryType(tab); - if (StringHelper.isEmpty(geomType)) { - return null; + Integer srid = null; + String geomType = null; + if (baseMapper instanceof GeomBaseMapper) { + GeomBaseMapper geomMapper = (GeomBaseMapper) baseMapper; + geomType = geomMapper.selectGeometryType(tab); + + srid = geomMapper.selectSrid(tab); } - Integer srid = baseMapper.selectSrid(tab); SpatialReference sr = new SpatialReference(); - sr.ImportFromEPSG(null == srid ? 4326 : srid); + sr.ImportFromEPSG(null == srid ? 4490 : srid); return dataSource.CreateLayer(tab, sr, getGeomType(geomType), null); } @@ -409,12 +440,14 @@ */ private static Integer getGeomType(String geomType) { if (StringHelper.isEmpty(geomType)) { - return ogr.wkbUnknown; + return ogr.wkbPoint; } switch (geomType) { case "ST_Point": return ogr.wkbPoint; + case "ST_MultiPoint": + return ogr.wkbMultiPoint; case "ST_LineString": return ogr.wkbLineString; case "ST_MultiLineString": @@ -431,11 +464,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; } @@ -443,8 +476,8 @@ list.add(f); } - if (!OBJECT.equals(clazz.getSuperclass().getName())) { - getFields(clazz.getSuperclass(), list); + if (!StaticData.OBJECT.equals(clazz.getSuperclass().getName())) { + getFields(clazz.getSuperclass(), list, excludeFields); } } catch (Exception ex) { // @@ -454,7 +487,7 @@ /** * 娣诲姞鍥惧眰瀛楁 */ - private static void addLayerField(Layer layer, List<Field> list) { + public static void addLayerField(Layer layer, List<Field> list) { for (int i = 0, c = list.size(); i < c; i++) { Field f = list.get(i); @@ -482,6 +515,8 @@ return ogr.OFTInteger; case "java.sql.Timestamp": return ogr.OFTDateTime; + case "java.time.LocalDate": + return ogr.OFTDate; default: return ogr.OFTString; } @@ -494,48 +529,63 @@ for (T t : list) { Feature f = new Feature(layer.GetLayerDefn()); - BaseGeoEntity geoEntity = (BaseGeoEntity) t; - Geometry geom = Geometry.CreateFromWkt(geoEntity.getGeom()); - f.SetGeometry(geom); - - for (int i = 0, c = fields.size(); i < c; i++) { - Field field = fields.get(i); - Object val = field.get(t); - if (null == val) { - continue; - } - - switch (field.getType().getName()) { - case "java.math.BigDecimal": - BigDecimal big = (BigDecimal) val; - f.SetField(i, big.doubleValue()); - break; - case "java.lang.Double": - case "double": - double d = (double) val; - f.SetField(i, d); - break; - case "java.lang.Long": - case "long": - long l = (long) val; - f.SetField(i, l); - break; - case "java.lang.Integer": - case "int": - int n = (int) val; - f.SetField(i, n); - break; - case "java.sql.Timestamp": - Timestamp time = (Timestamp) field.get(t); - setTimestamp(f, i, time); - break; - default: - String str = (String) val; - f.SetField(i, str); - break; + if (t instanceof BaseGeoEntity) { + BaseGeoEntity geoEntity = (BaseGeoEntity) t; + if (!StringHelper.isEmpty(geoEntity.getGeom())) { + Geometry geom = Geometry.CreateFromWkt(geoEntity.getGeom()); + f.SetGeometry(geom); } } + + setFeatureData(f, fields, t); layer.CreateFeature(f); + } + } + + /** + * 璁剧疆瑕佺礌鐨勬暟鎹� + */ + public static <T> void setFeatureData(Feature f, List<Field> fields, T t) throws Exception { + for (int i = 0, c = fields.size(); i < c; i++) { + Field field = fields.get(i); + Object val = field.get(t); + if (null == val) { + continue; + } + + switch (field.getType().getName()) { + case "java.math.BigDecimal": + BigDecimal big = (BigDecimal) val; + f.SetField(i, big.doubleValue()); + break; + case "java.lang.Double": + case "double": + double d = (double) val; + f.SetField(i, d); + break; + case "java.lang.Long": + case "long": + long l = (long) val; + f.SetField(i, l); + break; + case "java.lang.Integer": + case "int": + int n = (int) val; + f.SetField(i, n); + break; + case "java.sql.Timestamp": + Timestamp timestamp = (Timestamp) field.get(t); + setTimestamp(f, i, timestamp); + break; + case "java.time.LocalDate": + LocalDate localDate = (LocalDate) field.get(t); + setLocalDate(f, i, localDate); + break; + default: + String str = (String) val; + f.SetField(i, str); + break; + } } } @@ -550,4 +600,15 @@ LocalDateTime local = time.toLocalDateTime(); f.SetField(i, local.getYear(), local.getMonthValue(), local.getDayOfMonth(), local.getHour(), local.getMinute(), local.getSecond(), 8); } + + /** + * 璁剧疆LocalDate + */ + private static void setLocalDate(Feature f, int i, LocalDate local) { + if (null == local) { + return; + } + + f.SetField(i, local.getYear(), local.getMonthValue(), local.getDayOfMonth(), 0, 0, 0, 8); + } } -- Gitblit v1.9.3