| | |
| | | } |
| | | |
| | | /** |
| | | * 导出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 |