Переглянути джерело

shapefile导出按图层名称分组

欧阳劲驰 1 тиждень тому
батько
коміт
a837bc726c

+ 30 - 2
src/main/java/com/shkpr/service/alambizplugin/commtools/ShapeUtils.java

@@ -1,5 +1,6 @@
 package com.shkpr.service.alambizplugin.commtools;
 
+import com.shkpr.service.alambizplugin.constants.GisMetadataDefine;
 import com.shkpr.service.alambizplugin.constants.GisSurveyExcelDefine;
 import org.geotools.data.Transaction;
 import org.geotools.data.collection.ListFeatureCollection;
@@ -16,6 +17,8 @@ import java.nio.file.Paths;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * ShapeFile工具
@@ -38,8 +41,33 @@ public class ShapeUtils {
         for (Map.Entry<SimpleFeatureType, List<Map<String, Object>>> entry : datas.entrySet()) {
             final SimpleFeatureType KEY = entry.getKey();
             List<Map<String, Object>> value = entry.getValue();
-
-            writeShape(KEY, value, Paths.get(directoryPath + "/" + KEY.getTypeName() + ".shp"));
+            //点类型处理
+            if (Objects.equals(GisMetadataDefine.TYPE_KINE.POINT, KEY.getTypeName())) {
+                //按图层名称分组
+                Map<Object, List<Map<String, Object>>> group = value.stream()
+                        .collect(Collectors.groupingBy(it ->
+                                it.get(GisSurveyExcelDefine.FILE.POINT_LAYER))
+                        );
+                //按组导出
+                for (Map.Entry<Object, List<Map<String, Object>>> groupEntry : group.entrySet()) {
+                    writeShape(KEY, groupEntry.getValue(),
+                            Paths.get(directoryPath + "/" + groupEntry.getKey() + ".shp")
+                    );
+                }
+            }
+            //线类型处理
+            if (Objects.equals(GisMetadataDefine.TYPE_KINE.LINE, KEY.getTypeName())) {
+                //按图层名称分组
+                Map<Object, List<Map<String, Object>>> group = value.stream()
+                        .collect(Collectors.groupingBy(it ->
+                                it.get(GisSurveyExcelDefine.FILE.LINE_LAYER)
+                        ));
+                //按组导出
+                for (Map.Entry<Object, List<Map<String, Object>>> mapEntry : group.entrySet()) {
+                    writeShape(KEY, mapEntry.getValue(),
+                            Paths.get(directoryPath + "/" + mapEntry.getKey() + ".shp"));
+                }
+            }
         }
     }
 

+ 2 - 2
src/main/java/com/shkpr/service/alambizplugin/components/GisSurveyThirdExporter.java

@@ -435,12 +435,12 @@ public class GisSurveyThirdExporter {
 
         //创建点类型
         final SimpleFeatureType POINT_TYPE = DataUtilities.createType(
-                "point",
+                GisMetadataDefine.TYPE_KINE.POINT,
                 String.format("%s%s", GisSurveyExcelDefine.FILE_HANDLE.POINT_SPEC, pointTemplateSpec)
         );
         //创建线类型
         final SimpleFeatureType LINE_TYPE = DataUtilities.createType(
-                "line",
+                GisMetadataDefine.TYPE_KINE.LINE,
                 String.format("%s%s", GisSurveyExcelDefine.FILE_HANDLE.LINE_SPEC, lineTemplateSpec)
         );