src/main/java/com/se/simu/utils/ShpToolUtils.java
@@ -96,6 +96,72 @@
        return json;
    }
    /**
     * 读取 shp get local
     *
     * @param strVectorFile str 向量文件
     * @return {@link JSONObject}
     */
    public static JSONArray readShpGetLocal(String strVectorFile) {
        // 注册所有的驱动
        ogr.RegisterAll();
        // 为了支持中文路径,请添加下面这句代码
        gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
        // 读取数据,这里以ESRI的shp文件为例
        String strDriverName = "ESRI Shapefile";
        org.gdal.ogr.Driver oDriver = ogr.GetDriverByName(strDriverName);
        if (oDriver == null) {
            System.out.println(strDriverName + " 驱动不可用!\n");
            return null;
        }
        // 打开数据源
        DataSource dataSource = oDriver.Open(strVectorFile);
        if (dataSource == null) {
            System.out.println("无法打开 Shapefile 文件!");
            return null;
        }
        Layer layer = dataSource.GetLayer(0);
        // 获取图层的范围(初步的矩形范围)
        double[] layerExtent = layer.GetExtent();
        System.out.println("初始图层范围:minx:" + layerExtent[0] + ", maxx:" + layerExtent[1] + ", miny:" + layerExtent[2] + ", maxy:" + layerExtent[3]);
        // 获取图层的空间参考
        SpatialReference layerSpatialRef = layer.GetSpatialRef();
        // 创建目标空间参考 (EPSG:4326)
        SpatialReference targetSpatialRef = new SpatialReference();
        targetSpatialRef.ImportFromEPSG(4326); // EPSG:4326 是 WGS84
        // 创建坐标转换对象
        CoordinateTransformation coordTransform = CoordinateTransformation.CreateCoordinateTransformation(layerSpatialRef, targetSpatialRef);
        // 遍历每个 feature 获取坐标点
        for (int i = 0; i < layer.GetFeatureCount(); i++) {
            Feature feature = layer.GetFeature(i);
            Geometry geometry = feature.GetGeometryRef();
            // 判断几何类型并处理
            if (geometry != null) {
                if (geometry.GetGeometryType() == ogr.wkbPoint) {
                    // 单个点的处理
                    processPointGeometry(geometry, coordTransform);
                } else if (geometry.GetGeometryType() == ogr.wkbMultiPoint) {
                    // 多个点的处理
                    System.out.println("geometry = " + geometry);
                    //processMultiPointGeometry(geometry, coordTransform);
                }
            }
        }
        // 打印转换后的矩形范围(经纬度)
        System.out.println("所有点的经纬度矩形范围:minX = " + minX + ", maxX = " + maxX + ", minY = " + minY + ", maxY = " + maxY);
        return coordinatesArray;
    }
    // 处理单个点的几何体
    private static void processPointGeometry(Geometry geometry, CoordinateTransformation coordTransform) {
        double x = geometry.GetX();