首页 / 浏览问题 / 组件GIS / 问题详情
c++ 打开地图出错
1EXP 2017年02月10日

使用产品:iObjects .net c++ 8c 811操作系统:win7 x64
数据类型: 文件型 (sample 里面的提供的样图)
问题详细描述:工作空间加载地图后获取不到地图名称,打不开地图
问题重现步骤:开发工具vs2010,继承cwnd类,准备完成,打开地图,放大缩小等操作

//新建工作空间 
    UGWorkspace* pWorkspace = new UGWorkspace(); 
    UGMap* pMap = this->GetMap();
    pMap->SetLineSmoothingMode(false); 
    //获取工作空间中的地图对象 
    if ( nullptr == pWorkspace || nullptr ==  pMap ) 
    { 
        return; 
    } 
    CFileDialog dlg(TRUE, _T("*.*"),L"" ,0, _T("所有文件(*.*)|*.*||"));
    if (IDOK != dlg.DoModal())
    {
        return ;
    }
    m_strMapPath = dlg.GetPathName();
    //打开指定的工作空间 
     UGString ugStrPath(m_strMapPath.GetBuffer());
    if(pWorkspace->Open(ugStrPath)) 
    { 
        pMap->SetWorkspace(pWorkspace);
    }
    else
        return;
    //获取工作空间的地图数量 
    int i = pWorkspace->m_MapStorages.GetCount();
    if( i <= 0 ) 
        return; 
    //获取工作空间中第一幅地图的地图名称 
    UGString mapName = pWorkspace->m_MapStorages.GetNameAt(1); 

    //打开地图 
    if (!pMap->Open(mapName)) 
        return; 
    //刷新地图窗口 
    this->Refresh();

问题关闭原因: 已解决

1个回答

你工作空间中一共有多少个地图,索引是从0开始,索引为1打开的是第二个地图
4,620EXP 2017年02月10日

获取的地图数量为什么会每次都不一样?

索引0的时候,应该是报异常了,只有索引1代码才正常,但是获取的地图名称是空的,打开地图失败

你使用的是示范数据中哪个数据测试的,如果工作空间没有变化,count地图总数是不会变化的,你将断点打在获取到count后看一下。索引从0开始,如果count= 1,打开第一幅地图用的索引就是0,你获取地图名的时候 改成

UGString mapName=pWorkSpace->m_MapStorages.GetMapAt(0)->GetName();  
 m_pMapWnd->m_mapWnd.m_Map.Open(mapName);

谢谢!

获取的count值比较大,从0开始索引,代码直接跳过了第个是count值,479735336,我两次测试的count值不一样...

请问有没有MFC的打开地图的demo,我参考下,不知道是不是地图窗口初始化做的有问题。
地图数据是这个

SMO_CPP_811_14428_59859_Win\sample\data\China400_E-map.smwu

在超图官网支持中心有一个基于mfc开发的地图基本操作的范例,你可以参考一下:http://support.supermap.com.cn,进入资源中心后,在知识库索引下搜索mfc,分类选择超图代码,在里面就可以看到了

...