首页 / 浏览问题 / 组件GIS / 问题详情
iobject java导入shp文件到数据集不成功,导入dwg文件就可成功
12EXP 2023年10月10日

使用产品:iserver 11i 810

操作系统:win10 x64

数据类型: postgres

问题详细描述:iobject java导入shp文件到数据集不成功,没有提示报错,导入dwg文件就可成功

问题重现步骤: 1、导入dwg就成功

2、导入shp就失败,数据没有进入到iDesktop

package com.example.demo.test;

import com.supermap.data.*;
import com.supermap.data.conversion.*;

public class ImportShp3 {

    public static void main(String[] args) {
        String path = "D:\\software\\ArcGIS\\Desktop10.7\\Reference Systems\\World Time Zones.shp";
        Workspace workspace = new Workspace();
        DatasourceConnectionInfo info = new DatasourceConnectionInfo();
        info.setEngineType(EngineType.POSTGRESQL);
        info.setServer("10.1.6.160");
        info.setDatabase("postgres");
        info.setUser("postgres");
        info.setPassword("postgres");
        info.setAlias("10.1.6.160_postgres");
        // 打开数据源
        Datasource datasource = workspace.getDatasources().open(info);
        if (datasource == null) {
            System.out.println("打开数据源失败");
        } else {
            System.out.println("数据源打开成功!");
//            Dataset datasets  = datasource.open(info, "temp_shape");
//            String name = datasets.getName();
            //创建临时数据集
            Datasets datasets = datasource.getDatasets();
            boolean flag = datasets.delete("temp_shape3");
            String name = datasets.getAvailableDatasetName("temp_shape3");
            // 设置矢量数据集的信息
            DatasetVectorInfo datasetVectorInfo = new DatasetVectorInfo();
            datasetVectorInfo.setType(DatasetType.REGION);
            datasetVectorInfo.setEncodeType(EncodeType.NONE);
            datasetVectorInfo.setFileCache(true);
            datasetVectorInfo.setName(name);
            System.out.println("临时数据集的信息为:" + datasetVectorInfo.toString());
            DatasetVector dv_temp = datasets.create(datasetVectorInfo);
            //dv_temp.close();
            //导入到指定数据源的数据集中
            ImportSettingSHP importSettingSHP = new ImportSettingSHP();
            importSettingSHP.setAttributeIgnored(false);
            //设置当同名数据集存在时导入的模式,如果存在名字冲突,则覆盖
            importSettingSHP.setImportMode(ImportMode.OVERWRITE);
            //设置需要导入的数据路径信息
            importSettingSHP.setSourceFilePath(path);
            importSettingSHP.setImporttingAs3D(false);
            importSettingSHP.setImportMode(ImportMode.NONE);
            importSettingSHP.setTargetEncodeType(EncodeType.NONE);
            //设置需要导入的数据编码类型,因为有中文字段,所以用ASCII编码
            importSettingSHP.setSourceFileCharset(Charset.ANSI);
            //设置要导入的目标数据源
            importSettingSHP.setTargetDatasource(datasource);
            //设置目标数据集名称
            importSettingSHP.setTargetDatasetName(name);
            boolean importEmptyDataset = importSettingSHP.isImportEmptyDataset();
            DataImport importer = new DataImport();
            importer.getImportSettings().add(importSettingSHP);
            ImportResult result = importer.run();
            if (result.getFailedSettings().length == 0)
            {
                System.out.println("导入成功!");
            }
            ImportSetting[] failSettings= result.getFailedSettings();
            for (ImportSetting setting : failSettings) {
                System.out.println(setting.getImportMode());
                System.out.println(setting.getSourceFilePath());
                System.out.println(setting.getTargetDatasourceConnectionInfo());
                System.out.println(setting.getTargetDatasource().getDatasets());
            }
            // 释放资源
//            datasetVectorInfo.dispose();

        }
        // 释放工作空间资源
        info.dispose();
        workspace.dispose();
    }
}

1个回答

您好,您可以检查下数据是否可以从idesktopX桌面导入

如果可以,证明数据没问题,需要验证下是否缺少依赖库文件

如果不行的话,证明数据是有问题的,检查数据解决

希望能帮助到您。
635EXP 2023年10月10日

你好,数据我用idesktop是可以导入的,可以看得到数据

我是有引用到了 D:\softwarePackage\program\superMap\bin\supermap-iobjectsjava-11.1.1-win64-all-Bin\Bin 下面的全部依赖,

编译也没有报错,可以帮忙检查一下是否是代码的问题  或者是 版本iobject 11.1i的问题?

最后用的shp路径是用的   D:\\Desktop\\GIS_shp\\changzhou\\changzhou.shp  统一路径,也是导入不成功

iDesktop可以打开, iobject就是死活导入不了,真的纳闷
太坑了。。。。。。我换为10.2.1i的 iobject就可以导入成功了  

是11i的shp文件导入导出有问题? 还是因为我本地的 jdk是1.8的太低了不能匹配导致的?

困扰了2天的问题终于解决了。。。
您好,jdk1.8是可以的,您这个可能是11版本依赖缺少的原因。
好的,不过我11i也是从官网下的,不明白为什么依赖会缺少,不过我现在用回10.2.1i就可以了!
...