首页 / 浏览问题 / 组件GIS / 问题详情
C#TIF转SIT代码怎么写?
2EXP 2022年09月29日

使用产品:SuperMap iObjects .NET 10i(2020) SP2 for Windows(32位)(Bin包)

操作系统:win11 x64

数据类型:文件型

问题详细描述:TIF影像转换为SIT时,执行以下代码,程序没有任何报错但也没有任何结果产生。

        public void ExportSettingSIT() {
            // 定义工作空间
            Workspace workspace = new Workspace();
            SuperMap.Data.Datasources dss = workspace.Datasources;
            DatasourceConnectionInfo datasourceConnectInfo = new DatasourceConnectionInfo();
            var tifpath = "C:\\Users\\Shuai.W\\Desktop\\SuperMap测试\\TIF2000影像(91)\\TIF2000影像91.tif";
            datasourceConnectInfo.Server = tifpath;
            datasourceConnectInfo.Alias = "TIF2000影像91";
            datasourceConnectInfo.EngineType = EngineType.ImagePlugins;
            SuperMap.Data.Datasource ds = dss["TIF2000影像91"];
            ds = dss.Open(datasourceConnectInfo); 
            SuperMap.Data.Conversion.ExportSettingTIF exportTIF = new SuperMap.Data.Conversion.ExportSettingTIF(ds, "C:\\Users\\Shuai.W\\Desktop\\SuperMap测试\\TIF2000影像(91)\\sss\\a.sit", SuperMap.Data.Conversion.FileType.SIT);
            //设置压缩编码
            exportTIF.Compression = SuperMap.Data.Conversion.TIFFCompression.COMPRESSION_JPEG;
            SuperMap.Data.Conversion.DataExport dataExport = new SuperMap.Data.Conversion.DataExport();
            dataExport.ExportSettings.Add(exportTIF);
            //挂接事件,监听转换过程
            dataExport.Stepped += new SuperMap.Data.Conversion.ExportSteppedEventHandler(DataExport_Stepped);
            //开始转换
            dataExport.Run();
            workspace.Close();
        }

1个回答

您好,根据您的描述是希望将TIF转换成SIT,而您的代码逻辑中是直接打开的TIF数据,直接打开是只读模式,无法进行数据导出,而且您导出使用的ExportSettingTIF是用于导出TIF数据的,不是导出SIT,建议你参考以下流程调整您的代码逻辑:

  1. 新建数据源;
  2. 通过DataImport导入TIF数据;
  3. 使用ExportSettingSIT和DataExport将导入的影像数据集导出成SIT数据。

具体代码参考如下:

var tifpath = "C:\\Users\\Shuai.W\\Desktop\\SuperMap测试\\TIF2000影像(91)\\TIF2000影像91.tif";

Workspace workspace = new Workspace();
Datasources dss = workspace.Datasources;
DatasourceConnectionInfo datasourceConnectInfo = new DatasourceConnectionInfo();
datasourceConnectInfo.Alias = Guid.NewGuid().ToString();
datasourceConnectInfo.EngineType = EngineType.Memory;
Datasource ds = dss.Create(datasourceConnectInfo);

DataImport dataImport = new DataImport();
ImportSettingTIF importSettingTIF = new ImportSettingTIF();
importSettingTIF.SourceFilePath = tifpath;
importSettingTIF.TargetDatasource = ds;
dataImport.ImportSettings.Add(importSettingTIF);
dataImport.Run();

ExportSettingSIT exportSettingSIT = new ExportSettingSIT();
exportSettingSIT.TargetFilePath = "C:\\Users\\Shuai.W\\Desktop\\SuperMap测试\\TIF2000影像(91)\\sss\\a.sit";
exportSettingSIT.SourceData = ds.Datasets[0];
DataExport dataExport = new DataExport();
dataExport.ExportSettings.Add(exportSettingSIT);
//开始转换
dataExport.Run();
workspace.Close();

希望可以帮到您。

2,138EXP 2022年09月29日
您好,首先感谢您的回答,然后我这边看了您的代码并运行测试,已经成功转换SIT,但是转换后的SIT文件还是过大,能否通过设置压缩率来进行压缩转换。
您好,导出SIT并没有提供设置压缩率的方式来进行压缩转换,SIT不支持设置压缩数据。
好的,再次感谢您的回答。
...