/**
* 描述:把shp的边界线转换为geojson
*
* @param file
* @return File
*/
public static void shpTranGeoJsonFile(File file, File tarFile) throws Exception {
Map<String, Object> map = new HashMap<String, Object>();
map.put("url", file.toURI().toURL());// 必须是URL类型
DataStore dataStore = DataStoreFinder.getDataStore(map);
//字符转码,防止中文乱码
((ShapefileDataStore) dataStore).setCharset(Charset.forName("utf8"));
String typeName = dataStore.getTypeNames()[0];
FeatureSource<SimpleFeatureType, SimpleFeature> source = dataStore.getFeatureSource(typeName);
FeatureCollection<SimpleFeatureType, SimpleFeature> collection = source.getFeatures();
FeatureIterator<SimpleFeature> features = collection.features();
// 根据几何图形创建要素列表
List<SimpleFeature> featureList = new ArrayList<>();
SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder();
typeBuilder.setName("GeometryFeature");
// 创建要素类型
SimpleFeatureType featureType = typeBuilder.buildFeatureType();
while (features.hasNext()) {
// 迭代提取属性
SimpleFeatureImpl feature = (SimpleFeatureImpl) features.next();
CoordinateReferenceSystem sourceCRS = feature.getFeatureType().getCoordinateReferenceSystem();
CoordinateReferenceSystem targetCRS = CRS.decode("EPSG:4326", true);
MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS, true);
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
Geometry sourceGeo = geometryFactory.createGeometry((Geometry) feature.getDefaultGeometry());
Geometry targetGeo = JTS.transform(sourceGeo, transform);
// 设置保留8位小数,否则GeometryJSON默认保留4位小数
// GeometryJSON geometryJson = new GeometryJSON(8);
typeBuilder = new SimpleFeatureTypeBuilder();
typeBuilder.setName("GeometryFeature");
typeBuilder.add("geometry", Geometry.class);
for (Property property : feature.getValue()) {
if (!"the_geom".equals(property.getName().toString())) {
typeBuilder.add(String.valueOf(property.getName()), Object.class);
}
}
// 创建要素类型
featureType = typeBuilder.buildFeatureType();
// 创建要素生成器
SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(featureType);
// for (Geometry geometry : geometries) {
// 设置几何体属性
featureBuilder.set("geometry", targetGeo);
// 构建功能
SimpleFeature featureSave = featureBuilder.buildFeature(UUID.randomUUID().toString(), targetGeo);
for (Property property : feature.getValue()) {
if (!"the_geom".equals(property.getName().toString())) {
featureSave.setAttribute(String.valueOf(property.getName()), property.getValue());
}
}
// 将功能添加到列表,多个才用遍历的添加
featureList.add(featureSave);
}
features.close();
// 从要素列表创建要素集合
FeatureCollection<SimpleFeatureType, SimpleFeature> featureCollection =
new ListFeatureCollection(featureType, featureList);
FeatureJSON io = new FeatureJSON();
io.writeFeatureCollection(featureCollection, new FileOutputStream(FileUtil.touch(tarFile)));
featureList = null;
dataStore.dispose();
}
04-23
6449
04-07
1898
11-21
1361
10-08
2752
06-06
1121
09-21
4251