data/ts.sql | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lf/server/controller/show/PipelineController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lf/server/entity/all/StaticData.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lf/server/helper/GdbHelper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lf/server/service/show/PipelineService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
data/ts.sql
@@ -101,10 +101,17 @@ select * from bs.m_pipesegment; select gid, pipename, segname from bs.m_pipesegment order by pipename, segname; select * from bd.dlg_25w_hydl; select * from bd.dlg_25w_lrdl; select * from bd.dlg_25w_lrrl; select * from bd.dlg_25w_hyda; select * from bd.dlg_25w_hydl limit 10; select * from bd.dlg_25w_lrdl limit 10; select * from bd.dlg_25w_lrrl limit 10; select * from bd.dlg_25w_hyda limit 10; select * from bs.m_pipesegment limit 10; select ST_SRID(geom), ST_GeometryType(geom) from bd.dlg_25w_hydl limit 1; select ST_SRID(geom), ST_GeometryType(geom) from bd.dlg_25w_lrdl limit 1; select ST_SRID(geom), ST_GeometryType(geom) from bd.dlg_25w_lrrl limit 1; select ST_SRID(geom), ST_GeometryType(geom) from bd.dlg_25w_hyda limit 1; select ST_SRID(geom), ST_GeometryType(geom) from bs.m_pipesegment limit 1; SELECT a.name as acrossName, b.segname as segName, @@ -125,8 +132,7 @@ where ST_Intersects(a.geom, b.geom) select * from lf.sys_download where type=4; select * from bs.m_pipesegment; src/main/java/com/lf/server/controller/show/PipelineController.java
@@ -118,9 +118,9 @@ return fail("密码不符合要求"); } Map<String, List<?>> map = new HashMap<>(4); Map<String, List<PipelineEntity>> map = new HashMap<>(4); for (String tab : pe.getTabs()) { List<?> rs = pipelineService.selectPipeAnalysis(tab, pe.getGid()); List<PipelineEntity> rs = pipelineService.selectPipeAnalysis(tab, pe.getGid()); if (null != rs && rs.size() > 0) { map.put(tab, rs); } src/main/java/com/lf/server/entity/all/StaticData.java
@@ -80,6 +80,11 @@ public final static String EQ = "="; /** * Object对象 */ public final static String OBJECT = "java.lang.Object"; /** * 插入排除字段 */ public final static List<String> INSERT_EXCLUDE_FIELDS = new ArrayList<>(Arrays.asList("gid", "objectid", "updateuser", "updatetime", "shape_leng", "shape_area", "serialVersionUID", "dirName", "depName", "verName", "createName", "updateName")); src/main/java/com/lf/server/helper/GdbHelper.java
@@ -24,8 +24,6 @@ public class GdbHelper { private final static Log log = LogFactory.getLog(GdbHelper.class); private final static String OBJECT = "java.lang.Object"; /** * 销毁资源 */ @@ -209,7 +207,7 @@ } } if (!OBJECT.equals(clazz.getSuperclass().getName())) { if (!StaticData.OBJECT.equals(clazz.getSuperclass().getName())) { getFieldMapper(clazz.getSuperclass(), layer, map); } } catch (Exception ex) { @@ -288,7 +286,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; @@ -422,7 +424,7 @@ 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); } @@ -438,6 +440,8 @@ switch (geomType) { case "ST_Point": return ogr.wkbPoint; case "ST_MultiPoint": return ogr.wkbMultiPoint; case "ST_LineString": return ogr.wkbLineString; case "ST_MultiLineString": @@ -466,7 +470,7 @@ list.add(f); } if (!OBJECT.equals(clazz.getSuperclass().getName())) { if (!StaticData.OBJECT.equals(clazz.getSuperclass().getName())) { getFields(clazz.getSuperclass(), list); } } catch (Exception ex) { @@ -477,7 +481,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); @@ -523,6 +527,15 @@ 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); @@ -563,8 +576,6 @@ f.SetField(i, str); break; } } layer.CreateFeature(f); } } 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) {