java版GDAL学习之路——创建数据集

创建矢量数据集

完整代码

/**
     * 创建一个空的矢量图层
     * @param driverName:驱动名称
     * @param path:图层保存路径,要和驱动匹配
     * @param layerName:图层名称
     * @param spatialReference:图层空间参考
     * @return 返回创建好的图层
     */
    public static Layer createShp(String driverName, String path, String layerName, SpatialReference spatialReference) {
        Layer result = null;

        Driver driver = ogr.GetDriverByName(driverName);
        if (driver == null) {
            System.out.println(driverName + "不可用");
            return null;
        }
        DataSource dataSource = null;
        //这里需要判断一下path是否已经存在,存在的话先删除再创建(如果是已存在的gdb,则直接打开)
        File file = new File(path);
        if (file.exists()) {
            if (file.isFile()) {
                //删掉同名(不带后缀)文件
                String parentDir = getParentDir(file.getPath());
                File dir = new File(parentDir);
                deleteFilesLikeName(dir,layerName);
                //重新创建
                dataSource = driver.CreateDataSource(path, null);
            } else if (file.isDirectory()) {
                dataSource = driver.Open(path, 1);
                //GDB中存在同名图层则删除
                for (int i = 0; i < dataSource.GetLayerCount(); i++) {
                    Layer layer = dataSource.GetLayer(i);
                    if (layerName.equals(layer.GetName())) {
                        dataSource.DeleteLayer(i);
                        dataSource.FlushCache();
                    }
                }
            }
        } else {
            dataSource = driver.CreateDataSource(path, null);
        }
        if (dataSource == null) {
            System.out.println("数据源创建/打开失败");
            return null;
        }
        result = dataSource.CreateLayer(layerName, spatialReference, ogr.wkbPolygon, null);
        if (result == null) {
            System.out.println("【"+layerName+".shp】"+ "创建失败");
            return null;
        }
        System.out.println("【"+layerName+".shp】" + "创建成功");
        return result;
    }

	/**
     * 获取路径的上一级目录
     * @param path:文件路径
     * @return
     */
    public static String getParentDir(String path){
        String parentDir = "";
        int end = path.lastIndexOf("\\");
        parentDir = path.substring(0,end);
        return parentDir;
    }

	/**
     * 删除文件名包含指定字符串的文件
     * @param file
     * @param likeName
     */
    public static void deleteFilesLikeName(File file,String likeName){
        if(file.exists()){
            if(file.isFile()){
                String temp = file.getName().substring(0,file.getName().lastIndexOf('.'));
                if(temp.indexOf(likeName)!=-1){
                    file.delete();
                }
            }
            else {
                File[] files = file.listFiles();
                for (int i = 0; i < files.length; i++) {
                    deleteFilesLikeName(files[i],likeName);
                }
            }
        }
    }

创建栅格数据集

完整代码(待更新)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值