基于GDAL实现Esri GDB文件导入到pg数据库

@RequestMapping("/Api/GDB")
@Api(tags = "gdb数据导入")
public class GdbToPgController {

    @GetMapping("execute")
    public void execute() {
        gdal.AllRegister();
        gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
        String sourceFilePath="\\\\1.1.8.47\\data\\b.gdb";
        String pgConnection= "PG:host=localhost dbname=gis user=postgres password=postgres";
        GdbToPgUtil.convert(sourceFilePath,pgConnection,"TEST","4548");
    }


}
public class GdbToPgUtil {
    /**
     * gdb数据转为pg数据工具方法
     * @param sourceFilePath
     * @param pgConnection
     * @param layerName
     * @param epsgCode
     * @return
     */
    public static  String convert(String sourceFilePath,String pgConnection,String layerName,String epsgCode) {
        String result="";
        try {
            // 打开GDB数据源
            Vector vector =new Vector();
            vector.add("OpenFileGDB");
            Dataset srcDS = gdal.OpenEx(sourceFilePath, gdalconst.OF_VECTOR, vector);
            Dataset dstDS = gdal.OpenEx(pgConnection, gdalconst.OF_UPDATE | gdalconst.OF_VECTOR);
            gdal.SetConfigOption("PG_USE_COPY","YES");
            // 配置转换选项
            Vector optionsVector =new Vector();
            optionsVector.add("-f");
            optionsVector.add("PostgreSQL");
            optionsVector.add("-overwrite");
            optionsVector.add("-sql");
            optionsVector.add("select * from "+layerName);
            optionsVector.add("-a_srs");
            optionsVector.add("EPSG:"+epsgCode);
            optionsVector.add("-lco");
            optionsVector.add("COLUMN_TYPES=ALL_LOWER");
            VectorTranslateOptions options = new VectorTranslateOptions(optionsVector);

            // 执行转换
            int ret = gdal.VectorTranslate(dstDS, srcDS, options);
            if (ret == 1) {
                System.out.println(layerName+"转换成功!");
                result="转换成功";
            } else {
                System.out.println(":错误 " + gdal.GetLastErrorMsg());
                result="错误"+ gdal.GetLastErrorMsg();
            }

            srcDS.delete();
            dstDS.delete();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            gdal.GDALDestroyDriverManager();
        }
        return result;

    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值