From 195488d44354e199059fa1ae31e1c7e967074b30 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期一, 19 十二月 2022 13:43:09 +0800 Subject: [PATCH] 1 --- src/main/java/com/lf/server/helper/GdbHelper.java | 73 +++++++++++++++++++++++++----------- 1 files changed, 51 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/lf/server/helper/GdbHelper.java b/src/main/java/com/lf/server/helper/GdbHelper.java index e69d0dc..17ed1ba 100644 --- a/src/main/java/com/lf/server/helper/GdbHelper.java +++ b/src/main/java/com/lf/server/helper/GdbHelper.java @@ -7,6 +7,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.gdal.ogr.*; +import org.gdal.osr.SpatialReference; import java.lang.reflect.Field; import java.sql.Timestamp; @@ -325,10 +326,10 @@ /** * 鍒涘缓GDB */ - public static void createGdb(String filePath, Map<String, List<?>> map){ + public static void createGdb(String filePath, Map<String, List<?>> map) { Driver driver = null; DataSource dataSource = null; - try{ + try { driver = ogr.GetDriverByName("OpenFileGDB"); if (null == driver) { return; @@ -339,14 +340,13 @@ return; } - for(String key : map.keySet()){ + for (String key : map.keySet()) { GeomBaseMapper baseMapper = ClassHelper.getGeoBaseMapper(key); if (null == baseMapper) { continue; } - - String tab = BaseQueryService.getTabName(baseMapper); - if (StringHelper.isNull(tab)) { + Layer layer = createLayer(dataSource, baseMapper); + if(null == layer){ continue; } @@ -354,29 +354,58 @@ Class clazz = ClassHelper.getEntityClass(className); List<?> list = map.get(key); - } - }catch (Exception ex){ + } catch (Exception ex) { log.error(ex.getMessage(), ex); - }finally { + } finally { GdbHelper.delete(dataSource, driver); } } - private static <T> String getGeomType(GeomBaseMapper baseMapper, List<T> list) { - for (T t : list){ - if (!(t instanceof BaseGeoEntity)){ - return null; - } - - BaseGeoEntity entity = (BaseGeoEntity)t; - if (StringHelper.isEmpty(entity.getGeom())){ - continue; - } - - + /** + * 鍒涘缓鍥惧眰 + */ + private static Layer createLayer(DataSource dataSource, GeomBaseMapper baseMapper ) { + String tab = BaseQueryService.getTabName(baseMapper); + if (StringHelper.isNull(tab)) { + return null; } - return null; + String geomType = baseMapper.selectGeometryType(tab); + if (StringHelper.isEmpty(geomType)) { + return null; + } + + Integer srid = baseMapper.selectSrid(tab); + SpatialReference sr = new SpatialReference(); + sr.ImportFromEPSG(null == srid ? 4326 : srid); + + Layer layer = dataSource.CreateLayer(tab, sr, getGeomType(geomType), null); + + return layer; + } + + /** + * 鑾峰彇Geom绫诲埆 + */ + private static Integer getGeomType(String geomType) { + if (StringHelper.isEmpty(geomType)){ + return ogr.wkbUnknown; + } + + switch (geomType){ + case "ST_Point": + return ogr.wkbPoint; + case "ST_LineString": + return ogr.wkbLineString; + case "ST_MultiLineString": + return ogr.wkbMultiLineString; + case "ST_Polygon": + return ogr.wkbPolygon; + case "ST_MultiPolygon": + return ogr.wkbMultiPolygon; + default: + return ogr.wkbUnknown; + } } } -- Gitblit v1.9.3