From 166d2ad42c652c938b754cf2407770c752322b95 Mon Sep 17 00:00:00 2001
From: zrj <646384940@qq.com>
Date: Sat, 09 Nov 2024 12:09:17 +0800
Subject: [PATCH] 应急空间统计修改,风险源统计修改

---
 src/main/java/org/springblade/common/utils/ShapeFileUtil.java |   96 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 96 insertions(+), 0 deletions(-)

diff --git a/src/main/java/org/springblade/common/utils/ShapeFileUtil.java b/src/main/java/org/springblade/common/utils/ShapeFileUtil.java
index 3dd65ac..a77cf8d 100644
--- a/src/main/java/org/springblade/common/utils/ShapeFileUtil.java
+++ b/src/main/java/org/springblade/common/utils/ShapeFileUtil.java
@@ -135,6 +135,102 @@
 	}
 
 	/**
+	 * 导出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();
+		} finally {
+			//关闭相关流
+			try {
+				if (writer != null) {
+					writer.close();
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+			if (ds != null) {
+				ds.dispose();
+			}
+		}
+	}
+
+	/**
 	 * 将文件解压
 	 * @param zipFile
 	 * @return

--
Gitblit v1.9.3