首页 / 浏览问题 / 组件GIS / 问题详情
iObject java 操作shp时,不能进行
5EXP 2022年03月31日

产品名称:iObject java 9D

操作系统:Win10 64

数据类型:shp

问题详细描述:

编辑记录集报错:记录集是只读的,不可修改

相关代码:

public static void main(String[] args) {
        // 打开工作空间,得到数据源
        Workspace workspace = new Workspace();
        Datasources datasources = workspace.getDatasources();
        DatasourceConnectionInfo info = new DatasourceConnectionInfo();
        info.setEngineType(EngineType.VECTORFILE);
        info.setServer("D:\\data\\成都建筑轮廓数据\\成都.shp");
        info.setReadOnly(false);//!!!!!!!!--------这里设置了可编辑

        Datasource datasource = datasources.open(info);
        System.out.println(datasource.isReadOnly()+"---");//!!!!!!!!--------这里打印出来结果还是为:true

        //创建临时数据集
        Datasets datasets = datasource.getDatasets();

        DatasetVector datasetVector = (DatasetVector) datasets.get("成都");
        queryParameterTest(datasetVector, datasets);//快速拆分数据集

        //批量生成shp文件
        toShp(datasource,datasets);

        // 释放相关资源
        datasources.closeAll();
        info.dispose();
        workspace.close();
        workspace.dispose();
        printWithStar("程序退出");
    }

 public static void queryParameterTest(DatasetVector dataset_world,Datasets datasets){

        System.out.println(datasets.getCount());
        // 进行查询
        Recordset recordset = dataset_world.getRecordset(false, CursorType.DYNAMIC);//这里设置了动态
        for (recordset.moveFirst(); !recordset.isEOF() ; recordset.moveNext()) {
                GeoRegion geometry = (GeoRegion) recordset.getGeometry();
                int floor = recordset.getInt32("FLOOR");
            recordset.setString("name","建筑名称");//!!!!!!!!--------这里报错:记录集是只读的,不可修改
            System.out.println(recordset.getString("name"));
        }

        // 以 dataset_world 为模板创建数据集
        DatasetVector dataset_result = (DatasetVector) datasets.
                createFromTemplate(datasets.getAvailableDatasetName("文件名称"), dataset_world);//!!!!!!!!!----这里报错数据源是只读,不可修改

        // 将空间查询结果追加到新建的数据集中
        dataset_result.append(recordset);

        // 依次关闭所有对象
        dataset_result.close();
        recordset.dispose();
        dataset_world.close();
    }

...