首页 / 浏览问题 / 组件GIS / 问题详情
超图iobject如何把裁剪后的udb文件导出为新的udb或者udbx文件
16EXP 2024年07月30日
现在的需求,用户上传一份udbx或者udb的压缩包,要求对其中指定的一个数据集进行多面裁剪,基于裁剪结果,将新结果存储在一份新的udbx或者udb和udd文件中,导出给用户实现数据裁剪的效果

①、现在的话,我发现裁剪后我并不能生成一个udbx文件,找不到对应的接口,最多只找到导出为shp或者tif等的接口,求大佬指点

②、如何实现对一个数据集进行多面裁剪?现在api好像只支持一面裁剪?

1个回答

①、可以新建一个udbx数据源,然后结果存储在对应文件

②、需要对多个面循环裁剪

希望能帮助到您
955EXP 2024年07月30日
可以提供对应的api接口吗? 新建一个udbx数据源,我并没有在api文档找到呢

多面循环裁剪我也没找到哦,都是单面的裁剪

我后面自己找了一下,创建udb文件可以这样子

DatasourceConnectionInfo info = new DatasourceConnectionInfo();
info.setEngineType(EngineType.UDB);
info.setServer(filePath + "/" + fileNameWithoutExtension);
// 尝试打开或创建数据源
Workspace workspace = new Workspace();
Datasource datasource = workspace.getDatasources().create(info);
if (datasource == null) {
    // 如果数据源存在,创建失败则datasource为空,直接尝试打开它
    datasource = workspace.getDatasources().open(info);
}

2、多面循环裁剪

GeoRegion paintRegion = null;
if (CollectionUtil.isNotEmpty(point2DList)) {
    paintRegion = new GeoRegion();
    // 封装对应要裁剪的多边形的点
    for (List<Point2dDto> point2dTempList : point2DList) {
        Point2Ds point2Ds = new Point2Ds();
        for (Point2dDto point2dDto : point2dTempList) {
            point2Ds.add(new Point2D(point2dDto.getX(), point2dDto.getY()));
        }
        paintRegion.addPart(point2Ds);
    }
}

...

// 最后进行裁剪

finalDataset = VectorClip.clipDatasetVector(datasetVector, paintRegion, true, false, datasourceDesc, finalName);

对应的代码还是得自己想一想才知道。。。。通过找官方demo和api,就是有点费脑。。。

...