123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- //package com.onemap.overlap.utils;
- //
- //import org.geotools.data.DataStore;
- //import org.geotools.data.DataStoreFinder;
- //import org.geotools.data.FeatureSource;
- //import org.geotools.data.Transaction;
- //import org.geotools.data.memory.MemoryDataStore;
- //import org.geotools.data.shapefile.ShapefileDataStore;
- //import org.geotools.data.shapefile.ShapefileDataStoreFactory;
- //import org.geotools.data.simple.SimpleFeatureCollection;
- //import org.geotools.data.simple.SimpleFeatureWriter;
- //import org.geotools.feature.FeatureCollection;
- //import org.geotools.feature.DefaultFeatureCollection; // 引入 DefaultFeatureCollection
- //import org.geotools.feature.FeatureIterator;
- //import org.geotools.feature.simple.SimpleFeatureBuilder;
- //import org.geotools.feature.simple.SimpleFeatureTypeImpl;
- //import org.locationtech.jts.geom.Geometry;
- //import org.locationtech.jts.geom.GeometryFactory;
- //import org.opengis.feature.Feature;
- //import org.opengis.feature.simple.SimpleFeature;
- //import org.opengis.feature.simple.SimpleFeatureType;
- //
- //import java.io.File;
- //import java.util.HashMap;
- //import java.util.Iterator;
- //import java.util.Map;
- //
- //public class GeoToolsSpatialOverlay {
- //
- // // 加载 Shapefile 文件并返回 FeatureCollection
- // public static FeatureCollection loadShapefile(String shapefilePath) throws Exception {
- // File file = new File(shapefilePath);
- // ShapefileDataStore dataStore = new ShapefileDataStore(file.toURI().toURL());
- // String typeName1 = dataStore.getTypeNames()[0];
- // FeatureSource<SimpleFeatureType, SimpleFeature> featureSource1 = dataStore.getFeatureSource(typeName1);
- // FeatureCollection<SimpleFeatureType, SimpleFeature> featureCollection = featureSource1.getFeatures();
- //
- // // 将第一个 Shapefile 数据加载到内存
- // MemoryDataStore memoryDataStore = new MemoryDataStore();
- // memoryDataStore.addFeatures(featureCollection);
- //// memoryDataStore.setSpatialIndex(true); // 启用空间索引(例如,R-tree)
- //
- // return featureCollection;
- // }
- //
- // // 执行交集(Intersection)分析
- // public static FeatureCollection performIntersection(FeatureCollection layer1, FeatureCollection layer2) throws Exception {
- // // 使用 DefaultFeatureCollection 来存储交集结果
- // FeatureCollection resultCollection = new DefaultFeatureCollection();
- //
- // GeometryFactory geometryFactory = new GeometryFactory();
- //
- // // 遍历第一个图层
- //// for (Feature feature : layer1) {
- ////
- //// }
- // FeatureIterator iterator1 = layer1.features();
- // while (iterator1.hasNext()) {
- // SimpleFeature feature1 = (SimpleFeature)iterator1.next();
- // Geometry geom1 = (Geometry) feature1.getDefaultGeometry();
- // // 遍历第二个图层
- // FeatureIterator iterator2 = layer2.features();
- // while (iterator2.hasNext()) {
- // SimpleFeature simpleFeature2 = (SimpleFeature)iterator2.next();
- // Geometry geom2 = (Geometry) simpleFeature2.getDefaultGeometry();
- // // 如果两者有交集,计算交集
- // if (geom1.intersects(geom2)) {
- // Geometry intersection = geom1.intersection(geom2);
- // // 将交集结果添加到新的 FeatureCollection
- // SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(feature1.getFeatureType());
- // SimpleFeature newFeature = featureBuilder.buildFeature(null);
- // newFeature.setAttribute("the_geom", intersection);
- // ((DefaultFeatureCollection) resultCollection).add(newFeature);
- // }
- // }
- // }
- //
- // return resultCollection;
- // }
- //
- // // 导出结果到新的 Shapefile 文件
- // public static void exportToShapefile(FeatureCollection featureCollection, String outputShapefilePath) throws Exception {
- // File outputFile = new File(outputShapefilePath);
- // Map<String, Object> params = new HashMap<>();
- // params.put(ShapefileDataStoreFactory.URLP.key, outputFile.toURI().toURL());
- //
- // // 创建新的 Shapefile DataStore
- // ShapefileDataStore dataStore = (ShapefileDataStore) DataStoreFinder.getDataStore(params);
- //
- // // 获取 FeatureCollection 的 schema 并创建新的 Shapefile Schema
- // SimpleFeatureTypeImpl featureType = (SimpleFeatureTypeImpl) featureCollection.getSchema();
- // dataStore.createSchema(featureType);
- //
- // // 写入新的 Shapefile
- // try (SimpleFeatureWriter writer = (SimpleFeatureWriter) dataStore.getFeatureWriterAppend(dataStore.getTypeNames()[0], Transaction.AUTO_COMMIT)) {
- // for (int u = 0; u < featureCollection.size(); u++) {
- // Feature feature = featureCollection.features().next();
- // SimpleFeature simpleFeature = (SimpleFeature) feature;
- // //for (SimpleFeature feature : featureCollection) {
- // SimpleFeature newFeature = writer.next();
- // newFeature.setAttributes(simpleFeature.getAttributes());
- // writer.write();
- // }
- // }
- // }
- //
- // public static void main(String[] args) {
- // try {
- // // 加载两个输入的 Shapefile 文件
- // FeatureCollection layer1 = loadShapefile("E:\\projects\\监测图斑审查上传\\图斑套合\\管控数据\\基本农田.shp");
- // FeatureCollection layer2 = loadShapefile("D:\\temp\\wuchuan.shp");
- // // 执行空间叠加分析,获取交集部分
- // FeatureCollection result = performIntersection(layer1, layer2);
- // // 导出交集结果到新的 Shapefile
- // exportToShapefile(result, "D:\\temp\\temp.shp");
- // System.out.println("空间叠加分析完成,结果已导出到新的 Shapefile。");
- // } catch (Exception e) {
- // e.printStackTrace();
- // }
- // }
- //}
|