首页 / 浏览问题 / 移动GIS / 问题详情
报错:数据源所属的工作空间为空或者已经释放
66EXP 2020年05月15日

数据源创建成功,断点datsourceYoungerClassRegion数据源时还是有值的。然后画面,然后从中取出名为“小班面数据”(面数据集)的矢量数据集 dataset,报错java.lang.IllegalStateException: 数据源所属的工作空间为空或者已经释放,创建数据源后面的释放是必须写的吗?是不是这段代码“//释放资源 workspace.dispose();”造成的?

1个回答

您好,在新建数据源之前有做什么工作空间的操作吗?建议您把工作空间和数据源设置全局变量,方便其他方法调用
9,232EXP 2020年05月15日
workspace换成全局的了,workspace变成全局的后,创建数据源就直接崩溃了,也不报错误。数据源也是全局的。在新建数据源之前的操作就是打开工作空间,初始化地图。

刚把释放资源这句话注掉了,然后创建数据源就不崩溃了,这句话是必须的吗?

//释放资源
//workspace.dispose();

我这样取出“小班面数据”对吗?已经添加到跟踪图层上了,为什么会为null呢?

你创建的是数据源,有创建数据集吗?创建的数据集名称是什么
Recordset没有create方法,还需要创建吗?方法类是哪个啊?
你新建的数据源里面肯定是没有数据集的,需要自己手动创建数据集,datasource.getDatasets().create()。您可以在帮助文档搜索一下。
找到了。我写了创建数据集。最后一句是创建数据集的,那我的数据集名称和数据源别名是一样的,还是要怎么起?

//踏查线号文件夹路径
String fileName = FileUtils.getLineNoPath(getLineNo());
//设置 UDB 数据源连接信息
DatasourceConnectionInfo info = new DatasourceConnectionInfo();
info.setAlias("YoungerClassRegion");
info.setEngineType(EngineType.UDB);
info.setServer(fileName + "/YoungerClassRegion.udb");
//创建数据源
Datasources datasources = workspace.getDatasources();

datsourceYoungerClassRegion = datasources.create(info);
你这个是创建数据源的,不是创建数据集的。你那边多参考一下帮助文档,直接搜索datasets
这个是创建数据集吧?datasets.create(dvInfo);报错:数据集名称已被占用,我换了好几个名字了还不行

//创建数据集
Datasets datasets = workspace.getDatasources().get(0).getDatasets();
String dtName = datasets.getAvailableDatasetName("DatasetsRegion");
DatasetVectorInfo dvInfo = new DatasetVectorInfo(dtName, DatasetType.REGION);
DatasetVector dv = datasets.create(dvInfo);
Recordset rr = dv.getRecordset(false, CursorType.DYNAMIC);

你没有设置数据集的名称呀,需要用 datasetVectorInfo.setName(name);来设置数据集的名称,您那边看一下帮助文档,上面有示范代码的
再请教个问题,导出文件前先给他设置坐标系,prjCoordSys是在打开工作空间后获取的地图坐标系,显示为Longitude / Latitude Coordinate System---GCS_China_2000坐标系,我需要的不是投影坐标,怎么把它转成Longitude / Latitude Coordinate System---China Geodetic Coordinate System 2000 坐标系呢?或者这两个坐标系是一种,那是否存在误差?

Dataset dataset = datsourceYoungerClassRegion.getDatasets().get("YoungerClassRegion");
dataset.setPrjCoordSys(prjCoordSys);
//导出.shp文件
DataConversion.exportSHP(fileName, dataset);
...