11
13693261870
2024-09-27 dd9c2d6758376ee81262d27970efac424d49b2ba
11
已修改1个文件
46 ■■■■■ 文件已修改
src/main/java/com/se/simu/helper/ShpHelper.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/helper/ShpHelper.java
@@ -7,6 +7,7 @@
import com.se.simu.domain.dto.GeLayer;
import lombok.extern.slf4j.Slf4j;
import org.gdal.ogr.*;
import org.gdal.osr.SpatialReference;
import java.sql.Timestamp;
import java.time.LocalDateTime;
@@ -33,6 +34,51 @@
        return options;
    }
    public static boolean createShp(String filePath, SpatialReference sr, Double minx, Double miny, Double maxx, Double maxy) {
        Driver driver = null;
        DataSource dataSource = null;
        Layer layer = null;
        try {
            driver = ogr.GetDriverByName("ESRI shapefile");
            if (null == driver) return false;
            dataSource = driver.CreateDataSource(filePath, null);
            if (null == dataSource) return false;
            layer = dataSource.CreateLayer(FileUtil.getName(filePath), sr, ogr.wkbPolygon, getOptions());
            if (null == layer) return false;
            Feature f = new Feature(layer.GetLayerDefn());
            Geometry g = createPolygon(sr, minx, miny, maxx, maxy);
            f.SetGeometry(g);
            layer.CreateFeature(f);
            return true;
        } catch (Exception ex) {
            log.error(ex.getMessage(), ex);
            return false;
        } finally {
            GdalHelper.delete(layer, dataSource, driver);
        }
    }
    private static Geometry createPolygon(SpatialReference sr, Double minx, Double miny, Double maxx, Double maxy) {
        //
        Geometry ring = new Geometry(ogr.wkbLinearRing);
        ring.AddPoint_2D(minx, maxy);
        ring.AddPoint_2D(maxx, maxy);
        ring.AddPoint_2D(maxx, miny);
        ring.AddPoint_2D(minx, miny);
        ring.AddPoint_2D(minx, maxy);
        Geometry poly = new Geometry(ogr.wkbPolygon);
        poly.AddGeometry(ring);
        return poly;
    }
    public static boolean createShp(String filePath, GeLayer geLayer) {
        Driver driver = null;
        DataSource dataSource = null;