From 7e754e7bdbdb8b2c3086938a67421aebab2fb493 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期四, 29 十二月 2022 20:48:35 +0800 Subject: [PATCH] 12.29.7 --- src/main/java/com/lf/server/service/show/PipelineService.java | 97 ++++++++++++++++++++++++++++++++++++------------ 1 files changed, 73 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/lf/server/service/show/PipelineService.java b/src/main/java/com/lf/server/service/show/PipelineService.java index e750f2c..7e32c8b 100644 --- a/src/main/java/com/lf/server/service/show/PipelineService.java +++ b/src/main/java/com/lf/server/service/show/PipelineService.java @@ -1,5 +1,7 @@ package com.lf.server.service.show; +import com.lf.server.entity.all.BaseGeoEntity; +import com.lf.server.entity.all.StaticData; import com.lf.server.entity.data.DownloadEntity; import com.lf.server.entity.data.MetaFileEntity; import com.lf.server.entity.show.PipelineEntity; @@ -8,20 +10,22 @@ import com.lf.server.mapper.all.GeomBaseMapper; import com.lf.server.mapper.data.DownloadMapper; import com.lf.server.mapper.show.PipelineMapper; +import com.lf.server.service.all.BaseQueryService; import net.lingala.zip4j.ZipFile; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.ZipParameters; 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; +import org.gdal.ogr.*; +import org.gdal.osr.SpatialReference; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.File; import java.lang.reflect.Field; +import java.math.BigDecimal; +import java.sql.Timestamp; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -67,7 +71,7 @@ * @param pwd 瀵嗙爜 * @return 涓嬭浇鏂囦欢GUID */ - public String createZipFile(UserEntity ue, Map<String, List<?>> map, String pwd) throws Exception { + public String createZipFile(UserEntity ue, Map<String, List<PipelineEntity>> map, String pwd) throws Exception { if (map.size() == 0) { return null; } @@ -80,7 +84,7 @@ if (file.exists() && file.isDirectory()) { FileHelper.deleteDir(filePath); } - //createGdb(filePath, map); + createGdb(filePath, map); String zipName = tempName + ".gdb.zip"; String zipFile = pathHelper.getDownloadFullPath() + File.separator + zipName; @@ -99,7 +103,7 @@ /** * 鍒涘缓GDB */ - public static void createGdb(String filePath, Map<String, List<?>> map) throws Exception { + public static void createGdb(String filePath, Map<String, List<PipelineEntity>> map) throws Exception { Driver driver = null; DataSource dataSource = null; try { @@ -117,24 +121,14 @@ for (String key : map.keySet()) { Layer layer = null; try { + List<PipelineEntity> list = map.get(key); + layer = createLayer(dataSource, key, list.get(0)); -// layer = createLayer(dataSource, baseMapper); -// if (null == layer) { -// continue; -// } -// -// String className = ClassHelper.getClassName(baseMapper); -// Class clazz = ClassHelper.getEntityClass(className); -// if (null == clazz) { -// continue; -// } -// -// List<Field> fields = new ArrayList<>(); -// // fields.add(getGeomField(clazz)) -// getFields(clazz, fields); -// addLayerField(layer, fields); -// -// setLayerData(layer, fields, map.get(key)); + List<Field> fields = new ArrayList<>(); + getFields(PipelineEntity.class, fields); + + GdbHelper.addLayerField(layer, fields); + setLayerData(layer, fields, list); } finally { if (null != layer) { layer.delete(); @@ -153,6 +147,61 @@ } /** + * 鍒涘缓鍥惧眰 + */ + private static Layer createLayer(DataSource dataSource, String tab, PipelineEntity pe) { + int geomType = pe.getWkt().contains("POINT") ? ogr.wkbMultiPoint : ogr.wkbMultiLineString; + + SpatialReference sr = new SpatialReference(); + sr.ImportFromEPSG(4490); + + return dataSource.CreateLayer(tab, sr, geomType, null); + } + + /** + * 鑾峰彇瀛楁 + */ + private static void getFields(Class clazz, List<Field> list) { + try { + Field[] fields = clazz.getDeclaredFields(); + for (Field f : fields) { + if (StaticData.GDB_EXCLUDE_FIELDS.contains(f.getName())) { + continue; + } + + f.setAccessible(true); + list.add(f); + } + + if (!StaticData.OBJECT.equals(clazz.getSuperclass().getName())) { + getFields(clazz.getSuperclass(), list); + } + } catch (Exception ex) { + // + } + } + + /** + * 璁剧疆鍥惧眰鏁版嵁 + */ + private static void setLayerData(Layer layer, List<Field> fields, List<PipelineEntity> list) throws Exception { + for (PipelineEntity t : list) { + Feature f = new Feature(layer.GetLayerDefn()); + + String wkt = t.getWkt(); + if (!wkt.contains("MULTI")) { + wkt = wkt.replace("POINT", "MULTIPOINT").replace("LINESTRING", "MULTILINESTRING(") + (wkt.contains("LINESTRING") ? ")" : ""); + } + + Geometry geom = Geometry.CreateFromWkt(wkt); + f.SetGeometry(geom); + + GdbHelper.setFeatureData(f, fields, t); + layer.CreateFeature(f); + } + } + + /** * 娣诲姞Zip鏂囦欢 */ private void addZipFiles(ZipFile zip, ZipParameters params, File[] files) { -- Gitblit v1.9.3