首页 / 浏览问题 / 组件GIS / 问题详情
c++组件开发读取本地tiff文件
19EXP 2022年11月18日
c++组件开发如何读取本地Dem.tiff文件并加载上图

1个回答

需要将tif数据导入到数据源中,如果这个操作是一次性的,建议直接在idesktop中先将数据导入,地图制作好,组件直接打开地图进行渲染即可,如果需要在c++组件层去实现,可以参考下面的代码:

 // TODO: 在此添加命令处理程序代码
    UGWorkspace* pWorkspace = (UGWorkspace*)m_pMapControl->GetMapEditWnd()->m_mapWnd.m_Map.GetWorkspace();
    UGDataExchange exchange = UGDataExchange();
    UGDataSource* ds = pWorkspace->GetDataSource(0);
    if (!ds)
    {
        return;
    }
    int issu = exchange.AttachDataSource(ds);
    
    UGGTiffImportParams importparams = UGGTiffImportParams();

    UGString NAME = ds->GetUnoccupiedDatasetName(_U("TIF"));
    importparams.SetDestDTName(NAME);
    importparams.SetFilePathName(_U("C:\\Users\\86182\\Desktop\\c++导入数据测试数据\\data\\tif\\dsm_4.tif"));
    UGint ii = importparams.GetFileType();
    int ss = UGExchangeParamsManager::IsValidImportParams(ii, importparams);

    UGint issucceed = exchange.Import(importparams);

    if (issucceed == 1)
    {
        
        UGDatasetRaster* dataset = (UGDatasetRaster*)ds->GetDataset(NAME);
        dataset->BuildPyramid(false);
        UGLayer* layer = m_pMapControl->GetMapEditWnd()->m_mapWnd.m_Map.m_Layers.AddDataset(dataset, true);
        m_pMapControl->GetMapEditWnd()->m_mapWnd.m_Map.SetViewBounds(layer->GetBounds(), true);
        m_pMapControl->Refresh();
    }
    else
    {
        //QMessageBox::information(NULL, QString::fromLocal8Bit("导入shp"), QString::fromLocal8Bit("导入失败"), QMessageBox::Close, QMessageBox::Close);
    }
4,620EXP 2022年11月18日
谢谢这么详细的回答,你这个思路还是不能满足我的需求,我的需求是读取本地的tif文件并加载,不是在工作空间里做好数据并加载。

如果不想要导入,直接开的话,就是直接打开数据源的方式,只是参数UGEngineType设置为ExtFile,其他设置和打开UDB数据源类似。打开数据源成功后获取出第一个数据集,添加到地图。但是这样打开tif数据是只读的

请问,通过该方法创建的图层,为什么必须在结尾加上@地图名,才可以通过getlayer找到,有办法直接通过图层名字找到该图层吗
...