zrj
2024-11-08 4dc18cd2c9d0c44cf8d84cd4687564f26e294eab
src/main/java/org/springblade/common/utils/ShapeFileUtil.java
@@ -15,6 +15,7 @@
import org.locationtech.jts.geom.*;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;
import org.opengis.feature.GeometryAttribute;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.filter.Filter;
@@ -39,15 +40,19 @@
    * @param geomType           geometry类型
    * @param saveFolder         导出位置
    */
   private static void exportShp(List<Map<String, Object>> dataPropertiesList, String fileName, String geomType,String saveFolder) {
   public static void exportShp(List<Map<String, Object>> dataPropertiesList,
                         String fileName,
                         String geomType,
                         String saveFolder) {
      String path = saveFolder + "/" + fileName;
      //创建保存shp文件夹
      File dir = new File(saveFolder);
      File dir = new File(path);
      if (!dir.exists()) {
         FileUtil.mkdir(dir);
      }
      //shp文件路径
      String shpFileName = fileName + ".shp";
      String fileUrl = saveFolder + shpFileName;
      String fileUrl = path+ "/" + shpFileName;
      File file = new File(fileUrl);
      FeatureWriter<SimpleFeatureType, SimpleFeature> writer = null;
@@ -69,7 +74,6 @@
         String geomProperty = "the_geom";
         String idProperty = "ID";
         String nameProperty = "name";
         String descriptionProperty = "desc";
         //设置图形类型
         if ("Polygon".equals(geomType)) {
@@ -90,7 +94,6 @@
         //设置对应属性类型
         tb.add(idProperty, String.class);
         tb.add(nameProperty, String.class);
         tb.add(descriptionProperty, String.class);
         //设置默认geometry
         tb.setDefaultGeometry(geomProperty);
@@ -107,11 +110,11 @@
            //属性赋值  geometry要赋值wkt格式的
            feature.setAttribute(geomProperty, new WKTReader().read((MapUtil.getStr(map, "geometry"))));
            feature.setAttribute(idProperty, MapUtil.getStr(map, idProperty));
            feature.setAttribute(nameProperty, MapUtil.getStr(map, "名称"));
            String description = MapUtil.getStr(map, "描述");
            if (CharSequenceUtil.isNotBlank(description)) {
               feature.setAttribute(descriptionProperty, description);
            }
            feature.setAttribute(nameProperty, MapUtil.getStr(map, nameProperty));
//            String description = MapUtil.getStr(map, "描述");
//            if (CharSequenceUtil.isNotBlank(description)) {
//               feature.setAttribute(descriptionProperty, description);
//            }
         }
         writer.write();
      } catch (IOException | FactoryException | ParseException e) {
@@ -194,13 +197,17 @@
            featureJSON.writeFeature(feature, writer);
            String temp = writer.toString();
            JSONObject json = JSONObject.parseObject(temp);
            Object value = feature.getDefaultGeometryProperty().getValue();
            try {
               // 空间坐标
               shpDTO.put("geometry",json.getJSONObject("geometry").getString("coordinates"));
               shpDTO.put("geometry",value);
               // 空间类型
               if (json.getJSONObject("geometry").get("type") != null) {
                  shpDTO.put("geoType",json.getJSONObject("geometry").getString("type"));
                  shpDTO.put("type",json.getJSONObject("geometry").getString("type"));
               }
               // 名称
               if (json.getJSONObject("properties").get("name")!= null) {
                  shpDTO.put("name",json.getJSONObject("properties").getString("name"));
               }
               dtoList.add(shpDTO);
            } catch (NumberFormatException e) {
@@ -220,22 +227,27 @@
   public static void main(String[] args) throws IOException, ParseException {
//      File file = new File("F:\\test4jdata\\shp\\import\\zrq.zip");
      File file = new File("F:\\test4jdata\\shp\\export\\test.zip");
      File file = new File("F:\\test4jdata\\shp\\zip\\test.zip");
      List<Map<String, Object>> list = shpToGeoJson(file);
      System.out.println("list = " + list);
      // 导出shp 文件
      List<Map<String,Object>> propertyList = new ArrayList<>();
      for (int i = 0; i < 3; i++) {
         Map<String,Object> map = new HashMap<>();
         map.put("ID", i);
         map.put("名称", "test" + i);
         map.put("描述", "测试shp导出" + i);
         map.put("geometry", "MULTILINESTRING ((114.0888763800001 22.549298400000055, 114.0897166200001 22.54931240800005, 114.09006708000004 22.549318250000056, 114.09104754000009 22.549328150000065))");
         propertyList.add(map);
      }
      String exportPath = "F:\\test4jdata\\shp\\export\\";
      exportShp(propertyList, "test", "MultiLineString",exportPath);
//      List<Map<String,Object>> propertyList = new ArrayList<>();
//      for (int i = 0; i < 3; i++) {
//         Map<String,Object> map = new HashMap<>();
//         map.put("ID", i);
//         map.put("名称", "test" + i);
//         map.put("描述", "测试shp导出" + i);
//         map.put("geometry", "MULTILINESTRING ((114.0888763800001 22.549298400000055, 114.0897166200001 22.54931240800005, 114.09006708000004 22.549318250000056, 114.09104754000009 22.549328150000065))");
//         propertyList.add(map);
//      }
//      String exportPath = "F:\\test4jdata\\shp\\export\\";
//      exportShp(propertyList, "test", "MultiLineString",exportPath);
//      // 打包成 zip 包,然后导出
//      String zipPath = "F:\\test4jdata\\shp\\zip\\test.zip";
//      boolean folder = ZipUtil.zipFolder(exportPath, zipPath);
      // 打包成功后导出
   }
   public static double[] getLongitudeLatitude(Geometry wktPoint) throws ParseException {