//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 featureSource1 = dataStore.getFeatureSource(typeName1); // FeatureCollection 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 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(); // } // } //}