(2)Shapefile文件写入
public static void main(String[] args) throws Exception { // 第一步:创建基于Shapefile的数据源。 DataStore shape = createShapeFile("example"); // 创建FeatureCollection对象 FeatureCollection features = createFeatures(shape.getSchema("example")); // 生成Shapefile文件 writeToShapefile(shape, features); } public static DataStore createShapeFile(String name) { try { // 创建数据源仓库 FileDataStoreFactorySpi factory = new IndexedShapefileDataStoreFactory(); // 创建你要创建的Shapefile文件 File file = new File("f:/shp/" + name + ".shp"); if (!file.exists()) { file.createNewFile(); } // 我们需要给出连接Shapefile文件的参数 // 并且把这些参数信息组织到一个Map实例中 // 注意:使用file.toURI().toURL()的原因是因为jdk中不赞成使用file.toURL() Map map = Collections.singletonMap("url", file.toURI() .toURL()); // 创建一个基于以上参数信息的Shapefile数据源对象 ShapefileDataStore myData = (ShapefileDataStore) factory .createDataStore(map); // 标明Shapefile文件中存储的数据的类型是什么:MultiLineString // Shapefile可以存储以下数据: // Point,MultiPoint,MultiLineString,MultiPolygon FeatureType featureType = DataUtilities.createType(name, "geom:MultiLineString"); // 也可以存储其他的数据,比如:geom:MultiLineString,FieldName:java.lang.Integer // 通过','将他们分开。 // 创建Shapefile文件 myData.createSchema(featureType); // 标明数据源使用的什么坐标参考系统 myData.forceSchemaCRS(CRS.decode("EPSG:4326")); return myData; } catch (FactoryException fe) { fe.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (SchemaException se) { se.printStackTrace(); } return null; } public static FeatureCollection createFeatures(FeatureType featureType) { FeatureCollection collection = FeatureCollections.newCollection(); try { GeometryFactory gf = new GeometryFactory(); Coordinate coord1 = new Coordinate(10, 10); Coordinate coord2 = new Coordinate(100, 100); Coordinate[] coords = new Coordinate[2]; coords[0] = coord1; coords[1] = coord2; LineString line = gf.createLineString(coords); LineString[] lines = new LineString[1]; lines[0] = line; MultiLineString multi = gf.createMultiLineString(lines); collection.add(featureType.create(new Object[] { multi })); return collection; } catch (IllegalAttributeException iae) { iae.printStackTrace(); } return null; } public static void writeToShapefile(DataStore data, FeatureCollection collection) { DefaultTransaction transaction = null; FeatureStore store = null; try { String[] featureNames = data.getTypeNames(); String featureName = featureNames[0]; // 创建默认的事务对象 transaction = new DefaultTransaction(); // 同时标明数据源使用的要素名称,通常Shapefile文件名称和Shapefile类型名称通常是一样的。 store = (FeatureStore) data.getFeatureSource(featureName); // 关联默认事务和数据源 store.setTransaction(transaction); // 增加要素信息到数据源 store.addFeatures(collection); // 提交 transaction.commit(); // 关闭 transaction.close(); } catch (IOException e) { e.printStackTrace(); try { // 回滚 transaction.rollback(); } catch (IOException e1) { e1.printStackTrace(); } } }