zhongrj
2024-11-19 77031c2c9fca6c55f74e636c5ea765cc1dc1fd6e
src/main/java/org/springblade/common/utils/ShapeFileUtil.java
@@ -44,14 +44,15 @@
                         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;
@@ -73,7 +74,8 @@
         String geomProperty = "the_geom";
         String idProperty = "ID";
         String nameProperty = "name";
         String descriptionProperty = "desc";
         String firmIdProperty = "firmId";
         String firmNameProperty = "firmName";
         //设置图形类型
         if ("Polygon".equals(geomType)) {
@@ -94,7 +96,8 @@
         //设置对应属性类型
         tb.add(idProperty, String.class);
         tb.add(nameProperty, String.class);
         tb.add(descriptionProperty, String.class);
         tb.add(firmIdProperty, String.class);
         tb.add(firmNameProperty, String.class);
         //设置默认geometry
         tb.setDefaultGeometry(geomProperty);
@@ -109,14 +112,114 @@
         for (Map<String, Object> map : dataPropertiesList) {
            feature = writer.next();
            //属性赋值  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);
            if (map.containsKey("geometry")) {
               feature.setAttribute(geomProperty, new WKTReader().read((MapUtil.getStr(map, "geometry"))));
            }
            feature.setAttribute(idProperty, MapUtil.getStr(map, idProperty));
            feature.setAttribute(nameProperty, MapUtil.getStr(map, nameProperty));
            feature.setAttribute(firmIdProperty, MapUtil.getStr(map, firmIdProperty));
            feature.setAttribute(firmNameProperty, MapUtil.getStr(map, firmNameProperty));
//            String description = MapUtil.getStr(map, "描述");
//            if (CharSequenceUtil.isNotBlank(description)) {
//               feature.setAttribute(descriptionProperty, description);
//            }
         }
         writer.write();
      } catch (IOException | FactoryException | ParseException e) {
         e.printStackTrace();
      } finally {
         //关闭相关流
         try {
            if (writer != null) {
               writer.close();
            }
         } catch (IOException e) {
            e.printStackTrace();
         }
         if (ds != null) {
            ds.dispose();
         }
      }
   }
   /**
    * 导出shp文件
    *
    * @param map 属性列表{属性名:属性值}
    * @param fileName           导出shp文件名
    * @param geomType           geometry类型
    * @param saveFolder         导出位置
    */
   public static void exportShp(Map<String, Object> map,
                         String fileName,
                         String geomType,
                         String saveFolder) {
      String path = saveFolder + "/" + fileName;
      //创建保存shp文件夹
      File dir = new File(path);
      if (!dir.exists()) {
         FileUtil.mkdir(dir);
      }
      //shp文件路径
      String shpFileName = fileName + ".shp";
      String fileUrl = path+ "/" + shpFileName;
      File file = new File(fileUrl);
      FeatureWriter<SimpleFeatureType, SimpleFeature> writer = null;
      ShapefileDataStore ds = null;
      try {
         Map<String, Serializable> params = new HashMap<>();
         params.put(ShapefileDataStoreFactory.URLP.key, file.toURI().toURL());
         ds = (ShapefileDataStore) new ShapefileDataStoreFactory().createNewDataStore(params);
         //定义图形信息和属性信息
         SimpleFeatureTypeBuilder tb = new SimpleFeatureTypeBuilder();
         //设置坐标系
         CoordinateReferenceSystem crs84 = CRS.decode("EPSG:4326", true);
         tb.setCRS(crs84);
         //设置文件名
         tb.setName(fileName);
         //定义导出shp文件地块属性名称
         String geomProperty = "the_geom";
         String idProperty = "ID";
         String nameProperty = "name";
         //设置图形类型
         if ("Polygon".equals(geomType)) {
            tb.add(geomProperty, Polygon.class);
         } else if ("MultiPolygon".equals(geomType)) {
            tb.add(geomProperty, MultiPolygon.class);
         } else if ("Point".equals(geomType)) {
            tb.add(geomProperty, Point.class);
         } else if ("MultiPoint".equals(geomType)) {
            tb.add(geomProperty, MultiPoint.class);
         } else if ("LineString".equals(geomType)) {
            tb.add(geomProperty, LineString.class);
         } else if ("MultiLineString".equals(geomType)) {
            tb.add(geomProperty, MultiLineString.class);
         } else {
            throw new ServiceException("Geometry中没有该类型:" + geomType);
         }
         //设置对应属性类型
         tb.add(idProperty, String.class);
         tb.add(nameProperty, String.class);
         //设置默认geometry
         tb.setDefaultGeometry(geomProperty);
         //创建
         ds.createSchema(tb.buildFeatureType());
         ds.setCharset(StandardCharsets.UTF_8);
         //设置Writer
         writer = ds.getFeatureWriter(ds.getTypeNames()[0],
            Transaction.AUTO_COMMIT);
         SimpleFeature feature;
         feature = writer.next();
         //属性赋值  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, nameProperty));
         writer.write();
      } catch (IOException | FactoryException | ParseException e) {
         e.printStackTrace();
@@ -207,8 +310,18 @@
                  shpDTO.put("type",json.getJSONObject("geometry").getString("type"));
               }
               // 名称
               if (json.getJSONObject("properties").get("name")!= null) {
                  shpDTO.put("name",json.getJSONObject("properties").getString("name"));
               if (json.getJSONObject("properties").get("Name")!= null) {
                  shpDTO.put("name",json.getJSONObject("properties").getString("Name"));
               }
               if (json.getJSONObject("properties").get("TYPE")!= null) {
                  shpDTO.put("name",json.getJSONObject("properties").getString("TYPE"));
               }
               // 所属公司名称
               if (json.getJSONObject("properties").get("name_1")!= null) {
                  shpDTO.put("firmName",json.getJSONObject("properties").getString("name_1"));
               }
               if (json.getJSONObject("properties").get("QYMC")!= null) {
                  shpDTO.put("firmName",json.getJSONObject("properties").getString("QYMC"));
               }
               dtoList.add(shpDTO);
            } catch (NumberFormatException e) {