首页 / 浏览问题 / 组件GIS / 问题详情
C++CAD数据集导入
56EXP 2019年12月25日
在idesktop端上新建了一个CAD数据集进行了标绘,然后把这个CAD数据集导出,现在我需要在c++组件中把这个CAD数据集导入,并把它加入到我当前地图中,请问一下我该如何做?

1个回答

您好,用iDesktop制作的数据集,可以直接在C++组件使用,如果导出为其他文件格式,那么需要将其往数据源导入成数据集。

地图添加数据集图层使用UGMap::m_Layers.AddDataset();
694EXP 2019年12月25日
就是说我制作的这个CAD数据集是可以单独直接导入到c++组件下的是吧?
您好,简单说,iDesktop处理的数据,C++也能用,方式流程一样,用代码实现即可。
但是我在iDesktop中把CAD数据集导出,再次将它导入是导入不成功的
导出的是什么?用的是什么方法呢?想udb数据源,是可以直接打开的。
导出的是dxf文件类型的CAD数据集,直接右键导出的啊,主要是如果整个UDB数据源进行导出的话,文件太大,会严重影响系统指标,
你好,我尝试了一下看是否能导入CAD数据集,当时用函数

UGbool ss = UGExchangeParamsManager::IsValidImportParams(ii ,*Params );来检查是ss的值是1,但是用
 UGint issucceed = exchange .Import (*Params );时issucceed的值是-1,导入失败

您好,抱歉没看到您的回复。之前说的不是很清楚,每个数据类型都有对象的导入参数类,可在include/FileParser目录查找头文件。

导入dxf 需使用UGDxfImportParams,而导入失败可能是导入模式设置错误。请参考下面的代码,若有更多设置,如坐标系,请查看参数类API。

UGDataExchange dataExchange;
	UGDxfImportParams params;

	Workspace* pWorkspace = m_pMapControl->GetWorkspace();
	UGDataSource* pDatasource = pWorkspace->GetUGWorkspace()->GetDataSource(0);

	dataExchange.AttachDataSource(pDatasource);

	params.SetFilePathName(_U("F:\\JunSuperMap\\2 SuperMapData\\Custom\\All\\各种格式\\cad\\绿化000001.dxf"));
	params.SetDestDTName(_U("绿化000001"));
	params.SetImportMode(UGImportParams::ModeCAD); 
	UGint res = dataExchange.Import(params);

另外,为了省时省力,节省存储空间,可以使用UDB文件作为源数据。新建一个数据源,复制需要的数据集即可。应用中只需打开数据源,获取数据集就行了。

你好,我按照你说的写还是导入不成功,issucceed的值为-1,

UGDataExchange exchange ;
    UGbool issu = exchange .AttachDataSource(pWorkspace->GetDataSource(0));
    if(!issu)
    {
        return;
    }
    UGDxfImportParams Params;
    UGString dataSourceName1 = _U("/opt/zzs/supermap/New_CAD.dxf");
    Params.SetFilePathName(dataSourceName1);
    Params.SetDestDTName(_U("New_CAD"));
    Params.SetImportMode(UGImportParams::ModeCAD);
    UGint issucceed = exchange.Import (Params );
...